我这里有这段代码,但我不熟悉语法。
STACK16_SIZE = 100h
stack16 db STACK16_SIZE dup (?)
我认为dup
意味着我们声明一个类型为array的变量,因为这是一个堆栈,但我不确定。那么dup
在TASM中意味着什么呢?
答案 0 :(得分:19)
STACK16_SIZE dup (?)
表示按STACK16_SIZE
次复制括号中的数据。这相当于写?, ?, ?, ?,
...(100h次)
parens中的数据是“未初始化的数据”。也就是说,内存已分配,但未在加载时设置为任何特定值。
程序集不提供数组“类型”。如果是,则仅在检查数据时使用调试器。但是,在此代码段中,stack16
是一个带有地址开头的字节存储块的符号 - 这是违反直觉的,可能是一个微妙的bug的来源。对于CPU堆栈,它实际上应该定义为16位字(dw
)或32位字(dd
)。
答案 1 :(得分:7)
?
表示没有特定价值,未初始化。 DUP
表示重复。
所以你得到100h未经初始化的字节。