汇编语言9---编译链接以及可执行文件

为什么需要分两步走,编译再链接(masm.exe / link.exe)

编译 masm asm --> obj
链接 link obj --> exe
假设有100w行代码,编译需要花费一段时间(比方说5min)。如果代码有错误,修改过后要重新进行这个5min的过程,如果错误不能一次性解决,就会花费很多个这样的5min。
可行的方法是:
把100w行代码拆分开来,再分别编译为.obj:
t1.asm — t1.obj
t2.asm — t2.obj

t1000.asm —t1000.obj
如果其中有个文件tx.asm出错了,我们只需要单独去修改tx的错误并重新编译tx,再对其进行链接就可以了。

可执行文件exe

系统可以运行exe文件,且需要为exe分配一段内存,系统是怎么知道要分配多大的内存给这个程序的?
因为exe文件中除了我们整个程序的代码,还包括了一些信息(描述信息):文件大小,程序入口。系统会根据这些描述信息对寄存器进行相关配置。

start伪指令
告诉编译器如何编译,在exe文件的描述信息中扮演者:
将我们设置的程序的入口地址 记录在exe文件的描述信息中
然后系统通过这个描述文件中的内容去设置cs:ip,当然还有其他内容,栈段和数据。

观测link后生成的.map文件,会发现里面已经描述了DATA,STACK,CODE三段的起始地址,终止地址以及长度。还指明了程序的入口地址:
汇编语言9---编译链接以及可执行文件

上一篇:Windows7设置Redis开机自启动


下一篇:【直播预告】阿里云服务网格 ASM 产品易用性改善实践与思考