【汇编语言】by王爽 | 实验17.2:使用 int 16h 中断例程读取键盘缓冲区

前言:本实验为王爽老师的《汇编语言》第三版中的实验17.2(p303)

实验环境:DOSBox 0.74-3

基础知识:请先查看书中 17.2 节关于 int 16h 中断例程键盘缓冲区的介绍。

实验任务:

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

程序代码: 

assume cs:code

code segment 
start: ;调用16h的0号功能
       ;从键盘缓冲区读取一个键盘输入返回ax
       ;ah=扫描码,al=ascii码
       mov ah,0
       int 16h  
       mov ah,00000001b  ;ah为蓝色
       cmp al,'r'
       je red 
       cmp al,'g'
       je green
       cmp al,'b'
       je set_color
       jmp short quit  ;按下非r、g、b的其它键返回DOS
  red: shl ah,1
green: shl ah,1

set_color:
       mov bx,0b800h
       mov es,bx
       mov di,1
       mov cx,2000
    s: and byte ptr es:[di],11111000b  ;将属性字节012位(前景色)置0
       or byte ptr es:[di],ah  ;设置前景色
       add di,2
       loop s

       ;本次设置完成后返回start继续设置(不返回DOS)
       jmp far ptr start

 quit: mov ax,4c00h
       int 21h

code ends
end start

运行结果: 

猜你喜欢

转载自blog.csdn.net/Amentos/article/details/127344967