gpt4 book ai didi

pointers - 如何在 x86 中声明一个全局双字指针?

转载 作者:行者123 更新时间:2023-12-02 01:38:44 26 4
gpt4 key购买 nike

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

最佳答案

I need to declare two global dword pointers that point to two arrays.

如果我理解正确的话,这很简单,假设它们对所有文件都是全局的,创建一个名为 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

此主程序返回 0xd13 存储在 eax 中,希望通过查看此内容您可以了解发生了什么.

关于pointers - 如何在 x86 中声明一个全局双字指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29617914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com