关于AT&T语法汇编中的cmp / jg,jle等

问题描述 投票:2回答:2

所以每个在线资源都告诉我这样的事情:

cmp %eax, %ebx
jg < something >

如果eax大于ebx,将跳至。但是我还有另一段似乎与此矛盾的代码:

cmp $0x2, %eax
jg  < something>

当eax的值为3时,它跳转到

我是否缺少某些内容,或者如果b> a而不是a> b,则执行cmp a,b-jg吗?这是否也适用于其他跳转语句?

assembly x86 att
2个回答
5
投票

当我们阅读类似内容时>

cmp $0x2, %eax
jg  < something >

我们知道所使用的汇编程序是一种反转指令操作数位置的汇编程序。这是因为Intel的语法规定目标操作数位于源操作数之前,并且很明显像$ 0x2这样的立即值永远不能成为目标!

知道事情的顺序,我们现在将您的第一个代码片段解释为

cmp ebx, eax
jg < something >  ;jump if EBX > EAX

和第二个代码段为

cmp eax, 2
jg < something >  ;jump if EAX > 2

这也适用于其他跳转语句吗?

是。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.