2011-04-11 8 views
2

어떤 ASM 스타일 g ++ (AT & T 또는 Intel)을 사용하고 있는지 궁금합니다. 다양한 ASM 명령어에 대한 정의를 제공해야하는 과제를 수행하고 있습니다. 나는 아래 보았다g ++에서 사용하는 ASM 스타일

movl %esp, %ebp 
where %esp = stack pointer and %ebp = base pointer 

Intel style이 (가) 위의 동일합니다 말합니다 : 나를 궁금하게

movl destination, source 

하지만 스택 포인터에 기본 포인터를 이동 이해가되지 않습니다 g ++를 사용하는 경우 AT & T ASM 스타일.

g++ -S src -o out.bin 
OS: Fedora Linux 14, 2.6.35.10-74.fc14.i686 
Compiler: gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) 

내 질문 : 결정적으로 생산되는 스타일 g ++ 알려 어쨌든 있나요

여기가 ASM (및 플랫폼 정보)을 생성하는 데 사용되는 명령이다? 스위치가 있습니까?

내가 잘못한 부분을 수정하십시오. 미리 감사드립니다!

답변

3

G ++ 목표는 .intel_syntax directive을 사용하지 않는 & T 구문 (연산SRC의 최종 도착) AT 사용하는 GNU 어셈블러 gas.

+0

안녕에 해당하는 leave를 통해 복원 있습니다! 답장을 보내 주셔서 감사합니다. GNU man 페이지를 (man as)로 보았고 사용 된 ASM 구문에 대한 참조를 보지 못했습니다. 내가 따라갈 수있는 링크를 만들어 주시겠습니까? 교수님은 정확성을 높이기 위해 노력하고 있습니다. 제 일을 지원하는 공식 문서를 갖고 싶습니다. 다시 한 번 감사드립니다! – certifiedNoob

+0

@certifiedNoob : 설명서 (GNU gcc.gnu.org에서 링크 된 sourceware.org)에서 GNU에 대한 권한있는 링크를 추가했습니다. –

+0

네, 정말 고마워요! 나는 처음에는 그것을 보지 못했습니다. 다시 한 번 감사드립니다! – certifiedNoob

2

가장 확실하게 AT & T 구문을 생성하며보고있는 내용이 정확합니다. 기본 포인터 자체가 스택에 보존 된 후에 스택 포인터가 기본 포인터로 이동됩니다. x86에서 gcc가 방출하는 표준 스택 프레임의 상용구입니다.

또한 ret 전에 스택 프레임이

movl %ebp,%esp 
popl %ebp 
+0

맞습니다. 첫 번째 줄은 "pushl % ebp"다음에 원래 나열된 코드가옵니다. 설명 주셔서 감사합니다! – certifiedNoob

+0

+1 내 질문에 대한 답. 감사. 나는 처음으로 어셈블리 코드의 논리를 따르려고 노력하고있다. 나는 아주 간단한 프로그램의 출력을 만들기 위해 g ++를 사용했고 'leave'는 나를 괴롭혔다. – ptpaterson