汇编语言:王爽实验3 编程、编译、连接、跟踪de

目录

(1)输入汇编代码,编译连接成可执行文件

(2)用Debug进行程序跟踪

(3)查看psp的内容


由于我们现在的系统大多数都是64位系统,一般不支持8086汇编的编写运行,所以我们可以下载DOSBox模拟cmd进行实验。这个是之前写的安装DOSBox和Debug.exe的博客,可以进行参考:https://blog.csdn.net/weixin_42072280/article/details/85275073

实验1和2只用到debug,可是实验3要用到masm和link,这可如何是好呢?查看了之前安装debug的教程,在之前的环境配置中,使用mount d d:\masm命令后,本地电脑的d:\masm目录虚拟成d;这时候在DOSBOX里面输入d:其实是打开电脑里面的D:\masm   所以想到,可以把masm.exe和link.exe也放到自己电脑的d:\masm目录下,然后在DOSBox中输入masm就可以运行masm.exe软件,输入link就可以运行link.exe程序,哈哈,猜对了,可以这样子做,成功了!

(1)输入汇编代码,编译连接成可执行文件

1.编辑文件

这里的masm和link都是从自己的masm5.0文件夹里粘贴过来的

编辑t1.asm文件(实验中用edit.exe编辑,自己没有这个软件,所以用记事本编辑的,要是需要的话以后再进行安装),注意和软件放在相同的文件夹中。

2.将文件进行编译连接

(2)用Debug进行程序跟踪

如何用Debug对程序的执行过程进行跟踪?

我们知道,在DOS中运行一个程序的时候,是由command将程序从可执行文件中加载入内存,并使其得以执行。但是,我们不能逐条指令地看到程序的执行过程,因为command的程序加载,设置CS:IP指向程序的入口的操作是连续完成的,而当CS:IP一指向程序的入口,command就放弃了CPU的控制权,CPU立即开始运行程序,直至程序结束。

为了观察程序的运行过程,可以使用Debug。Debug将程序加载入内存,设置CS:IP指向程序的入口,但Debug并不放弃对CPU的控制。这样,我们就可以使用Debug的相关命令来单步执行程序,查看每一条指令的执行结果。

1)ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为0,则程序所在的内存区的地址为ds:0

2)这个内存区的前256个字节中存放的是PSP(程序段前缀),DOS用来和程序进行通信。从256字节处向后的空间存放的是程序。

cx中存放的是程序的长度

ds的值为075A,则psp的地址为075A:0,程序的地址为076A:0(075A+10:0)

cs=076A,ip=0000,CS:IP指向程序的第一条指令。

注意:源程序中的指令时mov ax,2000H,在Debug中记为mov ax,2000,这是因为Debug默认所有数据都用十六进制表示。

最后一步int 21要用p命令执行,不能用t命令,记住就好了。

用Q命令退出Debug,将返回到command中,因为Debug是由command加载运行的。

此处没有看栈顶的数据,自己手动操作了一遍,很easy的

(3)查看psp的内容

猜你喜欢

转载自blog.csdn.net/weixin_42072280/article/details/89813933
今日推荐