在MASM中使用DUP混合字节和单词

时间:2017-11-28 09:40:54

标签: assembly masm x86-16

我在旧的DOS机器上使用MASM 5.10。

我在内存中有以下表格:

                            ;sprPropTab is the sprite property table.
                            ;It is a table that holds the properties
                            ;of each present sprite.

                            ;NPC sprite properties are initialized
                            ;when the current area is built from data files.

 sprPropTab db 0            ;player is always type 0
            dw 0,0          ;player sprite's current X/Y coord
            dw 0a000h       ;player sprite's flag
            db ?            ;first npc sprite's type
            dw ?,?          ;first npc sprite's X/Y coord
            dw ?            ;first npc sprite's flag
            db ?          
            dw ?,?   
            dw ?  
            db ?          
            dw ?,?   
            dw ?  
            db ?          
            dw ?,?   
            dw ? 
            db ?          
            dw ?,?   
            dw ? 
            db ?          
            dw ?,?   
            dw ? 
            db ?          
            dw ?,?   
            dw ?  

我想将sprPropTab从8个条目增加到32个条目。我希望能够使用DUP(或任何其他方法)定义NPC精灵属性部分 减少所需的行数。

执行此操作的一种方法是将精灵类型定义为单词,而不是字节。

sprPropTab dw 0                ;player is always type 0
           dw 0,0              ;player sprite's current X/Y coord
           dw 0a000h           ;player sprite's flag
           dw 31 dup (?,?,?,?) ;NPC sprite's properties   

但是,精灵类型的范围只有0到32的值,所以我最终会浪费32个字节。我能做到的另一种方法是将整个表定义为字节。

NPCSiz     equ 31*7           ;The size of the NPC portion of the 
                              ;sprite property table in bytes.

sprPropTab db  0              ;player is always type 0
           db  0,0,0,0        ;player sprite's current X/Y coord
           db  0,0a0h         ;player sprite's flag
           db  NPCSiz dup (?) ;NPC sprite's properties    

问题是我每次想要访问精灵的标志字,X坐标或Y坐标时都需要添加额外的XCHG指令。 (或者编写更复杂的代码来初始化具有少量字节序的单词。)

是否有语法使用DUP定义表而不改变其元素的大小?

0 个答案:

没有答案