我们把例7.14的宏定义部分建成宏库MACRO . MAC,如下程序所示;而把例7.14的程序编码部分,加上INCLUDE语句构成新程序,如g7_5所示。其中INCLUDE语句在程序的最前面。需要指出的是,该语句可以不放在程序的最前面,但它必须放在所有的宏调用之前。g7_6为该程序的LST清单,可见汇编程序已将宏库中的宏定义都包含在此程序中了,并且完成了宏展开任务。
        
  ;宏定义库--macro.mac
    ;--------------------------------------------------------------
      initz   macro     ;宏定义开始
      mov    ax,@data    ;初始化段寄存器
      mov    ds,ax ;
      mov    es,ax
      endm           ;宏定义结束
    ;
      prompt   macro messge ;宏定义开始

    ; 本宏定义功能是显示某一条信息
    ;;产生用于返回DOS的代码
      mov    ah,09h     ;ah中的功能号9表示要显示一串字符
      lea    dx,messge   ;dx存放要显示的字符串首地址
      int    21h      ;调用DOS
      endm    ;宏定义结束
    ;
    finish   macro       ;宏定义开始
          mov   ax,4c00h ;ah中的功能号4ch表示要返回DOS,al中的00表示无错
          int   21h
       endm           ;宏定义结束
    ;----------------------------------------------------------------

 ;使用宏定义--g7_5
    ;----------------------------------------------------------------
    include macro.mac
    ;----------------------------------------------------------------
    .model small
    .386
    .stack 200h         ;定义堆栈段
    .data            ;定义数据段
    messg1   db 'Customer name?',13,10,'$'
    messg2   db 'Customer address?',13,10,'$'
    ;-----------------------------------------------------------------
    .code            ;定义代码段
    begin    proc   far
    initz
    prompt   messg1
    prompt   messg2
    finish
    begin    endp
    ;------------------------------------------------------------
    end begin

 ;使用宏定义--g7_6
   ;--------------------------------------------------------------
    include   macro.mac
   C ; 宏定义库--macro.mac

   C ;------------------------------------------------------------
   C  initz macro    ; 宏定义开始
   C  mov ax,@data    ; 初始化段寄存器
   C  mov    ds,ax ;
   C  mov    es,ax
   C  endm        ; 宏定义结束
   C ;
   C prompt macro messge ; 宏定义开始
   C ; 本宏定义功能是显示某一条信息
   C ;;产生用于返回DOS的代码
   C  mov    ah,09h ; ah中的功能号9表示要显示一串字符
   C  lea    dx,messge ; dx存放要显示的字符串首地址
   C  int    21h   ; 调用DOS
   C  endm        ; 宏定义结束
   C ;
   C  finish macro  ; 宏定义开始
   C  mov   ax,4c00h ; ah中的功能号4ch表示要返回DOS,al中的00表示无错
   C  int    21h
   C  endm    ; 宏定义结束
   C ;----------------------------------------------------------
   .  model   small
   .386
   0200 .stack  200h   ;定义堆栈段
   0000 .data       ;定义数据段
   0000 43 75 73 74 6F 6D 65 messg1 db 'Customer name?',13,10,'$'
   72 20 6E 61 6D 65 3F
   0D 0A 24
   0011 43 75 73 74 6F 6D 65 messg2 db 'Customer address?',13,10,'$'
   72 20 61 64 64 72 65
   73 73 3F 0D 0A 24
   ;--------------------------------------------------------------
   0000  .code      ;定义代码段
   0000  begin proc far
   initz
   0000  B8 ---- R 1  mov ax,@data  ;初始化段寄存器
   0003  8E D8 1    mov ds,ax ;
   0005  8E C0 1    mov es,ax
   prompt messg1
   0007  B4 09 1    mov ah,09h   ; ah中的功能号9表示要显示一串字符
   0009  8D 16 0000 R 1 lea dx,messg1 ; dx存放要显示的字符串首地址
   000D  CD 21 1     int 21h    ; 调用DOS
   prompt messg2
   000F  B4 09 1     mov ah,09h   ; ah中的功能号9表示要显示一串字符
   0011  8D 16 0011 R 1 lea dx,messg2 ; dx存放要显示的字符串首地址
   0015  CD 21 1     int 21h    ; 调用DOS
   finish
   0017 B8 4C00 1     mov ax,4c00h ; ah中的功能号4ch表示要返回DOS,al中的00表示无错
   001A CD 21 1       int 21h
   001C           begin endp
   ;-----------------------------------------------------------------
   001C           end  begin