DUP操作员在哪里保持计数?

时间:2015-05-25 20:46:18

标签: assembly masm masm32

我需要在程序的.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 ({,,})

2 个答案:

答案 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重复三次。

相关问题