汇编网首页登录博客注册
chinatree的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2012-02-19 22:05] 罗云彬的invoke宏

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 3rd Edition>
; by 罗云彬
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 将参数列表的顺序翻转
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
reverseArgs        macro        arglist:VARARG
                local        txt,count ;局部变量
    
        txt        TEXTEQU        <>;将TXT        变量当作文本变量清空
        count        = 0;初始化
        for        i,<arglist>;宏的FOR循环,我认为,VARARG类型的参数编译器只是简单的把所有参数作为一个字符串,每个参数以","为分界(参数内容并不包括","),
                count        = count + 1;计数器自加
                txt        TEXTEQU @CatStr(i,<!,>,<%txt>);@CATSTR是MASM的宏函数,字符串拼接,做左值返回一个新字符串(I+","+TXT),这样,顺序就反过来了.
        endm;循环结束
        if        count GT 0;如果有参数,将最后一个","给去掉,SUBSTR是字符串截取
                txt        SUBSTR  txt,1,@SizeStr(%txt)-1;@SIZESTR同@CATSTR
        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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
评论次数(2)  |  浏览次数(796)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2012-02-19 22:41  ]

好乱的格式!

[  chinatree   发表于  2012-02-20 06:42  ]

乱?缩进有的,我手机复制就乱了点。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码