[Hb-III] 汇编程序的编译 连接 加载 执行

《汇编语言·第三版》--王爽


1 准备工作

(1) 调试工具Debug

Win 7 64位系统需要额外准备debug。下载DOSBOX和debug.exe。


安装DOSBOX后打开DOSBOX,将debug.exe拷贝到F盘(某盘根目录),在DOSBOX中输入“mountc f:\”命令(此命令输入后有“Drive C is mounted aslocal directory f:\”,再输入“c:”回车。


(2) 汇编编译器

使用微软的masm5.0来编译编写的汇编程序。下载masm5。将masm5.zip解压拷贝到debug.exe所在的目录下。


(3) 连接器

(2)中masm5目录下含连接器,可直接用其下的link。


2 源程序

在masm5下新建src\first文件夹,在first内用Notepad++编写一个汇编程序如下:

Figure1. 第一个汇编程序

汇编源程序中包含两种指令,一种是汇编指令,一种是伪指令。汇编指令是有对应的机器码的指令,可以被编译器机器指令,最终为CPU所执行。伪指令没有相应的机器指令,又编译器来执行。


3 编译

对汇编源程序进行编译,生成包含机器代码的目标文件。


进入masm5目录,运行masm,为masm输入汇编文件的路径及汇编文件名,指定汇编文件经编译后所生成的目标文件名,忽略列表文件和交叉引用文件的生成(直接回车):

Figure2. 编译汇编源文件

经过这些步骤后,在src\first目录下会自动生成first.obj目标文件。


4 连接

在对源程序进行编译得到目标文件后,再对目标文件进行连接,从而得到可执行文件。


进入masm5目录,运行link,根据提示输入目标文件及可执行文件的名称:

Figure3. 连接

经过此过程后,src\first\目录下会自动生成first.exe可执行文件。


5 执行

(1) 执行操作

直接输入可执行文件的名字,可执行文件即可得到执行:

Figure4. 执行可执行程序
这个汇编程序经执行后似乎没有任何的反应(如在黑屏幕上输出一个字符串什么的),是因为程序还没有被赋予这样的功能。

(2) 执行过程分析

  • 在DOS中直接执行first.exe时,正在运行的command(shell)程序将first.exe中的程序加载到内存;程序所在内存区的地址为ds:0,这个区域的前256字节中存放的是PSP,DOS用PSP来和程序进行通信;从256字节处向后的空间存放的是程序。
  • CS:IP等寄存器的值备份,command设置CPU的CS:IP指向程序的第一条指令(程序入口),使程序得以运行;
  • 程序运行完毕后,CS:IP等寄存器的值复原,返回到command中。

6 用调试工具跟踪程序运行

用command加载程序运行时,command会放弃CPU的控制权,CPU立即开始执行程序,直至程序运行结束。


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


(1) 单步执行

Figure5. 程序被加载到内存的地址
此时CS:IP指向程序的第一条指令,(DS + 10H):0(076A:0)也是程序的物理地址。CX存放的是程序的长度。076A:0000 ~ 076A:000A存放了程序的机器码。



Figure6. 单步执行汇编程序
程序执行完毕时返回到Debug中。再输入Q则返回到command中。在DOS中用debug masm5\src\first\first.exe时,程序加载的顺序是:command加载Debug,debug加载first.exe。返回的顺序是:从first.exe返回到Debug,从debug返回到command。


(2) 查看PSP内容


Figure7. PSP内容

ds:0 ~ ds:FFH存放的是PSP的内容。


[2014.11.21 - 22:54]
R《Hb》Note Over.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值