编程, 编译, 连接, 追踪

(1)

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

image.png
image.png
image.png

(2)

用DEBUG单步追踪T1.EXE

前三行:
image.png
指定一个栈顶 2000:000A
image.png
image.png
这里pop完为什么内存变了捏? 我不理解遗留问题
接下来因为那两块内存都是0, 执行的其实是ax和bx互换了一下,但都是0
image.png
最后P指令 把CPU控制权交给DEBUG

(3)

PSP的头两个字节是CD 20, 用debug加载t1,exe并查看PSP的内容

image.pngimage.png
可以看到 打开t1.exe 文件后 ds+10H = cs
因为PSP在代码段的前100H, 那么DS指向的应该是PSP的段地址, CS指向代码的段地址
image.png可以看到这段内容确实是以CD 20开头的, 看来想的没错
100H = 256Bytes 这样的16行