实验任务

(1)使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的情况填空

mov ax,ffff

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,[0];ax=C0EA

add ax,[2];ax=C0FC

mov bx,[4];bx=30F0

add bx,[6];bx=6021

push ax;sp=00FE,修改的内存单元的地址是2200:FE~100,内容为C0FC

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

pop ax;sp=00FE,ax=6021

pop bx;sp=0100,bx=C0FC

push [4];sp=00FE,修改的内存单元的地址是2200:FE~100,内容为30F0

push [6];sp=00FC,修改的内存单元的地址是2200:FC~FE,内容为2F31

(2)观察实验,分析为什么2000:0~2000:f中的内容会发生改变

Debug当中提供了单步中断的中断处理程序,在使用t命令之后,Debug会将标志寄存器的TF位设置为1,然后使得CPU工作于单步中断的方式下,也就是说CPU在执行完t命令之后就会去引发单步中断,然后去执行单步中断的中断处理程序。

在执行完设置ss的指令之后,CPU响应中断,引发了中断过程,要在栈中压入标志寄存器、CS和IP的值,而这个时候ss改变了,sp没有改变则会出错。ss:sp需要联合的去指向栈顶,对它们的设置应该去连续的完成,这样即便是发生了中断,CPU也不会响应。(总结于百度搜索所得)

posted on 2018-11-01 19:46  zstorma  阅读(120)  评论(1)    收藏  举报