bsp; (重复块)
ENDM
其中表达式的值用来确定重复块的重复次数,表达式中如包含外部或未定义的项则汇编指示出错.
重复伪操作并不一定要在宏定义体内,例如:
X=0
REPT 10
X=X+1
DB X
ENDM
则汇编后产生
+ DB 1
+ DB 2
+ DB 3
+ DB 10
把字符A到Z的ASCII码填入数组TABLE
CHAR=''A''
TABLE LABEL BYTE
REPT 26
DB CHAR
CHAR=CHAR+1
ENDM
用宏定义及重复伪操作把TAB,TAB+1,TAB+2,,TAB+16的内容存入堆栈.
宏定义:
PUSH_TAB MACRO K
PUSH TAB+K
ENDM
宏调用:
I=0
REPT 17
PUSH_TAB % I
I=I+1
ENDM
要求建立一个100D字的数组,其中每个字的内容是下一个字的地址,而最后一个字的内容是第一个字的地址.
ARRAY LABEL WORD
REPT 99
DW content2
ENDM
DW ARRAY
2.不定重复伪操作
(1)IRP伪操作
格式是:
IRP dummy,<argument list>
(重复块)
ENDM
汇编
程序把重复块的代码重复几次,每次重复把重复块中的哑元用自变量表中的一项来取代,下一次取代下一项,重复次数由自变量表中的自变量个数来确定.自变量表必须用尖括号括起,它可以是常数,符号,字符串等.
例1:
IRP X,<1,2,3,4,5,6,7,8,9,10>
DB X
ENDM
汇编后得:
+ DB 1
+ DB 2
+ DB 10
例2:
IRP REG,<AX,BX,CX,DX>
PUSH REG
ENDM
汇编后得:
+ PUSH AX
+ PUSH B