现在是学习汇编语言的第八周,要完成实验任务二和三,因为我的一时疏忽一开始没有加入教学班,所以实验任务一虽然写了随便但是并没有提交记录……

不过这也算给自己一个教训,刚开始学习并没有很重视,但是看到了同班同学写的博客感觉触动挺大,很多人已经不仅仅局限于课堂上的学习知识了,自己在学习上也应该更加主动了

实验任务二

实验任务(1)

按实验结果填空:

mov ax,0021

mov ds,ax

mov ax,2000

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=00FE;修改的内存单元的地址是2200:00FE内容为3130

push bx     ;sp=00FC;修改的内存单元的地址是2200:00FC内容为6462

pop ax    ;sp=00FC;ax=6122

pop bx    ;sp=00FC;bx=5CCA

 

push [4]     ;sp=00FC;修改的内存单元的地址是:00FE内容为3130

push [6]          ;sp=00FC;修改的内存单元的地址是:00FC内容为6264

为了方便输入先用R CS:IP指令将CS:IP指向修改为指向1000:0000,再用e命令输入e 0021:0 30 31 32 33 34 35 36 37

用D命令查看内存中的内容,发现已经修改成功

再用A命令输入要求的指令,用T命令单步执行并观察每一步指令的执行情况:

可以看到,虽然有15条指令但是只执行了14步,可以看到再执行完 mov ss,ax后,寄存器SP的值也被更改成了 0100,而这一步本应该是下一步要执行的命令。T指令都是只执行一步的。

关于这点书上给的是:Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。日后的课程会进一步解释“中断机制”,今天先写在这里。

实验(2)

用Debug工具使用A命令写入指令并如实验要求执行:

然后使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操 作  使用 a 命令输入的 p74中的指令,用T命令单步执行并且每次执行后查看2000:f中的变化:

前三段指令的功能:

2000进入AX寄存器,

AX中的值赋值给SS,

SP的值改为0010。

变化的原因为:

因为T命令是单步中断,而CPU执行中断时会保留现场,即将标志寄存器CS,IP等入栈,而实验中栈的地址正好是要查询的内存地址,但是里面的值会因为保留现场而被更改。

2.总结体会

通过观察T命令的单步执行过程,对出栈入栈有了更深入的理解,同时初步了解到了中断机制。

 

 

posted on 2018-10-26 17:21  123冰水泡面  阅读(4342)  评论(4编辑  收藏  举报