汇编学习笔记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
轉載于:https://www.cnblogs.com/hailong/archive/2011/01/23/1942322.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 施密特出售Google股票套现3.27亿
- 下一篇: 打孔怎么定位_电视机挂架怎么安装