assembly - JMP 对堆栈和帧指针执行什么操作?

标签 assembly x86

当程序集有像 jmp f 这样的指令时,堆栈和帧指针会发生什么?

我的意思是 - f 是内存中的标签,对吗?我们如何跳转到内存中的不同地址而不更新我们的帧和堆栈指针...

编辑:我说的是 Intel x86 组件,是的:)

最佳答案

堆栈和帧指针处理数据位置jmp 指令处理代码位置。除非发生重大事件,否则一者不应影响另一者。以下是一些严重的事情的列表:

  • 任务切换 - 由于使用任务门进行远跳转
  • 故障 - 由于跳转到无效的新页面,或跳出当前段,或尝试非法更改权限的jmp
  • 陷阱 - 例如,由于代码断点。事实上,目前我并没有想到其他陷阱。

就是这样。即使这些情况也会改变堆栈,因为它们涉及某种上下文切换,要么切换到新任务,要么切换到某些异常处理程序。

另请注意,据我所知,没有操作系统使用 CPU 的任务切换功能。它通常用软件实现。

关于assembly - JMP 对堆栈和帧指针执行什么操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2465866/

相关文章:

javascript - LMC 改变 y 值

assembly - 该汇编代码如何区分物理偏移量和页面偏移量?

assembly - "self-modified link"在 Pegasus 编程中如何工作?

pointers - EIP寄存器如何获取其值?

assembly - 指令解码器如何区分 32 位模式下的 EVEX 前缀和 BOUND 操作码?

linux - 在 x86 中将字符串定义为字节 (db) 和将字符串定义为字/双字 (dw/dd) 有什么区别

c - volatile 指令的执行

linux - 识别汇编中的库调用

assembly - x86_64 程序集 : effects of the interrupt flag and TPR register

assembly - 如何通过BIOS中断在实模式下处理键盘?