Я пытаюсь интегрировать свой код сборки в c-программы, чтобы упростить доступ. я пытаюсь запустить следующий код (я на разрядной архитектуре x64 64)Inline Assembly Stack Behavior
void push(long address) {
__asm__ __volatile__("movq %0, %%rax;"
"push %%rax"::"r"(address));
}
значение $ RSP, кажется, не меняется (ни делает особа по этому вопросу). Я пропустил что-то очевидное о том, как работают ограничения? rax правильно распределяется с адресом, но адрес никогда не попадает в стек?
Я предполагаю, что компилятор генерирует пролог и эпилог для вашей функции, которая сохраняет и восстанавливает указатель стека. Вероятно, вам нужно отметить его ['naked'] (https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html) –