【微机汇编语言学习笔记(二)】 键盘输入显示(INT 21H功能调用)

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       ;程序结束
    
    
    

显示结果

  • 30
    点赞
  • 202
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻萌的路飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值