汇编语言非双字局部变量

  • 内容
  • 评论
  • 相关

在声明不同大小的局部变量时,LOCAL 伪指令的操作会变得很有趣。每个变量都按照其大小来分配空间:8 位的变量分配给下一个可用的字节,16 位的变量分配给下一个偶地址(字对齐),32 位变量分配给下一个双字对齐的地址。

现在来看几个例子。首先,Example 过程含有一个局部变量 var1,类型为 BYTE:

Example1 PROC
    LOCAL var1:byte
    mov al,var1       ;[EBP-1]
    ret
Example1 ENDP

由于 32 位模式中,堆栈偏移量默认为 32 位,因此,var1 可能被认为会存放于 EBP-4 的位置。实际上,如下图所示,MASM 将 EBP 减去 4,但是却把 var1 存放在 EBP-1,其下面的三个字节并未使用(用 nu 标记,表示没有使用)。图中,每个方块表示一个字节。

为局部变量保留空间

本文标题:汇编语言非双字局部变量

本文地址:https://www.hosteonscn.com/5462.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注