0
없이 수행합니다. 어셈블러 코드를 처음 작성했습니다.
test.c: Assembler messages:
test.c:7: Error: bad or irreducible absolute expression
test.c:7: Error: expecting scale factor of 1, 2, 4, or 8: got `$2'
그런 다음 나는
"leal 2(%%ebx,%%eax,$2),%1"
에
"leal 2(%%ebx,%%eax,2),%1"
을 변경 : 맨 처음 시작시 , 나는
#include<stdio.h>
int main(){
int x,y;
asm("movl $2,%eax");
asm volatile(
"movl $1,%0\n\t"
"movl %0,%%ebx\n\t"
"leal 2(%%ebx,%%eax,$2),%1"
:"=m"(x),"=r"(y)
);
printf("x is %d, y is %d\n",x,y);
return 0;
}
gcc에
을 썼다 5.4.0 컴파일러는 오류 메시지를 제공합니다케이. 그러나 $ 2는 2와 같지 않습니까?
이 구문에서 숫자는 $가 없어야하며, 정의 된 그대로입니다. 일반적으로 $는 상수를 의미하지만 주소 지정 모드에서 특정 상수 이외의 다른 것을 가질 수 없기 때문에 접두어를 사용하지 않아 상수라고합니다. –
FYI, 컴파일러에게 (clobber 제약 조건과 함께)'% ebx'를 clobbering하면 예측할 수없는 결과가 발생합니다. (글쎄, 컴파일러에서 마지막 asm 출력을'gcc -O2 -S'로 읽으면 예측할 수 있습니다.) https://stackoverflow.com/tags/inline-assembly/info를 참조하십시오. –