在编写源程序时,有时会出现连续相同或相似的语句(组)。当出现这种情况时,可利用重复伪指令来重复语句,从而达到简化程序的目的。
重复汇编伪指令所定义的重复块是宏的一种特殊形式,也是由伪指令ENDM来结束重复块。用重复汇编伪指令定义的重复块也可带有参数,并在汇编过程中参数被实参代替,但重复块不会被命名,不能在程序的其它地方引用。
9.4.1 伪指令REPT伪指令REPT的作用是把一组语句重复指定的次数,该重复次数由伪指令后面的数值表达式来确定。其一般使用格式如下:[table][tr][td=1,3][/td][td=1,3]REPT[/td][td]数值表达式[/td][/tr][tr][td]重复的语句组[/td][/tr][tr][td]ENDM[/td][/tr][/table]
例9.8 定义100个初值为32的字节单元,该存储单元的起始符号地址为Table。
方法2:用重复操作符DUP来实现
Table DB 100 DUP(32)
从上例来看,用伪指令REPT重复定义的存储单元可以用重复操作符DUP来代替,其实前者的功能会更灵活、更强大。
例9.9 定义100个初值分别为1,2,…,100的字节单元,该存储单元的起始符号地址为Table。
上面定义了100个字节,其初值为1,2,…,100。本例好象不能用重复操作符DUP来说明字节存储单元。
例9.10 计算1+2+…+1000,并把其值存入寄存器AX。
由例9.10,不难看出:伪指令REPT与循环指令起作用的时期和方式是截然不同的。它们之间的主要差异如表9.1所列。
表9.1 伪指令REPT与循环指令LOOP之间的主要差异