0

我正在处理需要调试 AT&T 程序集的任务。我在以下两行中遇到问题,只是想要求澄清一下。

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

我知道保存用户输入的值,并且%esi两者都等于 2。%eax%ebx

对于第一行,我将其解释为“ -8 + %esi + (%ebx*4) + %eax”。由于我知道%ebx是 2,因此计算结果为 %esi + %eax。所以本质上,添加行只是将 2 添加到输入值。

我知道的第二行是%eax-0x4(%esi,%ebx,4). 此时%eaxequals %esi + 2,并且按照前面的逻辑,右侧的值 equals-4 + %esi + (%ebx*4)将评估为,%esi + 4因为%ebx仍然等于 2。

如果我是正确的,那意味着第二行是比较%esi + 2%esi + 4,对于任何输入值都不会是真的。但是,根据任务,它必须是真实的。我的翻译哪里出错了?

4

1 回答 1

1

这些是内存操作数。

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

将存储在 address 的值添esi + ebx*4 - 8​​加到eax.

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

将存储在 address 的值esi + ebx*4 - 4与 进行比较eax

于 2013-10-21T13:37:59.340 回答