-318- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
参数中的"NZ"其实是作为指令"JNZ"的一部分给出的。另一部分"J"在宏的内部。这里要注意字符"&"不可以丢掉。与OPE宏一样,如果把参数做些变化,则这个宏就会被展开其它样子。比如: COMPARE AX,BX,LE,NEXT 展开之后就是: cmp ax,bx jle next 带参数的宏还有其它一些活用的例子,限于篇幅不再详细讨论了。下面给出了一个宏汇编程序实例,这个程序可以将一个字符串中的大小写字母互相转换,将此程序编译连接之后大家可以自己用DEBUG观察反汇编结果,以研究源程序中应用宏的技巧。 |
|||||||||||||||||||||
DEMO.ASM comp code main next1: next2: next3: |
MACRO mov mov int ENDM MACRO cmp j&pa2 ENDM segment assume org proc mov mov lodsb comp comp xor stosb jmp |
p1 dx,offset p1 ah,09 21h pa1,pa2,pa3 al,pa1 next&pa3 cs:code,ds:code 100h near msg si,offset msg di,si 24h,z,3 20h,le,2 al,20h next1 |
;输出字符串的宏 ;用于进行数据比较的宏 ;将参数PA1与AL寄存器中的数据比较 ;根据PA2给出的条件及PA3给出的部分 ;目的地址进行转移 ;输出转换前的字符串MSG ;SI、DI寄存器指向字符串 ;取得一个字符 ;将其与'$'进行比较,若相等转NEXT3 ;将其与空格相比较,若小于或等于空格符 ;转NEXT2 ;将大小写字母互换 ;将转换后的字符存回字符串 ;转NEXT1继续 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |