为啥 mov eax,val 不是 mov $val,%eax 的 Intel 语法等价物?
Posted
技术标签:
【中文标题】为啥 mov eax,val 不是 mov $val,%eax 的 Intel 语法等价物?【英文标题】:Why is mov eax,val not the Intel-syntax equivalent of mov $val,%eax?为什么 mov eax,val 不是 mov $val,%eax 的 Intel 语法等价物? 【发布时间】:2017-09-09 14:59:07 【问题描述】:我试图了解 Intel 语法和 AT&T 语法之间的区别(我使用 GNU as)。
我有两个文件,intel.s:
.intel_syntax noprefix
val:
mov eax, val
和atandt.s:
val:
mov $val, %eax
我正在尝试将 AT&T 版本转换为 Intel 版本。但我得到不同的结果:
$ objdump -d intel.o
intel.o: file format elf32-i386
Disassembly of section .text:
00000000 <val>:
0: a1 00 00 00 00 mov 0x0,%eax
和
$ objdump -d atandt.o
atandt.o: file format elf32-i386
Disassembly of section .text:
00000000 <val>:
0: b8 00 00 00 00 mov $0x0,%eax
它们为什么不同?
【问题讨论】:
在 intel 语法中你应该使用mov eax, offset val
来加载地址。
c9x.me/x86/html/file_module_x86_id_176.html 一个是mov immediate,另一个是mov from dword
感谢大家的帮助。现在明白了!
这是.intel_syntax noprefix
与 NASM 语法不同的方式之一。它更像 MASM,它使用完全相同的 offset
关键字,其中一个普通符号是一个内存操作数。
【参考方案1】:
Intel 指令加载 val 的内容。要加载其地址,请使用
mov eax, offset val
【讨论】:
以上是关于为啥 mov eax,val 不是 mov $val,%eax 的 Intel 语法等价物?的主要内容,如果未能解决你的问题,请参考以下文章
汇编指令学习(MOV,MOVSX,MOVZX,LEA,XCHG)
opencv运行时,出错误,反汇编10035FDC mov eax,dword ptr [edi+10h] 是啥意思?