什么是处理或记住GNU汇编程序中cmp的后向参数的好方法?

jac*_*bsa 7 x86 assembly gnu gnu-assembler

以下是Intel语法中的一些汇编代码:

// Jump to done if rsi >= rax.
cmp rsi, rax
jae done
Run Code Online (Sandbox Code Playgroud)

这对我的大脑有意义:如果rsi"高于或等于"rax,则跳转,匹配指令中参数的顺序cmp.将其与GNU语法进行比较:

// Jump to done if rsi >= rax.
cmp %rax, %rsi
jae done
Run Code Online (Sandbox Code Playgroud)

这每次伤害我的大脑.它没有帮助,当我来到这个新的后一段时间不写汇编代码我去看看的语义cmp ,并jae在Intel手册,发现这一切都在"第一","第二"操作,来表述其与我面前在屏幕上看到的不符.

结束抱怨.我的问题:

  1. 有没有其他方式表达cmpjaeGNU汇编程序,以便操作数的顺序cmp与逻辑比较匹配jae

  2. 假设(1)的答案是否定的,是否有人有一个很好的方式让我看看这个,以便我能记住下次它是如何工作的?还有比"GNU倒退"更好的东西吗?

请注意,我不是要问如何在GNU汇编程序中使用Intel语法; 我知道这是可能的.我正在使用现有的GNU语法代码库,并且正在寻求一些助记符或其他方式来帮助我保持这一点.

fai*_*loo 1

在 GAS 中,您可以使用.intel_syntax noprefix您更熟悉的语法,但不能在 AT&T 语法中交换它们。

我想说的是,请记住,在 Intel 语法中,mov x,y意思是“使 x 等于 y”,而在 AT&T 语法中,意思是“将 x 复制到 y”,一旦你掌握了该约定,就可以将其扩展到你遇到的其他指令。