assembly - 清理堆栈时可以将动态值(寄存器或内存)与 RET 一起使用吗?

标签 assembly x86 stack return calling-convention

我使用 NASM,并且对 ret 指令有疑问。我知道我应该在 ret 之后指定发送到堆栈的变量数量,但是如何动态地执行此操作呢?我尝试过:

ret eax

ret dword[var]

但是这些都不起作用。有办法做到这一点吗?

最佳答案

没有操作码可以做到这一点,唯一可用的操作码要求数字是常量。

理论上,您可以将返回值弹出到寄存器中,然后根据动态值调整堆栈指针,压入返回地址和RET,但这有点复杂。

您需要这样做的原因是什么?通常,堆栈中返回地址之前的任何值都属于调用函数,处理它们是它们的工作。

关于assembly - 清理堆栈时可以将动态值(寄存器或内存)与 RET 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38372949/

相关文章:

c - 对树使用回溯

c++ - 转换内联 C 汇编程序(Intel 语法到 AT&T)

ios - 统一 iOS 和 Android 上的 NEON 组件

winapi - FASM - 如果文件存在 - 使用 GetFileAttributes - INVALID_FILE_ATTRIBUTES 值?

c++ - __m256 未知类型(clang 5.1/i5 CPU)?

c++ - 为什么这个函数会把RAX压栈作为第一个操作呢?

assembly - 曼德尔布罗特集中的形状

java - 有人能帮助理解这段伪代码的含义吗?

c - 高效的 4x4 矩阵乘法(C 语言与汇编语言)

assembly - 在 Arm 中,参数在堆栈中存储的顺序是什么?