int x;
__asm __volatile ("movl % 0, %% sp": "= r"("% sp"));
sp를 x에 저장하고 싶습니다.
오류 :iOS 오류의 인라인 asm
error: unexpected token in operand
__asm __volatile("movl %0, %%sp":"=r"(x)::"%sp");
^
:1:13: note: instantiated into assembly here
movl r0, %sp
^
1 warning and 1 error generated.
, 그것은 %가 레지스터를 표시하기 위해 사용하고 있다고 말했다. 그러나 그것은 사실이 아닙니다. – teddy
gcc 인라인 어셈블리에서 '%'는 _operand_를 나타냅니다. 디폴트 AT & T 어셈블리 구문이 레지스터의 접두어로 '%'를 사용하는 x86에서 gcc의 인라인 asm을 사용하여 '%%'라고 쓰는 경우가 있습니다. 즉, 'EAX'를 복사하는 'mov %% eax, % 0' reg을 첫 번째 출력 피연산자로 변환합니다. ARM의 어셈블리 구문에는 레지스터를 나타내는 데 '%'가 필요하지 않으며 레지스터 이름은 예약 된 키워드입니다 (예 : 'sp'라는 레이블은 사용할 수 없습니다). 여전히, 제 게시물에 표시된 것처럼, 여러분이 제공 한 코드의 변형은 ARM 전용이며, _ 특정의 것은 (sp를 읽는) CPU 독립적 인 코드 일 수 있습니다. 내 대답을 보라. –