什么`dup(?)`在TASM中意味着什么?

时间:2013-04-11 18:28:43

标签: assembly x86 tasm

我这里有这段代码,但我不熟悉语法。

STACK16_SIZE    =       100h
stack16         db      STACK16_SIZE dup (?)

我认为dup意味着我们声明一个类型为array的变量,因为这是一个堆栈,但我不确定。那么dup在TASM中意味着什么呢?

2 个答案:

答案 0 :(得分:19)

STACK16_SIZE dup (?)表示按STACK16_SIZE次复制括号中的数据。这相当于写?, ?, ?, ?, ...(100h次)

parens中的数据是“未初始化的数据”。也就是说,内存已分配,但未在加载时设置为任何特定值。

程序集不提供数组“类型”。如果是,则仅在检查数据时使用调试器。但是,在此代码段中,stack16是一个带有地址开头的字节存储块的符号 - 这是违反直觉的,可能是一个微妙的bug的来源。对于CPU堆栈,它实际上应该定义为16位字(dw)或32位字(dd)。

答案 1 :(得分:7)

?表示没有特定价值,未初始化。 DUP表示重复。

所以你得到100h未经初始化的字节。