前言:本实验为王爽老师的《汇编语言》第三版中的实验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
运行结果: