【发布时间】:2023-04-09 03:05:01
【问题描述】:
不久前我在 fasm 中学习了一些 x86 汇编。我知道名为 ADD 的指令。例如:
ADD eax,edx ; Precisely ADD destination,source .
The output gets stored in eax.
但今天我读了 Carl Hamacher 的一本关于计算机组织的书,它说:
Add LOCA,R0
"This instruction adds the operand at memory location LOCA to the operand in a register in the processor, R0, and places the sum into register R0."
ADD R1,R0
This instruction adds the contents of register R1 and R0 and places the sum in R0.
这是什么意思?它违背了我以前学过的任何东西。结果存储在左侧位置。这本书是对的,还是我错了? (第 1.3 页)。
【问题讨论】:
-
并非所有的汇编语言都是一样的。在某些情况下,源在左侧,目的地在右侧。英特尔语法恰好是目标后跟源。您正在阅读的内容是针对英特尔以外的其他内容(例如,英特尔 x86 没有 r0 和 r1)
-
那么,您是否建议在某些平台上可以实现 ADD source,destination?谢谢顺便说一句。
-
添加源、目标和添加目标、源是一回事。由汇编器来创建与指令相关的底层机器代码。 x86 架构有许多汇编程序。大多数使用 Intel 样式,其中目标后跟源(如 NASM、MASM),但 GNU 汇编器(默认情况下)使用 AT&T 语法,源是第一,目标第二。由汇编器将其语法转换为机器代码。由汇编器的开发者来指定语法。
-
谢谢伙计,我今年 19 岁,对内核和低级的东西充满热情。你的帮助让我的一天变得更好。 +999k 响应
-
每个 CPU 都有自己的指令集,因此 Intel 的
add和 ARM 的add很可能有些不同(我忽略了明显的区别,比如通用寄存器的不同名称和不同的二进制编码),就像他们可能设置不同的/-ly标志(或者也有根本不使用标志的CPU)等等。但即使在同一个平台上,比如x86,也有不同语法的汇编程序,这将产生完全相同的机器指令,例如 MASM/NASM/FASM/.. 中的add eax,edx与 GAS 中的addl %edx,%eax,但它们的语法即使在参数顺序上也有所不同......
标签: assembly x86 cpu-architecture fasm