什么是重复汇编
当我们想生成一系列的相同或相近代码,我们就可以使用重复汇编的方式。
结构:
REPT 整数表达式
重复体
ENDM
其中整数表达式的值为循环次数。
比如我们需要设置一个1-10的bd类型:
X=0
REPT 10
X = X+1
DB X
ENDM
或者我们采取重复汇编将A到Z填入数组table中:
CHAR = ‘A’
TABLE LABEL BYTE
REPT 26
DB CHAR
CHAR = CHAR+1
ENDM
其中的label标签是不会分配地址的,就相当于一个指针。
重复汇编在汇编的过程中
还记得我们的宏吗,宏在汇编的过程中实际上就是一个代码块替换,再加上几个特殊符号,并没有剩下指令数量,只是方便了编程。
同样我们的重复汇编,其实在汇编的过程中是会被展开的,最后代码行数也不会减少。
不定重复汇编
这里的不定不是指循环次数,而是指内容是不定的,比如这个是JZ指令,下一个就要换成JB、JC。
这时我们给出一个新的伪操作:
IRP 形参,<实参表>
重复体
ENDM
举例说明:
IRP REG,<AX,BX,CX,DX>
PUSH REG
ENDM
在实际汇编的过程中,等价于这样:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
还有一个类似的irpc,不过其参数列表限制为字符串。
IRPC X,0123456789
DB X
ENDM
这样就等价于:DB 0,1,2,3,4,5,6,7,8,9
和循环的比较
相比循环,重复汇编在汇编后的代码量其实没有减少。
不过因为不需要循环控制,重复汇编的执行速度会快,而且更加灵活。