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里面数据会变。

posted on 2018-11-01 21:11  网工2班53  阅读(210)  评论(3)    收藏  举报