• 汇编学习笔记44


    第七单,宏

    宏是汇编语言的特征之一,在汇编语言的源程序中,若某程序片断需要多次使用,为了避免重复书写,那么可以把它定义成一条宏指令。

    一、宏指令的定义和使用

    宏指令在使用之前要先定义,宏定义的格式一般如下:

    宏指令名 MACRO [形式参数名]

    ……

    ENDM

    可选的形式参数表由若干参数组成,各形式参数间使用逗号分隔开。

    例如,我们把通过DOS的1号功能调用从键盘读一个字符的程序片断定义成一个宏

    GETTCH MACRO

    MOV AH, 1

    INT 21H

    ENDM

    在定义宏指令后,就可以使用宏指令来表示相应的程序片断。这称为宏调用。

    宏调用的一般格式为:

    宏指令名 [实参数表]

    在对源程序进行汇编时,汇编程序把源程序中的宏指令替换成对应的宏定义休,这称为宏展开或宏扩展。

    二、宏指令的用途

    1. 缩短源代码

    若在源程序中要多次使用到某个程序片断,那么就可以把此程序片断定义为一条宏指令。此后,在需要这个程序片断之处安排一条对应的宏指令就行了。

    由汇编程序在汇编时产生代码,这不仅能有效地缩短代码,而且能够减少编辑汇编语言源程序过程中的错误。

    2. 扩充指令集

    CPU的指令集是确定的,但是利用宏指令能够在汇编语言中形式上对指令集进行扩充。扩充后的指令集是机器指令集和宏指令集的并集。

    这不公能够方便源程序的编写,而且便于阅读和理解源程序。

    3. 某些指令的助词符的意义

    宏指令名可以与指令助词符或伪操作指令名相同。在这种情况下,宏指令的优先级最高,而同名的指令或伪操作就失效了。

    利用宏指令这一特点,可以改变指令助词符的意义。

    三、宏指令中参数的使用

    宏指令可以不带参数,但往往带参数的宏指令更具灵活性。

    1. 指令的参数可以是变量,寄存器和存储单元,也可以是表达式。

    例:

    MOV CL, 4

    SAL AL, CL

    如果多次使用

    SHIFT MACRO

    MOV CL, 4

    SAL, AL, CL

    ENDM

    若每次移位次数不同

    SHIFT MACRO X

    MOV CL, X

    SAL, AL, CL

    ENDM

    引用3个参数

    SHIFT MACRO X, Y, Z

    MOV CL, X

    S&Z Y, CL

    ENDM

    调用如下:

    SHIFT 4, AL, AL

    SHIFT 6, BX, AR

    SHIFT 8, SI, HR

    2. 宏指令的参数可以是操作码

    MANDM MACRO OPR, X, Y

    MOV AX, X

    OPR AX, Y

    MOV X, AX

    ENDM

    调用宏MANDM及其宏扩展如下:

    MANDM MOV, [BX], [SI]

    + MOV AX, [BX]

    + MOV AX, [SI]

    + MOV [BX], AX

    MANDM ADD, [BX], ES: [1234H]

    + MOV AX, [BX]

    + ADD AX, ES: [1234H]

    + MOV [BX], AX

  • 相关阅读:
    MySQL如何把varchar类型字段转换成int类型进行倒叙排序
    MySQL如何使用WITH ROLLUP函数
    MySQL数据库行转列
    SQLserver数据库如何使用SQL语句查看数据库版本
    MySQL数据库如何使用SQL语句查看数据库版本
    js刷新页面
    asp.net core控制器方法返回输出
    asp.net mvc在页面显示HTML字符串
    Convert.ToString()
    三种通信方式 转载
  • 原文地址:https://www.cnblogs.com/hailong/p/1940561.html
Copyright © 2020-2023  润新知