2013-11-04 2 views
1

이상한 오류 출력은 :C++의 인라인 어셈블리가 작동하지 않는 이유는 무엇입니까?

#include <iostream> 
int main(int arg, char **LOC[]) 
{ 
asm 
(
"mov eax, 0CF;" 
"pusha;" 
); 
return 0; 
} 

그것은 불평, 여기 GCC의 오류입니다 : 어셈블리가 malformatted되기 때문에이 오류가

t.s: Assembler messages:

t.s:31: Error: too many memory references for `mov'

+1

[잘 읽으세요] (http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html) – alexbuisson

답변

9

. 레지스터 액세스는 %eax처럼 이루어지며, 즉치 피연산자에는 $이 사용됩니다. 또한 GCC는 기본적으로 (DanielKO의 설명 참조) AT & T 구문을 사용합니다.이 구문의 오른쪽에는 대상이 있고 왼쪽에는 원본이 있습니다. 이게 너가 찾고있는거야? 또한

mov $0xcf, %eax 

, 당신의 pusha 불균형, 당신은 함수에서 반환하기 전에 올바르게 스택을 정리하지 않습니다 즉. 전체 소스가 불완전한 부분만을 복사하여 붙여 넣은 것 같아서 전반적인 목표가 무엇인지 아는 것이 좋을 것입니다.

+3

그 동안 '-masm = intel' GCC 플래그를 언급 할 가치가 있습니다 . – DanielKO