我们如何在汇编中为 32 位代码定义空的 2D 数组 251x256?
我有一个用于汇编的 16 位代码的旧示例:
DataIn byte 251 dup (256 dup (?))
现在我想声明同样的事情,但这将适用于 NASM 的 32 位架构。
我们如何在汇编中为 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.汇编中没有二维数组之类的东西
2 4 6
3 6 9
7 8 9
像这样位于内存中:2 4 6 3 6 9 7 8 9
2. 所以创建“2D”数组的唯一方法就是即兴创作。
3. 我们可以保留 2 个计数器来跟踪我们的临时二维数组。
4. 因此,对于每 3 个数字,我们将增加行的计数器,我们将“移动”到下一个即兴的行。