本篇介绍第4章《第一个程序》的实验,即实验3 编程、编译、连接、跟踪,下面看具体的实验过程:
(1)将下面的程序保存为t1.asm文件,将其生成可执行文件t1.exe。
assume cs:codesg
codesg segment
mov ax,2000H
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00H
int 21
codesg ends
end
使用用masm生成t1.obj
使用link生成t1.exe可执行程序
(2)用debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。
加载exe
单步执行命令
执行pop指令时分两步,第一步是将SS:SP字单元内容送入AX,使用d命令查看SS:SP处的内容,即2000:10处理的内容为0,即AX=0,然后SP=SP+2,即SP=0012
pop BX同理,执行完成后,SP=0014,如下图所示
push 指令与pop指令两反,但同样也分两步,第一步将SP=SP-2,然后,将AX寄存器的内容送入SS:SP地址处,我们首先查看2000:10~2000:14地址里的内容,然后执行指令,查看2000:10 ~ 2000:14的内容
从上图的结果看到,2000:10~2000:13里的内容都为0了,因为AX和BX的内容都为0,同时SP也减了两次2恢复到0010了。
接着继续执行两条pop指令,SP按规则变化,如下图所示
最后执行到int 21指令时,输入p结束程序。
(3)PSP的头两个字节是CD 20,用Debug加载t1.exe,查看PSP的内容。
根据上面的调试信息,PSP的区域为075A:0~100H(75A0~76A0)这256个字节区域。查看PSP的头两个字节如下: