2017-09-09 11 views
4

私はIntel構文とAT & T構文(私はGNU asを使用しています)の違いを理解しようとしています。

.intel_syntax noprefix 

val: 
    mov eax, val 

とatandt.s:

val: 
    mov $val, %eax 

私はインテルのバージョンにAT & Tのバージョンを変換しようとしています

は、私は2つのファイル、intel.sを持っています。

$ 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 

は、なぜ彼らが異なっている。しかし、私は別の結果を得ますか?

+2

int構文では、アドレスをロードするために 'mov eax、offset val'を使うべきです。 – Jester

+0

https://c9x.me/x86/html/file_module_x86_id_176.html mov即時、その他movからdword –

+0

ありがとうございました。今理解している! –

答えて

5

Intel命令はvalの内容をロードします。アドレスをロードするには、

mov eax, offset val 
関連する問題