汇编编译器的工作和生成可执行文件的执行过程是怎样的?该如何处理
汇编编译器的工作和生成可执行文件的执行过程是怎样的?
请大神详细解答一下,编译的时候做了什么具体工作?比如,对伪指令的解释的结果是啥?生成的.com或者.exe文件在进入内存开始执行的时候,是连在一块的还是根据文件的结构分配不同的段来加载数据和代码?CPU识别不了数据和代码的二进制信息吧?
------解决方案--------------------
这个和编译器没有关系,是链接器(Linker)干的。链接器负责把各个模块的可执行代码装配在一起成为一个可执行文件,并且添加一些额外的描述信息。可执行文件的格式由操作系统决定,Windows使用PE(可移植的可执行文件)格式。
------解决方案--------------------
对伪指令的解释什么的,还是有编译程序来做的吧;编译器就是将源程序转换为中间的目标 obj 文件,具体做了些什么、怎么做的,《编译原理》课程就是讲这个的吧。
.com或.exe进入内存执行,dos 类的是连在一起的吧,exe 稍有特殊;Win32 类的 exe 是分节映射在内存的,并没有完全载入,只是在需要的时候才会载入相应的页。
cpu能识别的就只是代码的二进制形式吧,即所谓的机器码。
------解决方案--------------------
汇编器,先生成目标代码,其中有一些数据,代码,还有一些表(重定位表等)
然后调用链接器,链接成可执行文件。
早期的汇编器,只负责生成目标代码,链接器是一个独立的程序。
需要手工分别作汇编,和链接
现在的汇编器,可以合并这两步,直接调用链接器,是直接生成可执行文件。
伪指令是汇编命令,是用来操作汇编器的命令。
不是指令,不生成对应的代码。
CPU只能识别二进制代码,数据通过加载器的加载,或者烧写器的烧写,初始化,有些代码,会在加载时重新定位。
代码也可能是烧写的,比如BIOS代码。
对于PC:
操作系统的启动代码,是由BIOS中的专门代码;
从磁盘的固定位置,加载在内存的固定位置的。
操作系统的其他部分,是由操作系统的启动代码加载的。
请大神详细解答一下,编译的时候做了什么具体工作?比如,对伪指令的解释的结果是啥?生成的.com或者.exe文件在进入内存开始执行的时候,是连在一块的还是根据文件的结构分配不同的段来加载数据和代码?CPU识别不了数据和代码的二进制信息吧?
------解决方案--------------------
这个和编译器没有关系,是链接器(Linker)干的。链接器负责把各个模块的可执行代码装配在一起成为一个可执行文件,并且添加一些额外的描述信息。可执行文件的格式由操作系统决定,Windows使用PE(可移植的可执行文件)格式。
------解决方案--------------------
对伪指令的解释什么的,还是有编译程序来做的吧;编译器就是将源程序转换为中间的目标 obj 文件,具体做了些什么、怎么做的,《编译原理》课程就是讲这个的吧。
.com或.exe进入内存执行,dos 类的是连在一起的吧,exe 稍有特殊;Win32 类的 exe 是分节映射在内存的,并没有完全载入,只是在需要的时候才会载入相应的页。
cpu能识别的就只是代码的二进制形式吧,即所谓的机器码。
------解决方案--------------------
汇编器,先生成目标代码,其中有一些数据,代码,还有一些表(重定位表等)
然后调用链接器,链接成可执行文件。
早期的汇编器,只负责生成目标代码,链接器是一个独立的程序。
需要手工分别作汇编,和链接
现在的汇编器,可以合并这两步,直接调用链接器,是直接生成可执行文件。
伪指令是汇编命令,是用来操作汇编器的命令。
不是指令,不生成对应的代码。
CPU只能识别二进制代码,数据通过加载器的加载,或者烧写器的烧写,初始化,有些代码,会在加载时重新定位。
代码也可能是烧写的,比如BIOS代码。
对于PC:
操作系统的启动代码,是由BIOS中的专门代码;
从磁盘的固定位置,加载在内存的固定位置的。
操作系统的其他部分,是由操作系统的启动代码加载的。