为什么mov eax,val不是英特尔语法相当于mov $ val,%eax?

时间:2017-09-09 14:59:08

标签: assembly x86 gas att

我试图了解英特尔语法和AT& T语法之间的差异(我使用的是GNU)。

我有两个文件,intel.s:

.intel_syntax noprefix

val:
    mov eax, val

和atandt.s:

val:
    mov $val, %eax

我正在尝试将AT& T版本转换为英特尔版本。但我得到了不同的结果:

$ 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

为什么他们不同?

1 个答案:

答案 0 :(得分:5)

Intel指令加载val的内容。要加载其地址,请使用

    mov eax, offset val