比较堆栈中的两个值?

时间:2016-11-05 16:38:23

标签: assembly x86 cpu-registers cmp

我卡住了 在我的汇编代码中,我想比较两个值 叠加。

x86,语法AT& T

cmpl -4(%ebp), 4(%ebp)
  

错误:“cmp”

的内存引用太多

我认为不可能根据乘数和ebp比较两个值。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用CMPSD指令比较内存中的两个值。

Op想要做的事情相当于:

  cmpl -4(%ebp), 4(%ebp)

他可以通过分别在ESI和EDI中放置感兴趣的内存位置的地址,然后使用CMPSD memory-to-memory string-compare instruction

来做到这一点
  lea   -4(%ebp), %esi
  lea    4(%ebp), %edi
  cmpsd

(原谅我的非专家滥用AT& T语法)。

这与任何人在实践中都会这样做有所不同。这里提供的其他答案(将值加载到寄存器中并进行比较)更加实用。如果不出意外,那些解决方案只会烧掉一个寄存器,而这个黑客会烧掉两个。

课程:在汇编程序中,几乎总有不止一种方法可以给猫皮肤。