zoukankan      html  css  js  c++  java
  • 汇编学习笔记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

  • 相关阅读:
    CodeSmith注册错误的解决方法
    我是“坚守者”还是"背叛者"?
    拿什么留住你,我的程序员
    去除HTML代码得函数
    页面之间传递参数得几种方法
    nhibernate source code analyzed (abstract classes in nhibernate2.0)
    Web 2.0时代RSS的.Net实现
    Visual Studio.net 2003安装提示重启问题
    开放思路,综合考虑,心胸开阔,做一个合格的项目经理
    了解实际开发中 Hashtable 的特性原理 .NET, JAVA, PHP
  • 原文地址:https://www.cnblogs.com/hailong/p/1940561.html
Copyright © 2011-2022 走看看