2013-10-21 111 views
0

我正在處理一個需要調試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對於任何輸入值都不可能是真的。然而,根據任務它必須是真實的。我的翻譯在哪裏出錯?

+0

粘貼更多代碼。可能有一個更新esi或ebx的循環。 –

回答

1

那些是內存操作數。

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

添加存儲在地址esi + ebx*4 - 8eax值。

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

比較與eax存儲在地址esi + ebx*4 - 4值。

+0

謝謝,這就是我需要的! – cHam