关于Masm32中宏循环取参数

发布时间:2013年11月20日 作者:未知 查看次数:1873

关于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

 



版权所有!www.sieye.cn
E.Mail:sieye@sohu.com QQ:66697110