自己动手构造编译系统:编译、汇编与链接2.4.1 汇编词法、语法分析

简介:

2.4.1  汇编词法、语法分析

  


     汇编语言有独立的词法记号,对于汇编词法的分析,只需要构造相应的词法有限自动机就可以了。举一个简单的例子:

mov eax,[ebp-8]

  该指令有8个词法记号,它们分别是:'mov''eax'逗号'[''ebp''–''8'和']'。汇编器的词法分析器将词法记号送到语法分析器用于识别汇编语言的语法模块。同样,我们需要构造汇编语言语法分析器,在这里可以提前看一下上述汇编指令的抽象语法树,如图2-13所示。

 

图2-13  汇编指令抽象语法子树

  图2-13中是简化后的抽象语法树,与编译器类似,语法分析器会在非叶子节点处识别语法模块,以产生语义动作。由于汇编器要输出可重定位目标文件,因此在语法分析时要收集目标文件的相关信息。比如记录代码段和数据段的长度、目标文件符号表的内容、重定位表的内容等,这些操作都在语法分析器识别每个语法模块时使用语法制导的方式完成。

  另外,汇编器和编译器最大的不同是汇编器需要对源文件进行两遍扫描,其根本原因是汇编语言允许符号的后置定义,例如汇编语言常见的跳转指令:

     jmp L

L:

  很明显,在第一遍分析jmp指令的时候,汇编器并不知道符号L是否已经定义。因此,汇编器需要通过第一遍扫描获取符号的信息,在第二遍扫描时使用符号的信息。

相关文章
|
6月前
|
存储 自然语言处理 编译器
编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)
编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)
|
6月前
|
存储 缓存 Linux
C语言编译过程——预处理、编译汇编和链接详解
C语言编译过程——预处理、编译汇编和链接详解
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
6月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
210 2
|
27天前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
27天前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
118 0
|
6月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
585 0
几组汇编指令的比较
几组汇编指令的比较
|
4月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
4月前
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍