int x;
__asm __volatile ("movl% 0, %% sp": "= r" (x) :: "% sp");
Я хочу хранить sp до x.
Ошибка:Inline asm in iOS error
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 inline '%' указывает на _operand_. На x86, где синтаксис сборки AT & T по умолчанию использует '%' в качестве префикса для регистра, иногда приходится писать '%%' с встроенным asm gcc, т. Е. Как' mov %% eax,% 0', чтобы скопировать 'EAX' reg в первый выходной операнд. Синтаксис сборки в ARM не требует '%' для указания регистров, вместо этого имена регистров являются зарезервированными ключевыми словами (например, вы не можете иметь метку с именем 'sp', например). Тем не менее, как указано в моем сообщении, вариант кода, который вы указали, является только ARM, тогда как эта специфическая вещь (чтение 'sp') может быть записана независимо от процессора. См. Мой ответ. –