经典汇编语言教程:9.6 宏的扩展——系统定义的宏

9.6 宏的扩展——系统定义的宏

MASM6.11系统定义了大量的标准宏,程序员能很方便地使用它们。在使用这些系统宏之前,要象C语言那样用伪指令INCLUDE把有关“宏库”文件包含在用户的源程序中。主要的系统宏库文件有:DOS.INC和BIOS.INC,它们存放在系统的include子目录中。

例9.18:使用系统宏定义,编写从键盘上读取一个字符。

解:

include dos.inc ;把系统宏定义文件包含在源程序之中
……
@getchar 1, 1 ;引用系统宏定义
……

下面是系统宏@getchar的使用参数描述和定义,其它系统宏的有关信息请参阅相关的宏定义文件。

1、系统宏@GetChar的使用说明

宏的功能:从键盘读字符
使用语法:@GetChar  [echo] [,[break] [,clearbuf]]
参数说明:<echo>;常量,非零表示“回显”,缺省值为“回显”
<break>;常量,非零表示接受“^C”,缺省值为“接受”
<clearbuf>;常量,非零表示清键盘缓冲区,缺省值为“不清”
返回参数:AL=ASCII码
内容破坏:AX,DL(若回显,且不接受^C)
参见内容:INT 21h — 01h、07h、08h和0Ch,@GetStr

2、系统宏@GetChar的定义

该宏定义在宏库文件dos.inc中,其具体宏定义如下:

@GetCharMACRO ech:=<1>, cc:=<1>, clear:=<0>
LOCAL funct, disp
disp = 1
IF ech

IF cc

funct = 01h ;使用功能1

ELSE

funct = 07h ;使用功能7
disp = 02h ;设置需要回显标志

ENDIF

ELSE

IF cc

funct = 08h ;使用功能8

ELSE

funct = 07h ;使用功能7

ENDIF

ENDIF
IFE clear

mov ah, funct ;置功能号

ELSE

mov ah, 0Ch ;先清输入缓冲区,再接受键盘输入
mov al, funct

ENDIF
Int 21h ;调用DOS功能中断
IF disp EQ 02h ;检查是否需要回显

mov dl, al
mov ah, 02h
int 21h

ENDIF
ENDM

对于上面的宏定义,程序员完全可以把它修改成其它形式的宏定义。

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号