1
내가 가지고 GNU C 프로그램에서 다음 코드를64 비트 포인터를 RAX 레지스터로 옮기는 방법은 무엇입니까?
void *segment = malloc(1024);
asm volatile("mov $%0, %%rax" : : "r" (segment));
그리고 다음과 같은 오류 얻을 : %rax
뭐가 문제
Error: illegal immediate register operand %rax
를?
코드에 문제가 있습니다 ... 'asm ("": : "a"(세그먼트));을 사용할 수 있기 때문에 무엇이든'% rax '에 직접 명시 적으로 옮길 필요가 없습니다. 레지스터 수정 자''a ''는 "이 값이'[ER] AX'에 전달/반환 될 것으로 기대하고있다. 위의 어셈블리는 무의미합니다. 컴파일러는 그것을 버립니다. 'RAX'의 값으로 무엇을하고 싶은지 명확히하십시오. –