为什么 mov eax,val 不是等价于 mov $val,%eax 的 Intel 语法?
Why is mov eax,val not the Intel-syntax equivalent of mov $val,%eax?
我正在尝试了解 Intel 语法和 AT&T 语法之间的区别(我使用 GNU 作为)。
我有两个文件,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 [=13=]x0,%eax
为什么不同?
Intel指令载入val的内容。要加载其地址,请使用
mov eax, offset val
我正在尝试了解 Intel 语法和 AT&T 语法之间的区别(我使用 GNU 作为)。
我有两个文件,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 [=13=]x0,%eax
为什么不同?
Intel指令载入val的内容。要加载其地址,请使用
mov eax, offset val