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

    技术2022-05-11  52

    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 "®s=",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汇编操作符,用于返回当前源码的行号      
    转载请注明原文地址: https://ibbs.8miu.com/read-19876.html

    最新回复(0)