目录 上一页 下一页 附录A

-318- PC机汇编语言实战精解

  参数中的"NZ"其实是作为指令"JNZ"的一部分给出的。另一部分"J"在宏的内部。这里要注意字符"&"不可以丢掉。与OPE宏一样,如果把参数做些变化,则这个宏就会被展开其它样子。比如:
  COMPARE AX,BX,LE,NEXT
  展开之后就是:
  cmp   ax,bx
  jle   next
  带参数的宏还有其它一些活用的例子,限于篇幅不再详细讨论了。下面给出了一个宏汇编程序实例,这个程序可以将一个字符串中的大小写字母互相转换,将此程序编译连接之后大家可以自己用DEBUG观察反汇编结果,以研究源程序中应用宏的技巧。
DEMO.ASM
print





comp




code


main




next1:





next2:


next3:

MACRO
mov
mov
int
ENDM

MACRO
cmp
j&pa2
ENDM

segment
assume
org
proc
print

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

目录 上一页 下一页 附录A