dup是一个操作符,在汇编语言中同db, dw, dd等一样,也是由编译器识别处理的符号。它是和db. dw. dd等数据定义伪指令配合使用的,用来进行数据的重复。比如:
db 3 dup(0)
定义了3个字节,它们的值都是0,相当于db 0,0,0
db 3 dup(0;1;2)
定义了9个字节,它们是o,1,2,0,1,2, 0,1,2,相当于db 0,1,2,0,1,2,0,1,2
db d dup ('adb','ABC')
定义了18个字节,它们是,abcABCabcABCabcABC',相当于db'abcABCabcABCabcABC'
可见,dup的使用格式如下:
db重复的次数dup(重复的字节型数据) dw重复的次数dup(重复的字型数据) dd重复的次数dup(重复的双字型数据)
dup是一个十分有用的操作符,比如要定义一个容量为200个字节的栈段,如果不用dup,则必须:
stack segment dw 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0 dw 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0 dw 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0 dw 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0 dw 0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0 stack ends
当然,你可以用dd,使程序变得简短一些,但是如果要求定义一个容量为1000字节或10000字节的呢?如果没有dup,定义部分的程序就变得太长了,有了dup就可以轻松解决。如下
stack segment db 200 dup(0) stack ends