我需要在程序的.DATA部分初始化一个结构数组。大多数都初始化为零,但我需要设置订单号。我可以在.DATA部分使用存储DUP运算符的寄存器来初始化数组元素的顺序号。或者在程序的.CODE部分中使用循环还有另一种方法。
这是示例程序,在初始化期间每个NODEi_KEY必须设置为1..20。该项目要求将其设置为.DATA部分,如果不可能,则可能是拼写错误。
.DATA
NODE STRUCT
NODEi_KEY DWORD ?
NODEi_VALUE DWORD 0
NODE ENDS
THREE NODE 20 DUP ({,,})
答案 0 :(得分:2)
您可以执行您想要的操作,但不能使用DUP操作符执行此操作。您需要使用REPT(repeat)指令代替并创建自己的计数器:
.DATA
NODE STRUCT
NODEi_KEY DWORD ?
NODEi_VALUE DWORD 0
NODE ENDS
THREE LABEL NODE
counter = 1
REPT 20
NODE {counter,}
counter = counter + 1
ENDM
这将创建一个包含20个NODE结构的数组,其中每个NODEi_KEY成员都使用其在数组中的一个位置进行初始化。
REPT指令简单地重复ENDM的所有内容,多次由参数给出。因此,如果您要更改REPT指令以使参数仅为4,则会生成以下内容:
NODE {counter,}
counter = counter + 1
NODE {counter,}
counter = counter + 1
NODE {counter,}
counter = counter + 1
NODE {counter,}
counter = counter + 1
答案 1 :(得分:1)
虽然Masm非常灵活和强大,但我不相信你所要求的正是这样。但是,你绝对可以这样做:
array DB 3 DUP (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
这不是你要求的,但是我不相信你可以做你想要做的事情,而不是剪切和粘贴或找出方法告诉{{1制作内部内容的多个副本。我上面所说的将定义三十二十个字节。这三个中的每一个都将在字节中具有0到19的整数值。
您也可以这样做:
DUP
这定义了一个总共3 * 10个字节的区域,其中有1111228888重复三次。