自己动手构造编译系统:编译、汇编与链接2.4.3 指令生成-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

自己动手构造编译系统:编译、汇编与链接2.4.3 指令生成

简介:

2.4.3  指令生成

       


      2.2节介绍了x86指令的基本结构。同样,在汇编器语法分析时,需要根据指令的语法模块收集这些指令的结构信息。比如操作码、ModR/M字段、SIB字段、偏移量、立即数,然后按照指令的结构将上述信息写入文件即可。

  首先,指令名和操作码一般是一对多的关系,因此需要根据具体的操作数类型或长度来决定操作码的值。按照操作数不同建立一张指令的操作码表来执行操作码的查询是一种有效的解决方案。

  其次,有些指令的ModR/M字段的reg部分与操作码有关,但不需要输出ModR/M字段,汇编器需要单独处理这些特殊的指令操作码。另外,ModR/M字段中包含是否扩展了SIB字段的信息。

  除了正确输出指令的二进制信息外,汇编器在遇到对符号引用的指令时还要记录相关重定位信息,比如重定位地址、重定位符号、重定位类型等。

  最后,参考之前介绍的ELF文件结构,汇编器将收集到的段信息和二进制数据组装到目标文件内。

  至此,根据已描述的汇编器主要工作流程,可以生成标准的ELF可重定位目标文件。那么,如何把这些分散的目标文件合并成我们最终想要的可执行文件,便是接下来要介绍的链接器的工作内容。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接