【发布时间】:2014-07-29 21:24:34
【问题描述】:
我正在尝试理解汇编以解决难题。但是我遇到了以下说明:
0x0000000000401136 <+44>: cmpl $0x7,0x14(%rsp)
0x000000000040113b <+49>: ja 0x401230 <phase_3+294>
我认为它正在做的是:
0x14(%rsp) 的值为 -7380。据我了解cmpl 比较无符号。也会执行跳转。
那么(unsigned)-7380 > 7会不会是-->跳转
我真的不想让它跳。但这是正确的解释吗?我是在颠倒争论吗?
如果你对如何操纵这个跳跃有任何建议!
【问题讨论】:
-
cmpl 中的 l 是指定 32 位内存参数。 ja 的 a 部分用于指定有符号/无符号。查看分支指令。
-
提及(并标记)这指的是什么处理器架构可能是个好主意。
-
只是 AT&T 语法的大小后缀
-
@phuclv:这个问题并不特定于 x86-64; 32 位反汇编还可以包含
cmpl。我重新添加了x86标签(连同 AT&T,这个问题 是 特定的。好吧,我猜 x86 的 goasm 语法也使用操作数大小的后缀......)
标签: assembly x86 x86-64 att instructions