IA32大会澄清

时间:2013-10-21 13:33:14

标签: assembly x86 att

我正在进行一项需要调试AT& T程序集的作业。我在使用以下两行时遇到了麻烦,只是想要一点澄清。

add    -0x8(%esi,%ebx,4),%eax
cmp    %eax,-0x4(%esi,%ebx,4)

我知道%esi包含用户输入的值,而%eax%ebx都等于2.

对于第一行,我将其解释为“-8 + %esi + (%ebx*4) + %eax”。由于我知道%ebx为2,因此评估为%esi + %eax。基本上,添加行只是将输入值加2。

我知道的第二行是将%eax-0x4(%esi,%ebx,4)进行比较。此时%eax等于%esi + 2,并且遵循先前的逻辑,右侧值等于-4 + %esi + (%ebx*4),因为%esi + 4仍然等于2,所以%ebx将评估为%esi + 2

如果我是正确的,那意味着第二行是%esi + 4与{{1}}的比较,对于任何输入值都不能为真。然而,根据任务,它必须是真实的。我的翻译在哪里出错?

1 个答案:

答案 0 :(得分:1)

那些是内存操作数。

add    -0x8(%esi,%ebx,4),%eax

将地址esi + ebx*4 - 8中存储的值添加到eax

cmp    %eax,-0x4(%esi,%ebx,4)

将地址esi + ebx*4 - 4中存储的值与eax进行比较。