【发布时间】:2014-12-19 16:16:05
【问题描述】:
我正在尝试将我的汇编代码集成到 c 程序中以使其更易于访问。 我尝试运行以下代码(我使用的是 x64 64 位架构)
void push(long address) {
__asm__ __volatile__("movq %0, %%rax;"
"push %%rax"::"r"(address));
}
$rsp 的值似乎没有改变(尤其是在这方面也没有改变)。我是否遗漏了一些关于约束如何工作的明显内容? rax 已正确分配地址,但地址似乎从未被推入堆栈?
【问题讨论】:
-
我猜编译器会为您的函数生成一个序言和结语,以保存和恢复堆栈指针。你可能需要标记它
naked