1.实验结果
(1) 使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax,ffff
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 ;修改的内存单元的地址是 2200:FE到FF 内容为6462
push bx ;sp= 00FC ;修改的内存单元的地址是 2200:FC到FD 内容为6C6A
pop ax ;sp=00FE ;ax= 6C6A;
pop bx ;sp= 0100 ;bx= 64 62 ;
push [4] ;sp=00FE ;修改的内存单元的地址是 2200:FE到FF 内容为34 35
push [6] ;sp= 00FC ;修改的内存单元的地址是 2200:FC到FD 内容为 36 37
(2)
仔细观察下图中的实验过程,然后分析:为什么在2000:0~2000:f中的内容会发生改变?
- 前三行指令的功能为:
2000进入AX寄存器,
AX中的值赋值给SS,
SP的值改为0010。
- 变化的原因为
在用t指令进行调试时,会产生中断。cpu将先把标志寄存器进栈,再把当前的cs的值进栈,IP的值最后进栈。
2.总结体会
了解到了进栈和出栈的操作,对栈有了更深刻的理解和体会。