关于Masm32中宏循环取参数
关于Masm32中宏循环取参数
;参考http://bbs.csdn.net/topics/300070697
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 将参数列表的顺序翻转
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
reverseArgs macro arglist:VARARG
local txt,count
txt TEXTEQU <> ;定义一个预处理文本变量
count = 0 ;用来保存参数个数
for i,<arglist> ;循环遍历arglist,将每个参数的名字赋给i,与% for i, <reverseArgs(args)>两个for的区别 一个有% 一个没有%
count = count + 1 ;统计参数个数
txt TEXTEQU @CatStr(i,<!,>,<%txt>) ;将每个参数倒过来练成一个文本字符串,最后的结果应该如同:参数2,参数1
;如果arglist是1,2,3则上一句每一步扩展为:
;1, ; 2,1, ; 3,2,1,
;<!,>中可以省略!号即可以直接写为<,>
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1 ;返回上面得到的参数文本字符串(因为3,2,1,最后多了一个,号,所以这里将最后一个,删掉。)
endif
exitm txt
endm
;你可以这样使用reverseArgs宏:
;invoke SortLowToHig,reverseArgs(1,2,3,4,5)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 建立一个类似于 invoke 的 Macro
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_invoke macro _Proc,args:VARARG
local count
count = 0
% for i,< reverseArgs( args ) > ;循环遍历reverseArgs(args)的返回值,将每个返回值循环赋给i
count = count + 1
push i ;将参数压栈
endm
call dword ptr _Proc ;调用函数
endm