2017-09-09 16 views
4

Intel 구문과 AT & T 구문의 차이점을 이해하려고합니다. (GNU as를 사용하고 있습니다.)

.intel_syntax noprefix 

val: 
    mov eax, val 

및 atandt.s :

val: 
    mov $val, %eax 

내가 인텔 버전으로 AT & T 버전으로 변환하려고

나는 두 개의 파일 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

인텔 구문에서 주소를로드하려면 'mov eax, offset val'을 사용해야합니다. – Jester

+0

https://c9x.me/x86/html/file_module_x86_id_176.html 하나는 mov이고 다른 하나는 mov에서 dword –

+0

모두 도와 주셔서 감사합니다. 지금 이해! –

답변

5

인텔 명령어가 val의 내용을로드합니다. 주소를 불러 오기 위해서는

mov eax, offset val