实验二
实验前应了解的是d命令的一些格式
1)
-r ds
:1000
-d ds:0 //查看从1000:0开始的内存区间中的内容
2)
-r ds
:1000
-d ds:10 18//查看1000:10-1000:18中的内容
-d cs:0 //查看当前代码段中的指令代码
-d ss:0 //查看当前栈段中的内容
实验任务:
1)
代码含义:
mov ax,ffff
mov ds,ax
将ds指向了ffff段内存,即数据段数ffffH:00开始的内存单元
mov ax,2200
mov ss,ax
mov sp,0100
建立栈结构,ss指向2200H段内存,初始化栈顶指针是100H
mov ax,[0] //;ax=C0EA
add,ax,[2] //;ax=C0FC
mov bx,[4] //;bx=30F0
add bx,[6] //;bx=6021
参看电脑上显示出来的ds段内存可得到以上答案
push ax //将ax压栈
push bx //将bx压栈
pop ax //栈顶元素弹出送入ax
pop bx //栈顶元素弹出送入bx
push [4]
push [6]
将内存单元【4】【6】压栈
2)分析:在2000H的内存段创建了一个栈,ss:sp指向了栈顶2000:10H,给ax赋值3123后压入栈中,再给ax赋值3366后压入栈中。
刚开始没有执行代码时d命令观察2000:00内存时都是00,执行t命令后这段内存就多了一些数据,我个人认为应该是因为t命令是单步跟踪,每一步之间中断时会产生一些寄存器变量,cpu将这些变量自动压入了栈中导致的(毕竟sp的值是正确的,所以应该是这个原因啦)