gpt4 book ai didi

assembly - 不同体系结构的汇编语言语法是否相同

转载 作者:行者123 更新时间:2023-12-01 21:46:04 26 4
gpt4 key购买 nike

我知道我无法编写将在所有机器上运行/编译的汇编语言,因为它们有不同的指令集、操作码、寄存器等。我的问题是,即使指令集不同,汇编语法 (或它自己的语言)对于任何架构都一样吗?

最佳答案

My question is, even though the instruction set would be different, is the assembly syntax (or the language it self) the same for any architecture?

不!

就 x86 而言,有十几种不同的汇编器,每一种都有自己的独特性,使它们各自接受一种略有不同的语言——有 GAS, MASM, NASM, TASM, FASM, ASM ...很少有程序会使用所有这些 x86 汇编程序进行汇编。

有 at&t 语法与 intel 的区别——目标优先与目标最后。

指令有多种要求:.proc、.endp 等。

Intel 有漂亮的 byte ptr 语法来确定操作大小/宽度,与世界上大多数其他地方的 .b.w, .l 操作码后缀(有时没有 .)。

一些汇编器喜欢 : 在标签之后,其他的则不允许(或者需要一个 , 代替)。

有些需要特殊字符来将寄存器名称与其他标识符区分开来(例如,某些标识符使用 % 前缀,其他标识符使用 $ 前缀),而其他标识符则不需要。

寻址模式的语法也有很大差异,例如在 ARM 的 [] 表示法中,括号后常量的异常位置表示指针变量更新。

这还没有涉及操作码的名称。

在 intel 上,我们使用 call 作为调用函数的指令(将 pc 传递给函数,同时捕获返回地址),jal 在 MIPS 和 RISC V 上, bsrjsr,或者bljms等等。

调用系统调用的术语,包括syscallecalltrapsc int, swi, svc 等..

简而言之,没有跨汇编程序的语言、语法或句法标准化。


至于相似之处,从广义上讲,有 if-goto 条件分支(和无条件分支)的概念作为控制流构造的机制,标签的概念作为分支目标和数据目标,每行一条指令(正如@Peter 提到的那样),具有独立操作数的助记操作码——但这些相似之处是概念上的而不是句法上的。

关于assembly - 不同体系结构的汇编语言语法是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60530135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com