在完成实验之前复习一下重点的知识
-
我们将编写的文件一步步编译成为可执行程序
-
运行可执行程序p1是由一个运行中的程序p2将p1从
可执行文件中加载进入内存,将CPU的控制权交给它
才能运行
-
当p1运行结束后应该将CPU的控制权交给p2
实验3 编程、编译、链接、跟踪
有的同学可能DosBox配置的不好,可以参考我上一篇文章
将下面的程序保存为t1.asm文件,生成可执行文件t1.exe
assume cs:codesg
codesg segment
mov ax,2000h
mov ss,ax
mov sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00h
int 21h
codesg ends
end
其实保存为.txt也是可以的,只要是文本文件就行
我这边保存为.txt文件的形式,只要在编译的时候是编译纯文本文件就行
生成可执行文件
masm 后面跟的是纯文本文件就行,不论你是.txt 还是.asm都是可以的,注意如果加上’;'就代表
我们默认中间件的生成,直接编译完成
其实直接link t1;就可以直接进行链接,但是我忘记加;了,不过无所谓的
这时候已经成功链接,生成了可执行文件
Debug追踪执行过程
使用debug t1.exe
进入debug
用u命令查看一下是不是我们写的程序
:)是哎
下面就是一直按t
执行程序,我就不再一一截图了:(
assume cs:codesg
codesg segment
mov ax,2000H # ax = 2000H
mov ss,ax # ss = 2000H
mov sp,0 # sp = 0
add sp,10 # sp = 10
pop ax # ax = 01A3H
pop bx # bx = 0
push ax
push bx
pop ax # ax = 0
pop bx # bx = 01A3H
mov ax,4c00H
int 21H
codesg ends
end
查看PSP的内容
用r
命令进行查看寄存器内容
ds=075a
我们用d
命令查看一下075a的内存
可以发现CD 20确实是两个头字节,并且t1.exe就在这个位置