2014-01-21 7 views
0

예제 및 온라인 설명서를보고 Asm을 배우기 시작했습니다. 지금 나는 인터넷에서 벗어난 예를 들고 어려움을 겪고있다.GNU Assember 'SIREG'오류

hat.c 
. 
include hat.h 
. 
. 
hat_create(hat_desc_t* hat) 
{ 
. 
. 
copy_page((void*) hat->va_pd, (void*) page); 
. 
return (page); 
} 
. 

..................................

hat.h 
. 
NPTE equ 1024 
. 
inline static void 
copy_page(void* src, void* dest) 
{ 
asm volatile 
(
    "cld\n\t" 
    "rep\n\t" 
    "movsl" 
    : 
    : "D" (dest), "S" (src), "c" (NPTE) 
    : "di", "si" <- This where the problem is..... 
); 
} 

의 gcc --version

gcc (GCC) 4.6.1 20110627

gcc -fno-builtin -nostdinc -O2 -fomit-frame-pointer -c hat.c -o hat.o

오류 : 클래스 레지스터 'SIREG'다시로드 'ASM'을하면서 찾을 수 없습니다 오류 : 'asm'피연산자에 불가능한 제약 조건이 있습니다.

누구든지이 오류를 해결하는 방법을 알고 있습니까?

답변

0

간단한 변화

"디", "시"

에 "0", "1"

이 문제가 해결됩니다.