__asm __(“movl%eax,%esp”)返回什么?

时间:2017-02-06 08:06:43

标签: c linux

这是旧书的一个小功能:

unsigned long f()
{
   __asm__("movl %eax,%esp");
}

该函数被解释为获得堆栈点,但似乎没有。它实际上得到的8位地址远低于我的帧地址。我猜它是为32位系统设计的? 如果我说了些蠢话,请原谅我。

2 个答案:

答案 0 :(得分:1)

实际上,正如@James在评论中提到的,在64位模式下,%eax%esp代表64位%rax%rsp中最不重要的32位寄存器。

答案 1 :(得分:0)

实际上代码有一些错误

unsigned long f()
{
__asm__("movl %esp,%eax");
}

它提供了堆栈指针地址