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

一.实验准备学习

  1.为了便于验证明验结果,对「2. 实验任务」中的(1)作以下调整:spa

 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 3d

个字节数据修改成 30H, 31H, 32H, 33H,34H,35H,36H,37H调试

2.修改完成后,用d命令进行查看是否完成了修改code

 

二.使用Debug,将书中的事例程序段写入内存,逐条执行,根据指令执行后的实际运行状况完成书中填空blog

1.用a命令将事例汇编指令写入内存(注:第 1 行的 mov ax, ffff → 改成 mov ax, 0021)内存

 

2.实验前根据理论知识进行书中内容填空io

 

 

mov ax,0021

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

push bx       ;sp = 00FC;修改的内存单元的地址是220FC内容为6C6A

pop ax         ;sp = 00FE;ax = 6C6A

pop bx         ;sp = 0100;bx = 6462



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

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

 

3.在单步执行汇编指令前,先使用r命令查看寄存器的初始值class

栈顶的初值为ss=073F,栈底的初值为sp=00FDbug

4.使用t命令进行单步逐条执行

这里面的代码中,在执行mov ss,ax后,应该待执行指令是mov sp,0100,但彷佛跳过了这一句,而去待执行

下一句mov ax,[0].但对比观察后发现虽然mov sp,0100并无显示待执行,实际上仍是产生了执行了的效果,

sp的值被设为0100。能够当作mov ss,ax与mov sp,0100同时执行了

上面的执行语句中,出现了不少pop,push出栈,入栈语句,在入栈时sp = sp-2.在出栈时sp=sp+2

5.比对实验结果与理论填空

能够发现事先的填空内容与实验结果是一致的

三.仔细观察书中事例图的实验过程,而后分析:为何2000:0~2000:f中的内容会发生改变

1.按图中代码敲入

 

并用e命令修改2000:0~2000:f(第一条指令将ax的值设为2000H)内存单元的内容,用d指令查看是否修改为功

2.用r指令查看各寄存器初值

初始栈顶SS为073F,初始栈底SP是00FD,待执行语句为mov ax,2000

3.用t指令逐条执行

执行了mov ax,2000汇编指令,将ax寄存器的值设为2000,待执行指令 mov ss,ax

栈顶地址寄存器SS的值按指令设为了2000,在这里出现了上一个实验同样的状况,

在这里咱们进行详细分析按逐条执行的顺序来讲,下一条待执行指令应该是mov sp,10.

但这里彷佛跳过了这条指令,待执行指令为mov ax,3123,经仔细比对寄存器内容

单步执行mov ss,ax前,ax = 2000;ss=073f;sp=00fd

单步执行mov ss,ax后,ax = 2000;ss=2000;sp=0010 

发现SP的值被设为了10,也就是说mov ss,ax和mov sp,10同时执行了

通常状况下,用T命令执行一条指令后,会中止继续执行,显示出当前CPU各个寄存器

的状态和下一步要执行的指令,但T命令执行mov ss,ax指令时倒是同下一条指令一同执行

了,根据上一个实验和这个实验猜想在修改栈段寄存器SS指令时会出现这种状况

经了解这种现象是因为中断机制形成的,Debug的T命令在执行修改寄存器SS的指令时,下一

条指令也紧接着被执行了。

执行了mov ax,3123将ax的值设为3123,待执行push ax

执行了push ax语句,将ax寄存器内容入栈,栈底寄存器sp相应的发生变化,待执行mov ax,3366

后面均按照逐步执行的顺序进行执行了

四.总结

  经过这次实验理解并掌握了「栈」内存空间的特性和使用理解并掌握 8086 汇编指令

mov, add, sub, push, pop 的用法,切实体会到「栈」内存空间的复杂性,不只要考虑到越界

,还发现了中断机制的存在,只是如今咱们还没法深刻了解中断机制,期待在后续课程的学习中可以

深刻研究其内在缘由。

相关文章
相关标签/搜索