实验任务
(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
实验所用设备的内存地址FFFFH:0000H ~ FFFFH:000FH的内容如下图所示:
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100
mov ax,[0] ; ax=C0EAH
add ax,[2] ; ax=C0FCH
mov bx,[4] ; bx=30F0H
add bx,[6] ; bx=6021H
push ax ; sp=00FEH, 修改的内存单元的地址是220FEH, 内容为C0FCH
push bx ; sp=00FCH, 修改的内存单元的地址是220FCH, 内容为6021H
pop ax ; sp=00FEH, ax=6021H
pop bx ; sp=0100H, bx=C0FCH
push [4] ; sp=00FEH, 修改的内存单元的地址是220FEH, 内容为30F0H
push [6] ; sp=00FCH, 修改的内存单元的地址是220FCH, 内容为2F31H
(2)仔细观察图3.19中的实验过程,然后分析:为什么2000:0 ~ 2000:f中的内容会发生改变?
图3.19 用Debug进行的实验
首先由上图可以看出,内存地址2000H:0000H ~ 2000H:000FH所存储的内容均被置为0。
mov ax,2000
mov ss,ax
mov sp,10
以上三条指令执行后,将会使SS:SP指向2000H:0010H,即栈的大小为16B。
mov ax,3123
push ax
以上两条指令执行后,将会使寄存器AX中的内容被压入栈中,即内存地址2000H:000EH处。
所以内存地址2000H:000EH ~ 2000H:000FH的内容会被置为3123H。
mov ax,3366
push ax
以上两条指令同理。