什么';32位X86中局部变量和全局变量的区别是什么?

什么';32位X86中局部变量和全局变量的区别是什么?,x86,att,X86,Att,我是X86汇编语言的初学者。有人能举一个局部变量和全局变量的例子吗?特别是,它们是如何初始化的?它们存放在哪里?如何访问它们?在x86汇编中,全局变量也称为静态数据区域。你可以找到一个很好的教程,我从中粘贴了一些信息。下面是一个声明全局变量的示例: .DATA var DB 64 ; Declare a byte, referred to as location var, containing the value 64. var2 DB ? ; Declare an uni

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

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

.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.
然后,可以从代码中的任何位置、任何方法访问全局变量,而无需将它们作为参数传递

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

假设您想调用一个函数。传递给函数的参数将是该函数的局部变量

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中,你有局部变量的值。修改它们之后,您可以随时将它们再次放在堆栈上,并根据需要将它们弹出


希望这能有所帮助。

有关全球和本地的信息,请参阅。谢谢@kirbyfan64sos。如果你能举个例子就好了。我很难整理通过Google找到的所有相关信息。如果变量是全局变量,即它们只是存在于.data段下,函数(方法)是否可以看到并使用该变量而不必将该变量作为参数传递?是的。他们可以。我在回复中补充了这一点。谢谢