ele*_*tai 2 syntax assembly language-design
我知道我无法编写在所有机器上运行/编译的汇编语言,因为它们有不同的指令集、操作码、寄存器等。我的问题是,即使指令集不同,汇编语法(或语言)它本身)对于任何架构都一样吗?
大多数汇编程序之间存在广泛的相似之处。它总是面向行的,就像
[label:] mnemonic [operand list]
Run Code Online (Sandbox Code Playgroud)
尽管一些汇编程序使用空格而不是逗号来分隔操作数。
一些历史汇编器根据起始列而不是通过:标签名称后来区分标签和助记符。(因此它们强制执行良好的样式:标签位于最左侧,助记符缩进)标签定义符号名称以引用输出中的该位置。(在许多汇编器中,一行中的非助记符本身也被视为标签,即使没有:)
有些语法将目标操作数放在最后,许多其他语法将其放在前面,但就将行解析为标记的基本语法而言,这是语义问题而不是语法问题。
存在一些语法显着不同的汇编器,例如x86 HLA,其中指令看起来像 C 函数调用。
大多数汇编器内置的宏处理器在汇编器之间存在显着差异。指令名称如.longvs. ddvs. dword。
经典的 MIPS 汇编器有一个.align指令,它会带来以前的标签,而不是仅仅在当前位置发出填充。(如果没有.set noreorder,汇编器实际上会优化您的代码以填充分支延迟槽。)同样,这不是语法,而是含义上的巨大语义差异.align。
除此之外,asm 的每一行在某个部分中汇编成 0 或更多字节的输出,与周围的行无关,这是非常普遍的。