gcc에서 inline 어셈블러인데요... 도와주세요...
글쓴이: supersky / 작성시간: 금, 2003/12/19 - 2:09오후
안녕하십니까? 김성태입니다.
gcc에서 inline어셈블러를 사용할려고 하는데요... 자꾸 에러가 납니다.
#include <stdio.h> void FastMemCpy(void *Dest, const void *Src, int Count) { __asm__ __volatile__ ( \ "cld\n" \ "rep\n" \ "movsl" \ : \ : "S"(Src), "D"(Dest), "c"(Count) \ : "%esi", "%edi", "%ecx" \ ); }
위와 같은 코드입니다.
gcc로 컴파일 하면 아래와 같은 에러가 나타나는데요.
[root@localhost xxxx]# gcc asmtest.c asmtest.c: In function `FastMemCpy': asmtest.c:7: Can't find a register in class `CREG' while reloading `asm'.
아무리 찾아봐도 어떻게 해결을 해야할지 모르겠습니다.
아시는분들 도와주세요~~~
Forums:
클로버리스트에 적은 레지스터를 전부 지워주면 됩니다. x86의 경우 클래
클로버리스트에 적은 레지스터를 전부 지워주면 됩니다. x86의 경우 클래스 S, D, c에 속하는 레지스터가 각각 하나씩 밖에 없기 때문에 입력 레지스터와 충돌이 발생합니다. 예전엔 이게 되었는데 요즘 gcc는 안되더군요.
그리고 각 행 끝에 백슬래쉬는 붙이지 않아도 됩니다.
한국 BSD 사용자 포럼
인터넷에 있는 자료는 다 옛날 자료밖에 없더라구요...답변 주셔서
인터넷에 있는 자료는 다 옛날 자료밖에 없더라구요...
답변 주셔서 감사합니다.
잘 해결 되었습니다.
void main()
{
printf("Hello World\n");
exit(0);
}
/* 초심으로 돌아가자~~~~~ */
댓글 달기