汇编学习笔记47

三、 重复汇编

有时程序会连续地重复完成相同或几乎相同的一组语句,当出现这种情况时,可考虑用重复伪指令定义的重复块,以简化源程序。

重复块是允许建立重复语句的宏的一种特殊形式,它们与宏的不同之处在于它们没有被命名,并因而不能被调用。

1. 伪指令 REPT

伪指令REPT用于创建重复块,重复块的重复次数由一个数值表达式的值给定。一般格式如下:

REPT 数值表达式

需重复的语句组

ENDM

宏汇编程序把“需要重复的语句组”连续地重复汇编由表达式所决定的次数。

例1:

CHAR = 'A'

TABLE LABEL BYTE

REPET 26

DB CHAR

CHAR=CHAR+1

ENDM

汇编为:

+ TABLE LABEL BYTE

+ DB 'A'

+ DB 'A'+1

+ …

+ DB 'A'+24

+ DB 'A'+25

例2:

要求建立一个100D字的数组,其中每个字的内容是下一个字的地址,而最后一个字的内容是第一个字的地址

ARRAY LABEL WORD

REPET 99

DW $+2

ENDM

DW ARRAY

汇编后:

+ ARRAY ABBEL WORD

+ DW $+2

+ DW $+2

+ …

+ DW $+2

+ DW ARRAY

2. 伪指令IRP

伪指令IRP用于创建重复块。重复次数和每次重复使用的实参由参数列表决定。一般格式如下:

IRP 形式参数, <实参1, 实参2, ……, 实参n>

需重复的语句

ENDM

其中实参的个数决定了重复的次数

例3:

下面重复块实现把0~9的平方存入数值QUART中

QUART LABEL BYTE

IRP X, <0, 1, 2, 3, 4, 5, 6, 7, 8, 9>

DB X*X

ENDM

例4:

下面的重复块实现了把若干寄存器压入堆栈

IRP REG, <AX, BX, CX, DX>

PUSH REG

ENDM

+ PUSH AX

+ PUSH BX

+ PUSH CX

+ PUSH DX

3. 伪指令 IRPC

伪指令IRPC和IRP相似, 但实参列表是一个字符串,一般格式如下:

IRPC 形式参数 字符串

需要重复的语句组

ENDM

字符串的长度规定了重复的次数,如果字符串包含了空格, 逗号等分隔符, 那么字符串需用一对尖括号括起来。

例5:

TABLE LABEL BYTE

IRPC X, 0123456789

DW (X+1)*2

ENDM

例6:

下面重复语句块实现把AX, BX, CX, DX四个寄存器依次压入堆栈

IRPC REG, ABCD

PUSH REG&X

ENDM

posted @ 2011-01-23 10:09  杨海龙  阅读(382)  评论(0编辑  收藏  举报