【发布时间】:2014-11-30 13:00:00
【问题描述】:
汇编程序将汇编代码作为输入并生成机器代码作为输出。那么是不是说汇编器也要对代码做词法分析和语法分析呢?
例如,它需要某种方式来区分作为指令的 MOV 和作为标签的 MOVXYZ。
以下面这段兼容 8086 的代码为例。
MOV MOVXYZ,013h
MOV BX,023h
ADD BX,MOVXYZ
如果确实需要另一轮词法分析和语法分析,那为什么还要将汇编作为编译的中间步骤?
编辑:
汇编器获取汇编代码作为输入
MOV AX,MOVXYZ
ADD AX,BX
它本质上是一个带有字符的文件。我的问题是,如果不是词法分析,它如何区分“MOV”和“MOVS”?
【问题讨论】:
-
一些汇编程序保留所有操作码,防止将它们用作标签。指令通常有一个前缀 (
.)。这使得解析比普通编程语言更容易。 -
@EOF
Some assemblers reserve all opcodes操作码?你是说助记词吗?操作码是定义操作的二进制指令的一部分。助记符或操作码助记符是指令的符号名称(一串字符)。 -
@nrz:是的,很抱歉我的术语有点草率。
-
独立的后端汇编器更像是 unix 的传统,而不是标准的东西。大多数普通的 Windows 编译器默认不使用文本后端。
标签: optimization assembly compiler-construction