如果在eax中有一個char數組的地址,那麼0(%eax)和(%eax)之間的區別是什麼?或者它們是相同的,都是指數組中的第一個元素?0(%eax)和(%eax)有什麼區別?
-3
A
回答
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
發現,他們有確切的字節相同的編碼。
相關問題
- 1. Linux程序集:「test eax,eax」和「cmp eax,0」有什麼區別
- 2. 「mov(%rax),%eax」和「mov%rax,%eax」有什麼區別?
- 3. leal(%eax,%eax)是做什麼的?
- 4. mov 0x40(%eax),%eax是什麼意思?
- 5. mov eax,dword ptr [eax]是做什麼的?
- 6. GNU AS:movl(%eax),%eax
- 7. eax在mov後有什麼eax,dword ptr [edi]
- 8. 測試的關鍵%EAX%EAX
- 9. 檢查彙編代碼MOV 0x8中(%EBX),%EAX MOV(%eax中),%EAX CMP%EAX(%EBX)
- 10. | 0和~~有什麼區別?
- 11. -0和0有什麼區別?
- 12. 當它包含0時解引用eax的目的是什麼?
- 13. push dword ptr [eax + 22]是什麼意思?
- 14. movl $ _start,%eax是什麼意思?
- 15. 爲什麼EAX的內容不同?
- 16. 「movl(%esi,%ecx,4),eax」意味着什麼?
- 17. x86彙編代碼中「mov eax,cr3; mov cr3,eax」的功能是什麼?
- 18. mov%eax,(%esp)
- 19. 大會(,%EAX,4)
- 20. EAX在改變
- 21. 如何將ST(0)移動到EAX?
- 22. 如何檢查CPUID。(EAX = 14H,ECX = 0)?
- 23. mov eax,0和mov ax之間的機器碼差異,0
- 24. {0}和「」之間有什麼區別?
- 25. {0}和+之間有什麼區別?
- 26. .communicate()和.communicate()[0]有什麼區別?
- 27. firstChild和[0]之間有什麼區別?
- 28. 「kill 0」和「kill - - $$」有什麼區別?
- 29. FILE_ATTRIBUTE_NORMAL和0有什麼區別?
- 30. 「mov eax,dword ptr fs:loc_12 + 6」哪個值已分配給eax?
當你組裝好然後拆開它們你有沒有看到差異? –
想想'0(%eax)'是什麼意思。這意味着與'eax'中的值有0的偏移量。現在,'(%eax)'是什麼意思?它意味着'eax'中的值。所以只要'x == x + 0',否,顯然沒有區別。 –
如果您在反彙編程序輸出中看到類似'0(%eax)'的東西(與彙編源代碼相反),那麼0可能是重定位的目標,當鏈接目標文件時,它會改變它的某個其他值。 –