我阅读了Kip Irvine x86汇编书,有两个问题。
1)这个定义的含义是什么:
array2 WORD 5 DUP(3 DUP(?))
2)
之间有什么区别myArray BYTE 10,20,30,40,50,
60,70,80,90,100
和
myArray BYTE 10,20,30,40,50
BYTE 60,70,80,90,100
在这个数组定义中?
答案 0 :(得分:2)
1)我们知道DUP代表Duplicate。在这个语句中,您正在创建一个长度为15的Byte数组。这样就可以了,你要求汇编程序给你5个(3(?))。并且(3(?))表示3个未知值。
使用此示例可以更好地解释这一点 -
ownerClass
这里的数组长度为25(5 *(3 + 2))。它将初始化为 -
aaabbaaabbaaabbaaabbaaabb
这基本上是aaabb的5倍。简而言之,您使用不同的重复值创建了自定义副本。
2)这基本上是根据您的视觉需求缩写代码的方式。它本身可以是一条线。假设你有一个大约有20个数字的数组。所以将它们分成3-4行更容易。
所以像这样的代码 -
ownerClass
也可以写成 -
array DB 5 DUP(3 DUP('a'), 2 DUP('b'))
答案 1 :(得分:2)
array2 WORD 5 DUP(3 DUP(?))
这将创建一个5 * 3个字的数组,总共30个字节。这些字节都不会获得定义的值,因为?占位符意味着汇编器分配空间但不初始化内容。
myArray BYTE 10,20,30,40,50,
60,70,80,90,100
...
myArray BYTE 10,20,30,40,50
BYTE 60,70,80,90,100
这两个初始化列表都声明了相同的数组。然而,在第一种情况下,由于添加了逗号,因此转换到另一行时,列表不中断。这在使用LENGTHOF和SIZEOF运算符时变得很重要。在第一种情况下,LENGTHOF和SIZEOF产生10,但在第二种情况下,他们只给出5。