[079][汇编语言]检测点17.1 int 16H 0号中断:从缓冲区读取一个键盘输入

检测点17.1

检测点17.1.png
  • TF = 1 时,CPU可以响应中断,比如 BIOS的 int 9H中断例程(功能是向键盘缓冲区写入数据)
  • BIOS的int 16H中断例程(功能是从缓冲区读取一个键盘输入)
  • 缓冲区有数据的时候,就读取缓冲区的第一个字单元,这时候允许不允许响应 int 9H都可以的,也就是说无所谓TF =1 (可响应)还是TF = 0(屏蔽)
  • 缓冲区为空的时候,当然要置TF = 1 (可响应),使得接受键盘输入填充缓冲区,因此这时候TF = 1

解析参考

int 16H 0号中断例程

  • 编程:接收用户的键盘输入,输入'r',将屏幕上的字符设置为红色、输入'g',将屏幕上的字符设置为绿色、输入'b',将屏幕上的字符设置为蓝色


    int 16H 0号中断例程.png
assume cs:code
code segment
start:  mov ah,0
        int 16h
        
        mov ah,1
        cmp al,'r'
        je red
        cmp al,'g'
        je green
        cmp al,'b'
        je blue
        jmp short sret
        
    red:    shl ah,1
    green:  shl ah,1
    blue:   mov bx,0B800H
            mov es,bx
            mov bx,1
            mov cx,2000
        s:  and byte ptr es:[bx],11111000B
            or es:[bx],ah
            add bx,2
            loop s
            
    sret:   mov ax,4c00H
            int 21H
            
    code ends
    end start

代码说明

输入 r 时,
指令会从标号 red 开始执行
执行完 shl ah,1
之后会接着从green标号开始执行
又是一句 shl ah,1

由于 ah = 0000 0001 H
经过两次 左移 变成 ah = 0000 0100 H

颜色属性按照
颜色  闪烁  R G B 高亮  R G B 
ah =  0    0 0 0   0   1 0 0 
从而完成前景色设置为 红色

BIOS int 16H 0 号中断例程

  • (1)检测键盘缓冲区中是否有数据;
  • (2)如果则继续做第(1)步;
  • (3)读取缓冲区的第一个字单元中的键盘输入;
  • (4)将读取的扫描码送入ah,ASCII码送入al;
  • (5)将已读取的键盘输入从缓冲区中删除。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,778评论 8 114
  • 17.1 int 9中断例程对键盘输入的处理 键盘输入会引发9号中断,BIOS提供了9号中断例程,从60H端口读出...
    Stroman阅读 3,287评论 0 0
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 7,083评论 0 4
  • 我今天去诚品没想到会偶遇王辉,好久不见的小伙伴,没想到会这样遇见,有都有点不认识了。很开心看到他在做自己喜欢的事,...
    北海的夏天阅读 1,531评论 0 0
  • 深秋看不见落叶,远处植被依然碧绿,只是人已非;深夜看不见回忆,高空星月依然明亮,只是回不去!—划痕
    落笔如划痕阅读 1,072评论 0 0

友情链接更多精彩内容