283得票6回答
基指针和栈指针到底是什么?它们指向什么?

使用来自维基百科的这个例子,其中DrawSquare()调用DrawLine(): (请注意,此图中高地址在底部,低地址在顶部。) 有人能解释一下在这个上下文中ebp和esp是什么吗? 从我所看到的,我会说栈指针总是指向栈的顶部,而基指针指向当前函数的开头,对吗? 编辑:我是指...

144得票5回答
x86汇编中使用push/pop指令对寄存器的作用是什么?

阅读有关汇编语言的文章时,经常遇到人们写道他们将处理器的某个寄存器“push”一下,然后稍后再“pop”回来以恢复其先前的状态。 这是什么意思呢?如何将寄存器“push”起来?它被推到哪里去了?为什么需要这样做? 这是否简化为单个处理器指令,还是更加复杂?

142得票2回答
RBP寄存器在x86_64汇编语言中的作用是什么?

我正在努力学习一点汇编语言,因为我在计算机体系结构课上需要用到它。我写了一些程序,比如打印斐波那契数列。 我意识到每当我写一个函数时,我都会使用这三行代码(我是通过比较由gcc生成的汇编代码和对应的C代码学到的): pushq %rbp movq %rsp, %rbp subq ...

35得票2回答
基指针和栈指针

给定以下代码: swap: push ebp ; back up the base pointer, mov ebp, esp ; push the context of the registers on t...

33得票2回答
汇编中的指令"movq (%rsp), %rsp"翻译为:将栈指针加载到内存中。

我正在阅读一些代码,不确定这行代码是做什么的:movq (%rsp), %rsp

32得票10回答
打印出堆栈指针的值。

如何在Linux的C语言中打印出堆栈指针的当前值(适用于Debian和Ubuntu)? 我尝试了谷歌搜索,但没有找到结果。

21得票4回答
x86架构中栈指针指向哪里?

例如,如果我推动ax,则[SP]指向ax值或ax后的单词?这是否与实模式和保护模式有所不同?我问这个问题是因为《汇编语言艺术》一书展示和解释了sp指向最后推送的数据,而在这个页面上OSDev Wiki - Stack它被说明为指向最后推送数据后的空单词。

15得票5回答
在ESP以下编写代码是否有效?

32位Windows应用程序可否在未明确减少ESP的情况下使用ESP以下的堆栈内存作为临时交换空间?考虑一个将浮点值返回到 ST(0)的函数。 如果我们的值当前位于EAX中,我们可以:PUSH EAX FLD [ESP] ADD ESP,4 // or POP EAX, et...

15得票5回答
函数调用跳转到错误的函数

我正在使用VS2008编译一个C++静态库,在解决方案中也有一个启动项目,它使用该库,而且运行良好。 但是,在另一个解决方案中使用该库时,出现了运行时检查失败的问题。 “ESP的值在函数调用跨度过程中没有得到正确保存。” 通过代码逐步执行,我发现函数foo()在崩溃之前会跳转到bar()。所...

15得票2回答
栈指针和程序计数器有什么区别?

众所周知,微处理器执行任务的过程就是逐个从内存中执行二进制指令,并且有一个程序计数器,它保存着下一条指令的地址。如果我没记错,这就是处理器执行任务的方式。但是,还有另外一个指针叫做栈指针,其作用几乎与程序计数器相同。我的问题是,为什么我们需要一个栈指针来指向内存(栈)的地址?有人能告诉我栈指针...