程序集:定义空二维数组 32 位(NASM + Intel 语法)

Assembly: Define empty 2D array 32bit (NASM + Intel syntax)

如何在汇编中为 32 位代码定义空二维数组 251x256?

我有一个 16 位汇编代码的旧示例:

DataIn          byte    251 dup (256 dup (?))

现在我想声明同样的事情,但这将适用于 NASM 的 32 位架构。

您可以声明一个一维数组并通过计算每行的偏移量并添加列来将其作为二维数组访问。在您的情况下,您的数组是 251 行和 256 列,因此您可以将 256 乘以所需的行并添加列,例如:

section .data
    array  resb  251*256  ;251 ROWS X 256 COLUMNS.
_start:
    mov eax,256     ;ROW SIZE (256 COLUMNS PER ROW).
    mov ebx,35      ;DESIRED ROW (35).
    mul ebx         ;EAX * EBX = 8960.

    mov esi,array   ;POINT TO ARRAY.
    add esi,eax     ;POINT TO DESIRED ROW (35).
    add esi,20      ;POINT TO DESIRED COLUMN (20).

这是字节类型,对于更大的类型,需要乘以大小(乘以 2、乘以 4 等)。

根据评论中的所有帮助,我想我明白了。

1.汇编中没有二维数组之类的东西

2 4 6 
3 6 9 
7 8 9 

在内存中的位置如下:2 4 6 3 6 9 7 8 9

2。所以创建“2D”数组的唯一方法是即兴发挥。

3。我们可以保留 2 个计数器来跟踪我们的即兴二维数组。

4.因此,对于每 3 个数字,我们将增加行的计数器,我们将 "move" 到下一个即兴行。