系统定义的宏
MASM 6.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中,其具体宏定义如下:
@GetChar |
MACRO 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 |
对于上面的宏定义,程序员完全可以把它修改成其它形式的宏定义。