我正在處理一個需要調試AT & T裝配的作業。我遇到了以下兩條問題,只想要求澄清一下。IA32組裝說明
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
因爲%ebx
仍然等於2
如果我是正確的,這意味着第二行比較%esi + 2
到%esi + 4
對於任何輸入值都不可能是真的。然而,根據任務它必須是真實的。我的翻譯在哪裏出錯?
粘貼更多代碼。可能有一個更新esi或ebx的循環。 –