【问题标题】:The difference between cmpl and cmpcmpl和cmp的区别
【发布时间】: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 &gt; 7会不会是-->跳转

我真的不想让它跳。但这是正确的解释吗?我是在颠倒争论吗?

如果你对如何操纵这个跳跃有任何建议!

【问题讨论】:

  • cmpl 中的 l 是指定 32 位内存参数。 ja 的 a 部分用于指定有符号/无符号。查看分支指令。
  • 提及(并标记)这指的是什么处理器架构可能是个好主意。
  • 只是 AT&T 语法的大小后缀
  • @phuclv:这个问题并不特定于 x86-64; 32 位反汇编还可以包含cmpl。我重新添加了x86 标签(连同 AT&T,这个问题 特定的。好吧,我猜 x86 的 goasm 语法也使用操作数大小的后缀......)

标签: assembly x86 x86-64 att instructions


【解决方案1】:

据我了解cmpl 比较无符号。

在某种程度上,两者兼而有之。

有符号与无符号的区别在于跳转指令的使用。

对于&gt;ja 表示无符号,jg 表示有符号(如果高于则跳转,如果更大则跳转)。

对于&lt;jb 表示无符号,jl 表示有符号(低于则跳转,低于则跳转)。

准确来说,这里是几个跳转命令的意思:

对于无符号比较:

JB/JNAE (CF = 1)           : Jump if below/not above or equal
JAE/JNB (CF = 0)           : Jump if above or equal/not below
JBE/JNA (CF = 1 or ZF = 1) : Jump if below or equal/not above
JA/JNBE (CF = 0 and ZF = 0): Jump if above/not below or equal

对于带符号的比较:

JL/JNGE (SF <> OF)          : Jump if less/not greater or equal
JGE/JNL (SF = OF)           : Jump if greater or equal/not less
JLE/JNG (ZF = 1 or SF <> OF): Jump if less or equal/not greater
JG/JNLE (ZF = 0 and SF = OF): Jump if greater/not less or equal

【讨论】:

  • 以上/以下是未签名的
  • @MicroVirus Thx,添加了一些细节
  • 简而言之:G(reater) 和 L(ess) 用于有符号比较,而 A(bove) 和 B(elow) 用于无符号比较。
【解决方案2】:

只是为了澄清@glglgl 的出色答案而添加一个额外的细节是,“cmpl”中的“l”是一个operation suffix,表示该操作正在对一个长数(32 位整数或 64 位浮点数)。

【讨论】:

    【解决方案3】:

    我认为 x86 实际上没有名为 CMPL 的指令。它可能是汇编语法的一部分,用于提示操作数或其他内容(例如 JZJE 相同)。

    来自英特尔的手册:

    比较第一个源操作数和第二个源操作数并设置 EFLAGS 寄存器中的状态标志根据结果。比较是 通过从第一个操作数中减去第二个操作数然后设置 状态标志的方式与 SUB 指令相同。当一个即时 value 被用作操作数,它被符号扩展为第一个操作数的长度。

    由于数字的二进制补码表示,符号是隐式给出的。

    如何操纵跳跃?如果您确定跳转应该与它正在做的完全相反,您只需将JA 更改为JBE

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2017-01-26
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多