我在旧的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定义表而不改变其元素的大小?