2012-12-17 6 views
0

"objdump를 -D"다릅니다는 "GCC는 -S"나는 ASM 출력을 볼 수 <code>gcc -S</code>와 함께 작은 코드를 작성하고 컴파일

... 
movl %esp, %ebp 
.cfi_def_cfa_register 5 
subl $16, %esp 
movl $0, -4(%ebp) 
... 

은 지금은 기대 objdump -D 리눅스에서 전화

80483b5: 89 e5     mov %esp,%ebp 
80483b7: 83 ec 10    sub $0x10,%esp 
80483ba: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) 

가 왜 mov/sub 대신 movl/subl받을 수 있나요 : 동등한 구조 (분해) 리드하지만처럼 보이는?

답변

2

출력은 동일합니다. b/l/etc. 명령 끝에 붙이는 것은 단순히 조작되는 데이터의 크기를 독자에게 알려주는 방법입니다. 기본 x86 아키텍처는 피연산자에서 크기를 추론 할 수 있으므로 이러한 내부적 구분을하지 않습니다. 크기는 AT & T 구문 'idiom'/ sugar이며 gcc 툴체인에서 일관되게 사용되지 않은 것 같으며 objdumpbinutils입니다.

0

또한 gcc -S의 출력이 연결 해제되어 있으므로 objdump.exe의 출력이 연결되어있는 동안 실행 가능하지 않습니다.