当前位置: 代码迷 >> 汇编语言 >> 罗云彬的13章代码关于宏汇编的部分解决方案
  详细解决方案

罗云彬的13章代码关于宏汇编的部分解决方案

热度:547   发布时间:2013-02-26 00:00:00.0
罗云彬的13章代码关于宏汇编的部分
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 将参数列表的顺序翻转
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
reverseArgs macro arglist:VARARG
local txt,count
   
txt TEXTEQU <>
count = 0
for i,<arglist>
count = count + 1
txt TEXTEQU @CatStr(i,<!,>,<%txt>)
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1
endif
exitm txt
endm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 建立一个类似于 invoke 的 Macro
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_invoke macro _Proc,args:VARARG
local count
   
count = 0
% for i,< reverseArgs( args ) >
count = count + 1
push i
endm
call dword ptr _Proc  
   
endm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

请教一个问题啊,为什么第一个for前面没 % ,而第二个for却加了 % ?我就这一处想不明白,查了好多资料也没查到,还请大家帮我想想,谢谢了!

------解决方案--------------------------------------------------------
%放在行首是展开操作符,他用来展开该行发现的所有文本宏和宏函数。

% for i,< reverseArgs( args ) >

这意味着如果args是一个文本宏,则展开后的值被reverseArgs操作!
  相关解决方案