1.INT 21H功能使用说明
①入口:AH = 01H
功能:键盘输入到AL中并显示在显示屏上
②入口:AH = 08H
功能:键盘输入到AL中但不显示在显示屏上
③入口:AH = 02H
功能:写DL中的数据到显示屏上
④入口:AH = 09H,DS:DX = 字符串首地址,字符串以'$'结束
功能:显示字符串,直到遇到'$'结束
⑤入口:AH = 0AH,DS:DX = 缓冲区首地址,(DS:DX) = 缓冲区最大字符数
功能:读键盘输入的字符串到DS:DX指定缓冲区中并以回车结束
2.程序(INT 21H功能调用)
data1 segment ;数据段定义
mes1 db 'This is program of INT21H!','$' ;定义字符串(db:字节类型)
mes2 db 05H,0,0,0,0,0,0,'$' ;05H表示键盘最多输入五个字符,六个0为各个字符对应的值
data1 ends ;数据段定义结束
sstack segment stack ;堆栈段定义
dw 64 dup(?) ;开辟64个字单元空间
sstack ends ;堆栈定义结束
code segment
assume cs:code,ds:data1,ss:sstack ;将代码段的首地址与CS寄存器关联,将数据段的首地址与DS寄存器关联,将堆栈段的首地址与SS寄存器关联
start: ;数据段初始化
;功能①:实现第一次键盘输入不显示,第二次键盘输出显示
mov ah,08H ;为读键盘输入的信息到al寄存器中但不在屏幕上显示做准备
int 21H ;完成读键盘输入到al中无回显操作(键盘输入,但不显示)
mov ah,01H ;为读键盘输入的信息到al中并显示在屏幕上做准备
int 21H ;完成读键盘输入到al中并回显操作(键盘输入并显示到屏幕上)
call enterr ;调用子程序enterr中的指令,将光标移动到下一行
;功能②:自动显示A-D在屏幕上
mov cx,04H ;预设计数值为4
mov dl,41H ;把A的ASCII码写入dl中
aa: mov ah,02H
int 21H ;写dl中的数据到显示屏操作(显示字母A-D)
inc dl ;dl中的数据自增1
loop aa ;判断是否完成了A-D的显示
call enterr ;调用子程序enterr中的指令,将光标移动到下一行
;功能③:显示mes1的内容即“This is program of INT21H!”
mov ax,data1 ;把data1的值传给ax
mov ds,ax ;把ax的内容传给ds,将data1内容与ds关联起来
mov dx,offset mes1;取mes1首地址放到dx中
mov ah,09H
int 21H ;完成显示数据段data1中的字符串(显示mes1字符串)
call enterr ;调用子程序enterr中的指令,将光标移动到下一行
;功能④:从键盘输入最多5个字符并显示在显示屏上
mov dx,offset mes2;把mes2的首地址放到dx
mov ah,0ah
int 21h ;读读键盘输入的字符串到ds(键盘输入不显示,将数据存到mes2)
call enterr ;调用子程序enterr中指令,将光标移动到下一行
mov cl,byte ptr mes2[1] ;将05H送给cl,即将计数值5送到cx中(将cl在当前时刻强制设置为字节类型后,赋值为mes2[1])
mov si,offset mes2[2] ;将键盘输入的数据存储区首地址给si(取mes2[2]的地址放到si中)
a1: mov dl,byte ptr[si] ;将从键盘读到的字符信息传到dl中
mov ah,02H
int 21H ;完成写dl中的数据到显示屏(屏幕显示刚刚存到mes2中的字符串)
inc si ;si数据自增1
loop a1 ;判断是否已经将键盘输入的5个内容显示完毕
mov ax,4c00H ;结束程序,返回DOS
int 21H ;程序终止
enterr: ;子程序enterr指令功能:换行
mov ah,02H ;为写dl中的数据到显示屏做准备
mov dl,0dH ;回车
int 21H ;写dl中的数据到显示屏
mov ah,02H ;为写dl中的数据到显示屏做准备
mov dl,0aH ;换行
int 21H ;实现写dl中的数据到显示屏
ret ;子程序返回指令
code ends ;代码段结束
end start ;程序结束
显示结果