汇编:定义空的2D阵列32位(NASM + Intel语法)

时间:2016-12-12 21:16:01

标签: linux assembly multidimensional-array nasm intel-syntax

如何在汇编中为32位代码定义空2D阵列251x256?

我在16位代码中有一个旧例子用于汇编:

DataIn          byte    251 dup (256 dup (?))

现在我想宣布同样的事情,但这对NASM的32位架构起作用。

2 个答案:

答案 0 :(得分:0)

您可以通过计算每行的偏移量并添加列来声明一维数组并将其作为二维访问。在您的情况下,您的数组是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 :(得分:0)

从评论的所有帮助中我想我已经弄明白了。

<强> 1。装配中没有2D数组这样的东西

2 4 6 
3 6 9 
7 8 9 

如下所示位于记忆中:2 4 6 3 6 9 7 8 9

<强> 2。因此,创建&#34; 2D&#34;的唯一方法是数组就是即兴创作。

第3。我们可以保留2个计数器来跟踪我们的即兴2D阵列。

<强> 4。因此,对于每3个数字,我们将增加行的计数器,我们将&#34;移动&#34;到下一个临时排。