【问题标题】:Assembly x86 "()" meaning汇编x86“()”含义
【发布时间】:2014-04-22 14:37:05
【问题描述】:

我试图对汇编语言有一个基本的了解,但我在一些事情上遇到了麻烦,并且找不到对我有意义的在线资源。

“离开”命令有什么作用?

我知道:

(R) = 内存[Reg[R]]

其中 R 是一个寄存器,但我不知道正确的部分是什么意思。那是取消引用寄存器吗?

对于堆栈帧,参数总是负数吗?局部变量总是正数?并且返回地址是否总是(4 + VAR1)?(VAR1是第一个参数的地址)

【问题讨论】:

    标签: pointers assembly x86


    【解决方案1】:

    “leave” - 这是一个汇编程序指令,用于与汇编程序的“enter”一起使用。

    Reg[R] - 它只是寄存器 R,如 si、esi 或 rsi,但如果您查看指令操作码,可能会有一个位域用于选择一个寄存器,如果您调用该位域的值R,则 Reg[R] 表示位域选择的寄存器。

    堆栈帧 - 这是可选的。一些编译器可以选择不使用堆栈帧。如果启用了堆栈帧,那么函数开始的通常顺序是“push ebp”,然后是“mov ebp,esp”,所以[esp] = ebp的前一个值,并且使用ebp-offset来访问参数, ebp+offset 用于访问局部变量。如果不使用帧,则从 esp 开始的正偏移或零偏移用于参数和局部变量。

    【讨论】:

      【解决方案2】:

      leave 是一个单字节指令,相当于

          movl %ebp, %esp
          popl %ebp
      

      在 32 位模式下。在 16 位或 64 位模式下,与 16 位或 64 位寄存器相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 2011-02-08
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多