Dar*_*hah 2 compiler-construction optimization assembly
汇编器将汇编代码作为输入并生成机器代码作为输出。那么是否意味着汇编程序还必须对代码进行词法分析和语法分析呢?
例如,需要某种方式来区分作为指令的 MOV 和作为标签的 MOVXYZ。
以下面这段与8086兼容的代码为例。
MOV MOVXYZ,013h
MOV BX,023h
ADD BX,MOVXYZ
Run Code Online (Sandbox Code Playgroud)
如果它确实需要另一轮词法分析和语法分析,那么为什么要把汇编作为编译的中间步骤呢?
编辑:
汇编器获取汇编代码作为输入
MOV AX,MOVXYZ
ADD AX,BX
Run Code Online (Sandbox Code Playgroud)
它本质上是一个带有字符的文件。我的问题是,如果不是词法分析,它如何区分“MOV”和“MOVS”?
汇编器将汇编代码作为输入并生成机器代码作为输出。那么是否意味着汇编程序还必须对代码进行词法分析和语法分析呢?
是的。汇编语言可以被认为是一种编程语言,就像任何其他语言一样,尽管它是一种非常低级的语言。
例如,需要某种方式来区分作为指令的 MOV 和作为标签的 MOVXYZ。
的确
如果它确实需要另一轮词法分析和语法分析,那么为什么要把汇编作为编译的中间步骤呢?
就像你说的,它确实需要分析,事实上,大多数编译器不使用汇编程序作为中间步骤,而是直接将二进制代码生成某种对象格式,然后将其馈送到链接器阶段。
作为一个单独的问题:如果生成三地址代码作为中间形式,那么它的优化(由编译器从三地址代码到优化的三地址代码完成)也需要词法分析。
正确,如果 3 地址代码实际上是作为文本发出的,但实际上它通常以二进制形式发出到内部表中,因此实际上已经被解析/分析。
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |