32位X86中本地和全局变量之间的区别是什么?

时间:2014-11-18 02:40:24

标签: x86 att

我是X86汇编语言的初学者。有人能举例说明局部变量和全局变量吗?特别是,它们是如何初始化的?它们存放在哪里?他们是如何被访问的?

1 个答案:

答案 0 :(得分:2)

在x86程序集中,全局变量也称为静态数据区域。你可以找到一个很好的教程 here - 我从中粘贴了一些信息。以下是声明全局变量的示例:

.DATA           
var DB 64 ; Declare a byte, referred to as location var, containing the value 64.
var2 DB ? ; Declare an uninitialized byte, referred to as location var2.
DB 10 ; Declare a byte with no label, containing the value 10. Its location is var2 + 1.

然后可以从代码中的任何位置访问全局变量,无需将它们作为参数传递。

局部变量存储在堆栈空间中,并通过将它们复制到寄存器中进行处理,进行计算并将它们放回堆栈。

我们假设您要调用一个函数。传递给函数的参数将是该函数的locals。

push [var] ; Push last parameter first
push 216   ; Push the second parameter
push eax   ; Push first parameter last
call _myFunc ; Call the function (assume C naming)
add esp, 12 ; Just discard the locals

当代码进入函数时,它需要使用pop:

从堆栈中获取它们
pop eax ; get the value you passed as eax content
pop ebx ; get 216 in ebx
pop ecx ; get [var] in ecx

所以在eax,ebx,ecx中你有局部变量的值。修改它们之后你可以随时将它们放在堆栈上并根据需要将它们弹出

希望这有帮助。