实验 2 用机器指令和汇编指令编程

实验任务一、

  ·使用e命令修改 0021:0~0021:f数据,将连续8个字节改为30H, 31H, 32H, 33H,34H,35H,36H,37H,使用d命令查看修改后的结果

  

  ·使用debug,写入程序段(将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021)

  将程序段写入后,可以使用r指令查看当前CS:IP

  

  使用t指令单步执行查看结果

  ·mov ax,0021

  

  ·mov ds,ax

  

  ·mov ax,2200

  

  ·mov ss,ax

  

  【注意:此处指令 mov sp,0100被略过,原因:在执行修改ss的指令后,即此处执行mov ss,ax后,下一条指令因中断机制被紧接执行】

  ·mov ax,[0]

  

  ->ax=3130

  ·add ax,[2]

  

  ->ax=6462

  ·mov bx,[4]

  

  ->bx=3534

  ·add bx,[6]

  

  ->bx=6c6a

  ·push ax

  

  ->sp=00fe  修改的内存单元的地址为2200:00fe,内容为6462h

  ·push bx

  

  ->sp=00fc  修改的内存单元的地址为2200:00fc,内容为6c6ah

  ·pop ax

  

  ->sp=00fe  ax=6c6a

  ·pop bx

  

  ->sp=0100  bx=6462

  ·push [4]

  

  ->sp=00fe  修改的内存单元的地址为2200:00fe,内容为6c6ah

  ·push [6]

  

  ->sp=00fc  修改的内存单元的地址为2200:00fc,内容为3736h

实验任务二、

  1.记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f的值,及修改后查看的部分

  

  

  

  2.单步调试每一行汇编指令的截图。且每一条指令单步调试后,都使用 d 命令查看2000:0~2000:f 的值。

  第一步:mov ax,2000

  

  内容没有变化

  第二步+第三步:mov ss,ax+mov sp,10

  

  【注意到,此时在执行完mov ss,ax后,同样由于中断机制,紧接着执行mov sp,10语句。且mov sp,10必须跟在mov ss,ax后,(因为EA(有效地址)=段基址*16+偏移地址,设置了段基址,就得马上设置偏移地址,否则就会默认sp(堆栈指针)为0。故一般需要连着使用。)】

  前三步执行的作用:设置ss=2000h,sp=0010h 即初始化栈顶

  初始化栈顶2000:0010  初始化栈底:2000:0010

总结、

  通过实验,更进一步了解了CPU提供的栈机制,也对push、pop两条指令有了更进一步的掌握。 

  

  

 

posted @ 2018-10-28 10:46  idddddddd  阅读(228)  评论(2编辑  收藏  举报