组件:定义空的2D阵列32位(NASM Intel语法)



我们如何定义汇编中的32位代码的空2D数组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。汇编中没有2D数组

2 4 6 
3 6 9 
7 8 9 

位于这样的记忆中:2 4 6 3 6 9 7 8 9

2。因此,创建" 2D"数组的唯一方法是即兴创作。

3。我们可以保留2个计数器,以跟踪我们即兴的2D数组。

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

最新更新