相关疑难解决方法(0)

在x86汇编中寄存器上使用的push/pop指令的功能是什么?

在阅读有关汇编程序的文章时,我经常遇到人们在写文件时他们推送处理器的某个寄存器并稍后再次弹出它以恢复它之前的状态.

  • 怎么能推一个寄存器?它在哪里推?为什么需要这个?
  • 这可归结为单处理器指令还是更复杂?

x86 assembly stack terminology

79
推荐指数
5
解决办法
26万
查看次数

堆栈如何在汇编语言中工作?

我目前正在尝试理解堆栈是如何工作的,所以我决定自学一些汇编语言,我正在使用这本书:

http://savannah.nongnu.org/projects/pgubook/

我正在使用Gas并在Linux Mint上进行开发.

我有点困惑:

据我所知,堆栈只是一个数据结构.所以我假设如果我在汇编编码我必须自己实现堆栈.然而,这似乎并非如此,因为有像这样的命令

pushl
popl
Run Code Online (Sandbox Code Playgroud)

因此,当在x86架构的汇编中编码并使用Gas语法时:堆栈只是已经实现的数据结构吗?或者它实际上是在硬件级别实现的?或者是别的什么?其他芯片组的大多数汇编语言也已经实现了堆栈吗?

我知道这是一个愚蠢的问题,但实际上我很困惑.

assembly stack

71
推荐指数
5
解决办法
10万
查看次数

push和pop如何在程序集中工作

我对pop组装中的实际操作感到困惑.是否pop将值PUSHed最后移动到堆栈上(意味着如果我们MOV在最后一个元素之后的值,它不适用PUSH)或者它只是弹出堆栈中最后一个值(因此,应用于两个MOVPUSH),或者它会弹出堆栈指针指向的值吗?请考虑以下代码:

push $4
mov $5, -4(%esp)
add $4, %esp (esp pointing to an unknown value)
pop %ebp
Run Code Online (Sandbox Code Playgroud)

所以在这段代码中,值的值ebp是4,5,还是指向的未知值esp

x86 assembly callstack

8
推荐指数
2
解决办法
3万
查看次数

作为副作用影响 ESP 的 x86 指令是什么?

我知道call并且ret会修改espand that的值push并且pop有许多变体,但是还有其他指令会影响堆栈指针吗?

x86 assembly callstack stack-pointer

4
推荐指数
1
解决办法
967
查看次数

标签 统计

assembly ×4

x86 ×3

callstack ×2

stack ×2

stack-pointer ×1

terminology ×1