实验任务
- 将下面的程序保存为t1.asm,将其生成可执行文件t1.exe
用Vscode编写源程序t1.asm
用脚本一键生成可执行文件t1.exe
成功运行
查看资源管理器,成功生成T1.obj与t1.exe文件‘
-
用
debug
跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容同样用脚本一键调试程序
用u
命令验证一下,指令是否写入程序
用t命令逐步执行
这里要注意的是当遇到int 21终止指令的时候,要使用p
命令而不是用t命令
这里第一次做因为没有使用t
命令,导致程序并没有正常退出
根据上面的运行结果,得出各个寄存器的值是
- PSP的头两个字节是CD20,用
Debug
加载t1.exe,查看PSP的内容
通过r
命令查看cs与ds的内容
刚好相差256字节,由此可以判断出psp的起始地址为0e14:0000,检查一下:
可以看到起始地址的前两个字节是CD 20,由此可以判断该处是PSP的起始地址,没错。
- 将
0FFFF0~0FFFFFH
中的8个字,逆序复制到00200H\~0020FH
中
运行下面的指令即可解决该题
assume cs:codesg
codesg segment
mov ax,20H
mov ds,ax
mov ax,0FFFFH
mov ss,ax
mov sp,0
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]
mov ax,4c00H
int 21H
codesg ends
end
执行程序之前:
执行程序后: