2017-05-17 181 views
-3

如果在eax中有一個char數組的地址,那麼0(%eax)和(%eax)之間的區別是什麼?或者它們是相同的,都是指數組中的第一個元素?0(%eax)和(%eax)有什麼區別?

+5

當你組裝好然後拆開它們你有沒有看到差異? –

+0

想想'0(%eax)'是什麼意思。這意味着與'eax'中的值有0的偏移量。現在,'(%eax)'是什麼意思?它意味着'eax'中的值。所以只要'x == x + 0',否,顯然沒有區別。 –

+0

如果您在反彙編程序輸出中看到類似'0(%eax)'的東西(與彙編源代碼相反),那麼0可能是重定位的目標,當鏈接目標文件時,它會改變它的某個其他值。 –

回答

0

它們是一樣的。

假設你已經正確設置了eax來指向數組中的第一個元素的地址,那麼可以使用movb將數據的一個字節放入數組中。

+0

'MOVB'與這裏的任何東西有什麼關係?如果它只是一個隨機的例子,那就特別令人困惑,因爲你不能在'EAX'中使用'MOVB',如問題所示;需要BYTE大小的寄存器。也許更好的例子是'MOVZBL'?或者只是'MOVL'來存儲DWORD大小的值。 –

+0

有人問eax中char數組的問題,所以訪問數組的元素將需要一個movb。即:movb $ 32,0(%eax) – lostbard

1

它們完全一樣。您可以通過組裝,然後拆卸兩個指令很容易地證明了這一點:

movl (%eax),%edx 
movl 0(%eax),%edx 
Disassembly of section .text: 

0000000000000000 <.text>: 
    0: 67 8b 10    mov (%eax),%edx 
    3: 67 8b 10    mov (%eax),%edx 

發現,他們有確切的字節相同的編碼。

相關問題