数组定义误会?

时间:2016-04-21 19:36:03

标签: assembly x86 masm irvine32

我阅读了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

在这个数组定义中?

2 个答案:

答案 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。