Pointers 如何在x86中声明全局dword指针?

Pointers 如何在x86中声明全局dword指针?,pointers,x86,global,nasm,dword,Pointers,X86,Global,Nasm,Dword,我需要声明两个指向两个数组的全局dword指针。据我所知,全局意味着在.data中声明。对吗?声明这些dword指针的代码是什么,以便在x86程序集中使用NASM和Intel语法将初始化为0 我需要声明两个指向两个数组的全局dword指针 如果我理解正确,这很简单,假设它们的意思是全局的,就像在所有文件中一样,创建一个名为pointers.asm或其他文件,然后键入: [section] .bss global _pointer1, _pointer2 _poi

我需要声明两个指向两个数组的全局dword指针。据我所知,全局意味着在.data中声明。对吗?声明这些dword指针的代码是什么,以便在x86程序集中使用NASM和Intel语法将初始化为0

我需要声明两个指向两个数组的全局dword指针

如果我理解正确,这很简单,假设它们的意思是全局的,就像在所有文件中一样,创建一个名为
pointers.asm
或其他文件,然后键入:

[section] .bss
        global _pointer1, _pointer2

        _pointer1   resd 4 ; reserve 4 dwords
        _pointer2   resd 4
我们使用
.bss
部分,因为内存被设置为零,所以当您使用它时,您的变量被初始化为
0

或者,如果您想自己将每个元素初始化为零,您可以使用
.data
部分:

[section] .data
        global _pointer1, _pointer2

        _pointer1   dd 0,0,0,0
        _pointer2   dd 0,0,0,0
同样,仍然使用
.data
部分,可以这样做,允许您指定缓冲区的大小,如
.bss
部分:

[section] .data
    global _pointer1, _pointer2

    _pointer1 times 4 dd 0
    _pointer2 times 4 dd 0
无论您决定采用何种方式,使用指向在单独文件中全局声明的数组的指针:

[section] .text

        global _main
        extern _pointer1

        bytesize equ 4 ; dword = 4 bytes

_main:
        ; write each element of the array
        mov dword [_pointer1 + 0 * bytesize], 0xa
        mov dword [_pointer1 + 1 * bytesize], 0xb
        mov dword [_pointer1 + 2 * bytesize], 0xc
        mov dword [_pointer1 + 3 * bytesize], 0xd

        ; read each element of the array
        mov eax, [_pointer1 + 0 * bytesize]
        mov eax, [_pointer1 + 1 * bytesize]
        mov eax, [_pointer1 + 2 * bytesize]
        mov eax, [_pointer1 + 3 * bytesize]

        ret

此主程序返回时存储在
eax
中的
0xd
13
,希望通过查看此程序,您可以了解正在进行的操作。

@Z。是的,我知道我可以用谷歌搜索。但我似乎找不到我想要的答案。这就是我问这个问题的原因。是的,我知道这不仅仅是一个问题,但它们都在一起。是的,但“dword必然意味着什么?…当它是指针时意味着什么?”这两个问题都可以通过Google和StackOverflow随时获得。@Z。好的,可能是这样,但我在任何地方都找不到任何声明。我修改了这个问题。@Thename'sBob.MSBob。如果您认为问题重复,请将其标记为重复,并提供指向先前问题的链接。顺便说一句,这个名字非常,非常烦人。。。