实验2

 

 

.实验结论

(2).1

 

 

 

 

 

Mov ax,[0]   ;ax=3130

Add ax,[2]      ;ax=6462

 

 

Mov bx,[4]     ;bx=3534

Add bx,[6]      ;bx=6C6A

 

 

 

Push ax           ;sp=00FE;修改的内存单元地址是2100:00FE,内容为 6462

Push bx           ; sp=00FC;修改的内存单元地址是2100:00FC ,内容为 6C6A

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

Pop bx          ;sp=0100  ;bx=6462

 

 

Push [4]          ; sp=00FE;修改的内存单元地址是2100:00FE,内容为3534

Push [6]          ; sp=00FC;修改的内存单元地址是2100:00FC,内容为3736

实验结果与预判一致

 

 

(2).2

 

 

 

 

 

 

 

 

 

 

根据观察 mov sp,10 没有在单步执行中出现,但在下一步中 sp 的值已经从FFEE 变为0010了,判断为跟随 mov ss,ax一起执行了

在书12章 内中断中找到了具体解释

12.12 响应中断的特殊情况

在执行完向ss寄存器传送数据的指令后,即便是发生中断cpu也不会响应。因为ss:sp联合指向栈顶,对他们的设置应该连续完成。如果设置完ss以后cpu响应中断,要在栈中压入标志寄存器,cs和ip的值。(而此后sp会被改变)此时的栈顶是不正确的。所以cpu在执行设置完ss以后不响应中断。

 

 

2000:0~2000:f 发生变化的原因是

因为栈段地址是 2000:0010

当进行压栈操作时cpu 将sp-2 然后修改内存单元值

但在进行压栈操作前,修改段地址和偏移地址时 内存2000:7~2000:F  发生变化的原因还不知道

 

五.总结与体会

在本次实验中,通过单步执行,观察寄存器和内存单元值的变化,掌握了汇编语言中栈的特性,也熟悉了栈的操作,通过查找资料,提前翻书,了解了一部分12章中内中断的内容,同时也留下了一些问题,会努力在日后解开的。

 

posted @ 2018-11-18 20:22  =lucia  阅读(136)  评论(1)    收藏  举报