以下是一些采用 Intel 语法的汇编代码:
// Jump to done if rsi >= rax.
cmp rsi, rax
jae done
这对我的大脑来说是有道理的:如果 rsi “高于或等于” rax,你就会跳,
匹配中参数的顺序cmp
操作说明。将此与
GNU 语法:
// Jump to done if rsi >= rax.
cmp %rax, %rsi
jae done
每次这都让我很伤脑筋。当我来到这个新鲜的地方时,这并没有帮助
一段时间没有编写汇编代码后,我去查找以下语义cmp
and jae
查看Intel手册,发现都是用“第一”来表述的
和“第二个”操作数,它与我在屏幕上看到的不匹配
我的面前。
结束抱怨。我的问题:
还有其他表达方式吗cmp
or jae
到 GNU 汇编器所以
操作数的顺序cmp
匹配所引用的逻辑比较
经过jae
?
假设(1)的答案是否定的,有没有人有好办法让我
看看这个,以便我下次能记住它是如何工作的?有什么更好的吗
比“GNU 倒退”?
请注意,我是not询问如何在 GNU 汇编器中使用 Intel 语法;我知道这是可能的。我正在现有的 GNU 语法代码库中工作,并要求一些助记符或其他方式来帮助我在头脑中记住这一点。
在 GAS 中你可以使用.intel_syntax noprefix
以获得您更熟悉的语法,但您不能只是在 AT&T 语法中交换它们。
我想说请记住,在英特尔语法中mov x,y
意味着“使 x 等于 y”,而在 AT&T 语法中,它是“将 x 复制到 y”,一旦您掌握了该约定,请将其扩展到您遇到的其他指令。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)