有時(shí)匯編語(yǔ)言程序需要連續(xù)地重復(fù)完全相同的或者幾乎完全相同的一組代碼,這時(shí)可使用重復(fù)匯編。
1 重復(fù)偽操作
其格式為 :
rept 表達(dá)式
... ( 重復(fù)塊 )
endm
其中表達(dá)式的值用來(lái)確定重復(fù)塊的重復(fù)次數(shù) , 表達(dá)式中如包含外部或未定義的項(xiàng)則匯編指示出錯(cuò),重復(fù)匯編指在匯編過(guò)程中,重復(fù)展開(kāi)一段(基本)相同的語(yǔ)句,重復(fù)匯編沒(méi)有名字,不能被調(diào)用,重復(fù)匯編常用在宏定義體中,也可以在一般匯編語(yǔ)句中使用
重復(fù)偽操作并不一定要在宏定義體內(nèi)。
例如 :
x=0
rept 10
x=x+1
db x
endm
則匯編后產(chǎn)生
1 db 1
1 db 2
1 db 3
...
1 db 10
例:
把字符 a 到 z 的 ascii 碼填入數(shù)組 table
char=‘a(chǎn)
table label byte
rept 26
db char
char=char+1
endm
例: 用宏定義及重復(fù)偽操作把 tab, tab+ 1, tab+2 ,...,tab+16 的內(nèi)容存入堆棧 . 2. 不定重復(fù)偽操作
(1)irp 偽操作
格式是 :
irp 形參 ,< 自變量表 >
... ( 重復(fù)塊 )
endm
匯編程序把重復(fù)塊的代碼重復(fù)幾次 , 每次重復(fù)把重復(fù)塊中的形參用自變量表中的一項(xiàng)來(lái)取代,下一次取代下一項(xiàng) , 重復(fù)次數(shù)由自變量表中的自變量個(gè)數(shù)來(lái)確定。自變量表必須用尖括號(hào)括起 , 它可以是常數(shù),符號(hào),字符串等,不一定要定義在宏定義內(nèi)。
例 :
irp x,<1,2,3,4,5,6,7,8,9,10>
db x
endm
匯編后得 :
1 db 1
1 db 2
...
1 db 10
例 :
irp reg,<ax,bx,cx,dx>
push reg
endm
匯編后得 :
1 push ax
1 push bx
1 push cx
1 push dx
(2)irpc 偽操作
格式是 :
irpc 形參 , 字符串 ( 或 < 字符串 >)
... ( 重復(fù)塊 )
endm
irpc 和 irp 類似 , 但自變量表必須是字符串 . 重復(fù)次數(shù)由字符串中的字符個(gè)數(shù)確定 , 每次重復(fù)用字符串中的下一個(gè)字符取代重復(fù)塊中的形參 .
例 :
irpc x,0 1 2 3 4 5 6 7
db x+1
endm
匯編后得 :
1 db 1
1 db 2
...
1 db 8
例 :
irpc k,a b c d
push k&x endm