发布日期:2015-12-30 14:38 来源: 标签: 编程语言 C教程 C语言宏 C语言宏嵌套
宏定义中允许宏嵌套。即在宏定义中允许使用宏调用,但所调用的宏指令必须预先被定义过。宏定义中还可以包含宏定义,下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
宏定义中允许宏嵌套。即在宏定义中允许使用宏调用,但所调用的宏指令必须预先被定义过。宏定义中还可以包含宏定义。
示例1:给出下面两个宏定义。
    DIF MACRO   X, Y 
    MOV   AX, X
    SUB   AX, Y
    ENDM
    DIFSQR MACRO OPR1, OPR2, RESULT
    PUSH   DX
    PUSH   AX
    DIF   OPR1, OPR2
    IMUL   BX
    MOV   RESULT, AX
    POP   AX
    POP   DX
    ENDM
宏调用:
    DIFSQR VAR1, VAR2, VAR3
宏展开:
    + PUSH   DX
    + PUSH   AX
    + DIF   VAR1, VAR2
    + MOV   AX, VAR1
    + SUB   AX, VAR2
    + IMUL   BX
    + MOV    VAR3, AX
    + POP    AX
    + POP    DX
在宏展开的清单中,DIF VAR1, VAR2语句是为用户阅读方便而提供的,它并不占用存储单元,也就是说,在.OBJ文件中,这一语句是不存在的。
由上面示:1可以看到,在宏定义DIFSQR中对宏指令DIF进行了宏调用,在宏展开遇到宏调用DIF时,可用对DIF定义的宏体语句将其宏展开。
示例2:宏定义中还可包含其他的宏定义。
宏定义:
    DEFYSPRG MACRO CALCU, OPER
    CALCU    MACRO AA, BB, CC
    PUSH   AX
    MOV   AX, AA
    OPER  AX, BB
    MOV   CC, AX
    POP   AX
    ENDM
    ENDM
在DEFYSPRG宏指令的宏体内包含了一个宏定义CALCU,其内层宏定义的宏指令名CALCU又是外层宏定义的形式参数。由于CALCU宏指令的定义包含在DEFYSPRG宏指令的宏体内,若要调用宏指令CALCU时,必须先调用宏指令DEFYSPRG,以便使CALCU宏指令先得到定义。
宏调用:
    DEFYSPRG ADDPRG, ADD
宏展开:
      + ADDPRG MACRO AA, BB, CC
      PUSH AX
      MOV AX, AA
      ADD AX, BB
      MOV CC, AX
      POP AX
      ENDM
从而,得到加法宏指令ADDPRG的宏定义。这样便可用宏调用:
    ADDPRG FIRST, SECOND, SUM
宏展开:
    + PUSH AX
    + MOV AX, FIRST
    + ADD AX, SECOND
    + MOV SUM, AX
    + POP AX
若对宏指令DEFPRG宏定义体中的形式参数CALCU和OPER给出不同的实际参数,便会得到不同的运算宏指令。如宏调用:
    DEFPRG SUBPRG, SUB
可以形成减法的宏定义。而宏调用:
    DEFPRG LOGPRG, AND
又可形成逻辑“与”宏定义等。 

相关评论

专题信息
    C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。