我正在处理需要调试 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)
. 此时%eax
equals %esi + 2
,并且按照前面的逻辑,右侧的值 equals-4 + %esi + (%ebx*4)
将评估为,%esi + 4
因为%ebx
仍然等于 2。
如果我是正确的,那意味着第二行是比较%esi + 2
的%esi + 4
,对于任何输入值都不会是真的。但是,根据任务,它必须是真实的。我的翻译哪里出错了?