Я пытаюсь использовать lea rax, [rip]
в программе c
. Моя программа выглядит следующим образом:квадратные скобки в встроенном сборе
...
asm volatile ("lea %%rax, %[rip]"
:);
...
Однако программа не компилируется, метание ошибки: undefined name operand
. Моя платформа Ubuntu 1404 на архитектуре x86-64 (как виртуальная машина).
вы уверены в синтаксисе и порядке операнда назначения/источника? См. Здесь, если вы используете gcc: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html – Pynchia
не могли бы вы быть более конкретными (с учетом не-эксперта здесь)? Я немного обновил OP, и в отношении инструкции 'lea' следую здесь: http://stackoverflow.com/questions/12397451/why-cant-i-save-the-value-of-rip. – Richard
Я думаю, что встроенная сборка GCC, [] или% [] обозначает именованный параметр, который вы передаете. Rip - это фактически имя машинного регистра, а не имя одного из ваших параметров, поэтому нет смысла ссылаться на него сюда. Вы имели в виду, что это адресный операнд? – sh1