• 汇编学习笔记46


    6. 与宏有关的伪指令

    (1) 局部变量说明伪指令  LOCAL

    伪指令LOCAL的一般格式如下:

    LOCAL 标号表

    标号表由标号构成,标号间用逗号分隔开

    汇编程序在每次展开宏时,总把由LOCAL伪指令说明的标号用唯一的符号(??0000~??0001)代替,从而避免标号重复定义错误

    HTOASM MACRO

    LOCAL ISDECM

    AND AL, 0FH

    CMP AL, 9

    JBE ISDECM

    ADD AL, 7

    ISDECM : ADD AL, 30H

    ENDM

    如果在程序中有以下宏调用

    HTOASM

    HTOASM

    得到汇展开

    + ADN AL, 0FH

    + CMP AL, 9

    + JBE ??0000

    + AND AL, 7

    + ??0000 : ADD AL, 30H

    + AND AL, 0FH

    + CMP AL, 9

    + JBE ??0001

    + AND AL, 7

    + ??0001: ADD AL, 30H

    例: 如果一个数是负数,求出对应正数

    ABSOL MACRO OPER

    LOCAL NEXT

    CMP OPER 0

    JGE NEXT

    NEG OPER

    NEXT: ENDM

    宏调用与展开:

    ABSOL VAR

    + CMP VAR, 0

    + JGE ??0000

    + NEG VAR

    + ??0000 :

    ABSOL BX

    + CMP BX, 0

    + JGE ??0001

    + NEG BX

    + ??0001:

    (2) 清除宏定义的伪指令 PURGE

    伪指令PURGE的作用是告诉汇编程序取消某些宏指令。其格式为

    PURGE 宏名表

    (3) 中止宏扩展的伪指令  EXITM

    伪指令EXITM通知汇编程序结束当前宏调用的扩展,一般格式为EXITM

    当遇到伪指令EXITM时,汇编程序立即退出宏, 在宏中剩下的语句不被扩展。如果在一些嵌套宏中遇到EXITM, 则退出到外部宏

    伪指令EXITM通常与条件伪指令一起使用,以便在规定的条件下跳过宏的最后语句

    7. 宏定义的嵌套

    宏定义的嵌套有两种情况,一种是宏定义体中含宏调用, 一种是宏定义体中含宏定义

    (1) 宏定义体中含宏调用

    宏汇编语言允许在宏定义体中使用宏调用。限制条件是必须先定义后调用。

    例:

    WHTOASC MACRO

    MOV AH, AL

    SHR AL, 1

    SHR AL, 1

    SHR AL, 1

    SHR AL, 1

    HTOASC

    XCHG AH, AL

    HTOASC

    ENDM

    HTOASC MACRO

    AND AL, 0FH

    ADD AL, 90H

    DAA

    ADC AL, 40H

    DAA

    ENDM

    如果在程序中调用上述宏, 可以得到宏扩展

    + MOV AH, AL

    + SHR AL, 1

    + SHR AL, 1

    + SHR AL, 1

    + SHR AL, 1

    ++ AND AL, 0FH

    ++ ADD AL, 90H

    ++ DAA

    ++ ADC AL, 40H

    ++ DAA

    + XCHG AH, AL

    ++ AND AL, 0FH

    ++ ADD AL, 90H

    ++ DAA

    ++ ADC AL, 40H

    ++ DAA

    (2) 宏定义体中含有宏定义

    宏定义体中可以含有宏定义。但只有在调用了外层的宏后,才能调用内层的宏

    例:

    DEFMAC MACRO MACNAME, OPER

    MACNAME MACRO X, Y, Z

      PUSH AX

      MOV AX, X

      OPER AX, Y

      MOV Z, AX

      POP AX

    ENDM

    ENDM

    宏调用:

    DEFMAC ADDITION, ADD

    + ADDICTION MACRO X, Y, Z

    + PUSH AX

    + MOV AX, X

    + ADD AX, Y

    + MOV Z, AX

    + POP AX

    在调用DEFMAC后,可以调用宏ADDITION

  • 相关阅读:
    Oracle 单引号与双引号的区别
    oracle 生成随机数
    oracle 表空间及查看所有用户的表空间
    字节和字符的区别
    java io
    Oracle 基础
    gvim 常用键
    Python之struct
    Python之MySQLdb
    Python之sqlite3
  • 原文地址:https://www.cnblogs.com/hailong/p/1941851.html
Copyright © 2020-2023  润新知