如果在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可能是重定位的目标,当链接目标文件时,它会改变它的某个其他值。 –