首先, N DUP('...')表示重复()中的内容N次;
DB 是伪指令,表示定义字节变量;
DA1 DB ... 表示定义的字节变量名为DA1;
具体到 04H DUP(3 DUP(2),2 DUP(3)) ,我们可以先解除里面的(),变成:
04H DUP(2,2,2,3,3)然后再变成:
DA1 DB 2,2,2,3,3, 2,2,2,3,3, 2,2,2,3,3, 2,2,2,3,3
所以,其意思是:从名为DA1的字节变量起,依次存放2,2,2,3,3, 2,2,2,3,3, 2,2,2,3,3, 2,2,2,3,3 这20个数。
DA1是这串内存的名字,也是首地址,DB代表类型为BYTE,即8位的,区别于DW,DD,
dup 在汇编中是一条伪指令,用来重复初始化数据
用法举例:
str1 db 10 dup ("!@#") ;这就是十个!@#
这里就是嵌套的DUP,04H就是转化成10进制就是4D,即把第一个DUP后边的内容重复4遍,括号里也是一样,把2重复三遍,把3重复两遍,再把整体重复四遍,最终内存中分配的就是:
0010H
0010H
0010H
0011H
0011H 这五行在内存中重复4遍,DA1指向这段内存的首地址
相当于定义一些数据:
DA1是名称,DB是定义字节,这个语句可以详细解释为:重复4遍 2,2,2,3,3.
即为
DA1 DB 2,2,2,3,3,2,2,2,3,3,2,2,2,3,3,2,2,2,3,3;
DUP(3 DUP (2), 2 DUP (3))这是个DUP的 "嵌套(学过C的都会懂)" 调用。
DUP指令的用法是: count DUP (表达式,表达式,表达式,...)
因此,我们先看最里面3 dup(2),这个应该你能看懂吧,就是把2重覆两次
相应的2 dup(3)你也就懂了吧,
那么,再把最外层的DUP(?,?)里面的参数做为一个数字,你也就能理解了吧。