与结束相关的概念
连接的作用
- 当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件:
- 程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
- 一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这些内容处理为最终的可执行信息。所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。
实验3:编程、编译、连接、跟踪
- 将下面程序保存为 t1.asm 文件,将其生成可执行文件 t1.exe。 ```shell 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
```
编译、连接
- 用 Debug 跟踪 t1.exe 的执行过程
debug t1.exe
,写出每一步执行后,相关寄存器中的内容和栈顶内容。 | 执行指令 | AX | BX | SS | SP | 单元数据 | | —- | —- | —- | —- | —- | —- | | mov ax,2000H | 2000 | 0000 | 076B | 0000 | | | mov ss,ax | 2000 | 0000 | 2000 | 0000 | | | mov sp,0 | | | | | | | add sp,10 | 2000 | 0000 | 2000 | 000A | | | pop ax | 0000 | 0000 | 2000 | 000C | | | pop bx | 0000 | 0000 | 2000 | 000E | | | push ax | 0000 | 0000 | 2000 | 000C | 2000:000C;2000:000D=AX高低位 | | push bx | 0000 | 0000 | 2000 | 000A | 2000:000A;2000:000B=BX高低位 | | pop ax | 0000 | 0000 | 2000 | 000C | | | pop bx | 0000 | 0000 | 2000 | 000E | | | mov ax,4c00H | 4c00 | 0000 | 2000 | 000E | | | int 21H (p命令执行) | | | | | |
- PSP 的头两个字节是 CD 20,用 Debug 加载 t1.exe,查看 PSP 内容。
PSP从DS开始占用256个字节,下面PSP的地址为 DS:0;程序的地址为 CS:0