实验内容:
(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 21H
codesg ends
end
具体操作如下:
a.在Edit中编辑程序,然后保存文件D:t1.asm后,退出Edit
b.对程序进行编译
c.对程序进行连接和执行
(2)用Debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。
具体操作如下:
a.Debug将程序从t1.exe中加载入内存,然后用r命令查看一下寄存器的设置情况再用u命令查看一下其他指令
b.然后开始进行跟踪,用t命令单步执行程序中的每一条指令,并观察每条指令的执行结果,直到得到int 21
c.最后,用p命令执行int 21
(3)PSP的头两个字节1是CD 20,用Debug加载t1.exe,查看PSP的内容。
具体操作如下:
注:最后是使用q命令退出
实验总结:
1.汇编程序从写入到执行的过程:编程(Edit)~ t1.asm ~ 编译(masm)~ t1.ojb ~ 连接(link)~ t1.exe ~ 加载(command)~ 内存中的程序 ~ 运行(CPU);
2.在DOS中用“debug t1.exe”运行Debug对t1.exe进行跟踪时,程序加载顺序是:command加载Debug,Debug加载t1.exe。
返回顺序是:从t1.exe中的程序返回到Debug,从Debug返回到command。