gpt4 book ai didi

assembly - 将数组初始化为程序集中的特定值 (x86)

转载 作者:行者123 更新时间:2023-12-02 21:31:50 26 4
gpt4 key购买 nike

我想用特定值初始化汇编中的数组。我首先尝试在循环中执行此操作,但数组中出现了垃圾。然后我尝试手动执行并得到相同的垃圾。我希望数组重复 0 1 2 n 次。这是我尝试过的一些示例代码。

这是我尝试手动加载数组。第一个值加载得很好。然而,当我在 GDB 中检查第二个值时,它会加载到垃圾中。

sub esp, 260
mov [ebp - 12], dword -1
mov [ebp - 16], byte 0
mov [ebp - 17], byte 1
mov [ebp - 18], byte 2
mov [ebp - 19], byte 0
mov [ebp - 20], byte 1
mov [ebp - 21], byte 2
mov [ebp - 22], byte 0
mov [ebp - 23], byte 1
mov [ebp - 24], byte 2
mov [ebp - 25], byte 0

这是我自动执行此操作的尝试。

    sub esp, 260
mov [ebp - 12], dword -1

again:
add [ebp - 12], dword 1
lea eax, [ebp - 16]
sub eax, [ebp - 12]
mov [eax], byte 0

add [ebp - 12], dword 1
lea eax, [ebp - 16]
sub eax, [ebp - 12]
mov [eax], byte 1

add [ebp - 12], dword 1
lea eax, [ebp - 16]
sub eax, [ebp - 12]
mov [eax], byte 2

cmp [ebp - 12], dword 255
jne again
jmp elsewhere

使用 NASM、x86-32、Intel 语法。

编辑:当我转换此代码以将数组值存储为 DWORD 而不是字节时,两种方法都有效。这是为什么?

最佳答案

借助 NASM,您可以使用 times 前缀轻松初始化重复数据。例如,要按照问题中的要求重复序列“0 1 2”n 次,您可以执行类似于以下操作的操作:

section .data

my_array: times n db 0, 1, 2

只需将 n 替换为您想要的常量值即可。有关 times 前缀的更多信息可以在 NASM Manual 中找到。 .

关于assembly - 将数组初始化为程序集中的特定值 (x86),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43430805/

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