以下是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手册,发现这一切都在"第一","第二"操作,来表述其与我面前在屏幕上看到的不符.
结束抱怨.我的问题:
有没有其他方式表达cmp或jaeGNU汇编程序,以便操作数的顺序cmp与逻辑比较匹配jae?
假设(1)的答案是否定的,是否有人有一个很好的方式让我看看这个,以便我能记住下次它是如何工作的?还有比"GNU倒退"更好的东西吗?
请注意,我不是要问如何在GNU汇编程序中使用Intel语法; 我知道这是可能的.我正在使用现有的GNU语法代码库,并且正在寻求一些助记符或其他方式来帮助我保持这一点.
在x86或amd64上使用汇编指令时,程序员可以使用"Intel"(即nasm编译器)或"AT&T"(即gas编译器)汇编语法."Intel"语法在Windows上更受欢迎,但"AT&T"在UNIX(类似)系统上更受欢迎.
但是英特尔和AMD手册,以及芯片创建者创建的手册都使用"英特尔"语法.
我想知道,"AT&T"语法设计背后的原始想法是什么?浮动处理器创建者使用的符号有什么好处?
x86-64汇编中操作数的顺序是什么?:指令目标,源或:指令源,目标
我有三本书和两种不同的方法!
为什么即使对于相同的操作系统和指令集,汇编语言的语法也不同?例如NASM有不同的语法比MASM的窗口.为什么没有任何标准的语法?