1.预备知识:Debug的使用
Debug在执行“d 1000:0”时,会将段地址送入ds中,Debug的命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行
2.实验任务
(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax , ffff
mov ds , ax
mov ax , 2200
mov ss , ax
mov sp , 0100
mov ax , [0] ;ax=3130
add ax , [2] ;ax=6462
mov bx , [4] ;bx=3534
add bx , [6] ;bx=6C6A
push ax ;sp=00FEH ;修改的内存单元的地址是2200:00FE内容为6462
push bx ;sp=00FCH ;修改的内存单元的地址是2200:00FC内容为6C6A
pop ax ;sp=00FEH ;ax=6C6A
pop bx ;sp=0100H ;bx=6462
push [4] ;sp=00FE ;修改的内存单元的地址是2200:00FE内容为3534
push [6] ;sp=00FC ;修改的内存单元的地址是2200:00FC内容为3736
具体的操作步骤见下图:
用r和t命令分别执行
(2)为什么2000:0~2000:f中内容会改变?
在用T命令单步执行mov ax ,2000后,显示出当前CPU各个寄存器的状态和下一步要执行的指令:mov ss,ax;在用T命令执行mov ss,ax的时候,
下一条指令mov sp,10也紧接着执行了。他是修改栈段寄存器ss的指令。一个T命令执行两条指令,mov ss,ax和mov sp,10.而mov sp,10是让安排
2000:0000——2000:000F为栈空间,初始化栈顶。所以2000:0000——2000:000f里面数据会变。