汇编干货笔记->4.1 编译源程序
![](https://img.haomeiwen.com/i5741745/2fc7a55737b4ce7d.jpg)
![](https://img.haomeiwen.com/i5741745/b59e7d985c509c00.jpg)
![](https://img.haomeiwen.com/i5741745/c80bb8ad72a03177.jpg)
![](https://img.haomeiwen.com/i5741745/62b6b9da789887e8.jpg)
![](https://img.haomeiwen.com/i5741745/db115cd78fcb9eae.jpg)
![](https://img.haomeiwen.com/i5741745/5b0b2cbfd8cd1c91.jpg)
![](https://img.haomeiwen.com/i5741745/ae0d7a82bbce89fc.jpg)
![](https://img.haomeiwen.com/i5741745/e60c986fca53f0b9.jpg)
![](https://img.haomeiwen.com/i5741745/32e6afb0955c4035.jpg)
![](https://img.haomeiwen.com/i5741745/5f56cb15cb7e691b.jpg)
![](https://img.haomeiwen.com/i5741745/9c631d6ad383f9f4.jpg)
![](https://img.haomeiwen.com/i5741745/ab4903278a013f33.jpg)
![](https://img.haomeiwen.com/i5741745/7a7b4cbf108d20f4.jpg)
![](https://img.haomeiwen.com/i5741745/c9d6f5616c684c9d.jpg)
![](https://img.haomeiwen.com/i5741745/5595655852882b84.jpg)
![](https://img.haomeiwen.com/i5741745/7555d50b6841b1ec.jpg)
以下是文字提取,阅读完毕的同学可以离开了
你随意选择;IDE;
我使用的工具是;记事本;
直接在记事本下输入edit
保存后缀为;.asm;
源程序已经;完成;
下面的工作是如何;编译;
说到编译,自然会有对应的;编译器;
编译器与连接工具我已经准备好
请在;下面文字提取部分下载;
http://pan.baidu.com/s/1c6iB5G
首先把text1.asm与文件夹里所有内容放到同一文件夹;
我这里放到了:C:\Users\YuRuotong\Desktop\text
然后cmd
cd到text
输入:;masm text1.asm;
;完成编译;
此时会在text目录下生成一个.obj文件
然后需要将.obj连接
输入;link text1.obj;
紧接着;一路回车;
得到;text1.exe;
注意:这里生成的;程序是32bit;
64bit电脑;无法打开;
其实这里有一个;更为简便;的方法
就是;拖动;
你可以直接拖动text1.asm到;MASM.EXE;
生成.obj,然后拖动.obj到LINK.EXE
你甚至可以直接拖动到;ML.EXE;
;直接生成;exe文件
这里还提供一种追踪.exe的;运行过程;
打开;dosbox;,挂载;exe所在目录
然后把;debug32.exe;拷贝到text目录下
输入;debug32 text1.exe;
输入;-r;查看情况
CX存储的是;程序长度;
我们程序的;机器码;有13个字节
这里我想介绍下.exe是如何被;装入内存;的
首先要找到一块;偏移地址为零;的空闲内存区域
设它目前;段地址为:SA;
因此;起始地址为SA:0000;
然后这里很重要,敲黑板,;当当当;
在这段内存的;前256个字节;
创建一个名为;PSP;的数据区
DOS要利用PSP和.exe;进行通信;
从;256个字节开始;才是我们的程序
而且这里PSP与程序虽然;物理地址连续;
但是却被划分到;不同的段;
所以会有下面图片的;段地址;
最后将该内存的段地址;存入DS;中
;初始化;其他寄存器
设置CS:IP;指向;程序的入口
使用;u命令;可以列出所有指令
内存起始地址为:1C95:0000
PSP地址:1C95:0000
程序地址:1C95+10H:0000=1CA5:0000
也就对应了指令MOV AX,0123h
到了这里,我们就可以使用;T命令;逐步执行
遇到int21时候,记得要用;p命令;
最后还要啰嗦一下
下面1,2两处
1代表command
2代表debug
上面我们输入完p,程序要返回到debug
你可以输入q从debug返回到command
如果用图表说明
就是下面这种情况