宏汇编有专门的介绍书本,这里介绍宏的通用特性,(宏的高级特性总结)

原创 2007年09月29日 18:25:00
 TITLE  宏汇编有专门的介绍书本,这里介绍宏的通用特性,(宏的高级特性总结)
INCLUDE irvine32.inc
mWrite  macro text
   ifb <text>               ;;如果参数为空则进入里面;ifb宏编译条件语句的参数要放在<>里面
     echo 错误,您的参数为空
     exitm                  ;;结束展开下面的宏
   endif
   push edx
   mov edx,offset text
   call writestring
   pop edx
endm
mGoto macro x:req,y:req
   local error              ;;在这里定义一个标号常量.注意它的用法
   error=0                  ;;注意error的用法
   if (x lt 0) or (x gt 25 );;这里注意if语句不需要使用<>来括住.注意它的用法 x不在在0~25之间,则
      echo 错误,x不在0~25之间;;在这里显示的x会自动被替换成调用x的值.
      error=1               ;;注意error的用法
   endif
   if (y lt 0) or (y gt 25)
      echo 错误,y不在0~25之间;;在这里显示的y会自动被替换成调用y的值.
      error=error+1         ;;注意error的用法
   endif
   if (error gt 0)          ;;注意error的用法
      exitm
   endif
   push edx
   mov dh,y
   mov dl,x
   call Gotoxy
   pop edx
endm
mReadString macro buff:req,maxCount:req
   ifidn <maxCount>,<edx>   ;;ifidn不区分大小写参数相同则编译.参数用<>括住
      echo 错误,maxCount这个参数不能是edx
      exitm
   endif
   push edx
   push ecx
   mov edx,buff
   mov ecx,maxCount
   call ReadString
   pop ecx
   pop edx
endm
mWriteReg macro regs
   local string
   .data
   string byte "&regs=",0   ;;这里就是使用&   符号&将宏的内部对宏参数的引用替换为调用时的实际值.编译器就不会把它当作字符来处理掉
   .code
   push edx
   push eax
   mov edx,offset string
   call writestring
   mov eax,regs             ;;这里注意用法,因为regs传进来的是一个寄存器
   call writeHex
   pop eax
   pop edx
endm
mWriteText macro text
   ifnb<text>
      Leng textequ %(sizeof text)    ;;%对表达式求值.首先计算出text的值
      Line textequ %(@Line)          ;;@Line汇编操作符,用于返回当前源码的行号
      %echo 字符长度是Leng  行号是Line;;%在行首,表示展开该行所有文本宏或宏函数
   endif
endm
mReadLar macro text
   local string
   .data
   string byte text                ;;这里在定义的时候没有插入空字符
   .code
   push edx
   mov edx,offset string
   call writestring
   pop edx
endm
mAllF macro message
   mReadLar "&message"             ;;注意这里的用法.接收进来的参数再&替换给mReadLar调用
endm
mFunc macro system                ;;宏函数和普通的宏一样,区别是宏函数要返回一个值
   ifdef system
      exitm<-1>                  ;;返回-1
   else
      exitm<0>
   endif
endm
mFunction macro system
   if mFunc(system)               ;;为0为真.在这里调用宏函数的方法是:宏名字 (参数) 宏函数再返回值给if比较
     echo 0 system已经定义了
   else
     echo -1 system未定义
   endif
endm
.data
   var1 byte "abcdeee",13,10,0
   var2 byte 10 dup(0)
.code
main PROC
   mWrite                   ;;这里在编译时会提示错误参数为空,而宏相应的也不会展开下面的操作
   mGoto 11,11              ;;这里则是正常的把光标定位于11.11
   mGoto 33,55              ;;这里调用时会使上面的echo相应的x和y变成其值
   mReadString offset var1,lengthof var2
   mWriteReg eax
   mWriteText var1          ;;在编译的时候注意看值是多少
   mReadLar <"显示字符" , 0dh , 0ah>;;这里的<>符号是将多个字符当作一组字符传送,不然编译器会把期当作3个参数
   Shar Textequ <warning: y-coord if !> 24>  ;;注意前面的!用法.在汇编里面>是转义字符!强制它作为字符符号
   mAllF %Shar                               ;;这里也要使用%展开操作.
   mAllF Shar                                ;;这里没有用%展开也就直接在屏幕上打印2个Shar
   system=1              
   mFunction system  ;调用宏函数,如果上面的system=1去掉,则在编译时宏函数会返回为system未定义
                     ;还有一点可以去掉system=1在编译的时候用ml -c -d system=1 1.asm 这样也会提示这个参数据被定义了
   exit
main ENDP
END main
;到这里已经完了。宏用的到基本都在上面使用过了。请认真看注解

通用属性配置文件(GATT)及其服务,特性与属性介绍

声明:本文转载自http://blog.chinaunix.net/uid-21411227-id-5750680.html 1. 角色        除了GAP定义了角色之外,BLE还定...

AT&T学习笔记汇编之高级特性

高级特性: SIMD    single instruction multiple  data 单指令多数据 SIMD扩展  Streaming SIMD Extension    (S...

Spring高级程序设计 4 spring 进阶(介绍了大量的Spring特性和对控制反转的补充)(笔记)

1Spring对应用程序可移植性的影响  不要凭空杜撰对可移植性的需求。在许多情况下,终端用户并不关心你的应用程序是否能在3个不同的控制反转容器上运行,而只要求他能稳定运行。  2管理...

Chart FX 7 提供给开发者高级图表特性控件下载及详细介绍

Chart FX 7 提供给开发者高级图表特性,只需要很少的集成工作。图表向导、教程、例子资源和一个程序员向导将帮助你创建视觉效果优秀的数据可视化解决方案,而只需一点点时间的投入。超过20种不同的图表...

spring的基本配置和bean高级特性的介绍

一、spring的手动配置  老规矩了分为两步,导jar包和配置文件  1.导入的jar包 2.配置xml文件(applicationContext.xml)    配置文件中注入依赖方式...

Java高级特性之反射学习总结

java反射

【学习总结】java高级特性之String、StringBuffer、StringBuilder

1.String:java中字符串值属于String类,java编译器把字符串值作为String对象;但String对象一旦创建就不能改变,如果需要进行大量的字符串操作,应该使用StringBuffe...
  • heccmm
  • heccmm
  • 2016年12月21日 12:35
  • 145

JDBC第五章知识点总结——JDBC高级特性3--JNDI,连接池,分布式事务

JDBC第五章知识点总结——JDBC高级特性3--JNDI,连接池,分布式事务 知识点预览   JAVA命名和目录接口(JNDI) 连接池 分布式事务...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:宏汇编有专门的介绍书本,这里介绍宏的通用特性,(宏的高级特性总结)
举报原因:
原因补充:

(最多只允许输入30个字)