目录

实验任务

  1. 将下面的程序保存为t1.asm,将其生成可执行文件t1.exe

用Vscode编写源程序t1.asm

用脚本一键生成可执行文件t1.exe

成功运行

查看资源管理器,成功生成T1.obj与t1.exe文件‘

  1. debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容

    同样用脚本一键调试程序

u命令验证一下,指令是否写入程序

用t命令逐步执行

这里要注意的是当遇到int 21终止指令的时候,要使用p命令而不是用t命令

这里第一次做因为没有使用t命令,导致程序并没有正常退出

根据上面的运行结果,得出各个寄存器的值是

image-20241004223133810

  1. PSP的头两个字节是CD20,用Debug加载t1.exe,查看PSP的内容

通过r命令查看cs与ds的内容

刚好相差256字节,由此可以判断出psp的起始地址为0e14:0000,检查一下:

可以看到起始地址的前两个字节是CD 20,由此可以判断该处是PSP的起始地址,没错。

  1. 0FFFF0~0FFFFFH中的8个字,逆序复制到00200H\~0020FH

运行下面的指令即可解决该题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

执行程序之前:

执行程序后: