汇编语言王爽---17.2改变字体颜色

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


;A、B、C处的程序指令比较有技巧,请读者自行分析

assume cs:code

code segment
start:    
    mov ah,0
    int 16h                ;int 16h 0号功能实现从键盘缓冲区读取一个键盘输入
        
    mov ah,1            ;A
    cmp al,'r'
    je red
    cmp al,'g'
    je green
    cmp al,'b'
    je blue
    jmp short sret
    
red:    
    shl ah,1            ;B
green:    
    shl ah,1            ;C

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 
从而完成前景色设置为 红色

在汇编语言中,屏幕通常是25行和80列‌。在80x25的彩色模式下,显示器可以显示25行,每行80个字符,总共可以显示2000个字符‌(mov cx, 2000   屏幕上所有字符)。

屏幕分辨率和显存地址

在文本模式下,屏幕的显示内容来自显存中的数据。具体来说,屏幕的显存起始地址为0B8000H,每个字符占据2个字节,其中低位存储字符的ASCII码,高位存储字符的属性(如颜色)。行号的取值范围是0到24,列号的取值范围是0到79。因此,第n行的首地址可以通过公式计算:行号 x 80 x 2‌

        and byte ptr es:[bx],11111000b
        or es:[bx],ah

        这两句,bx=1 第一个字符,RGB 3位先被设为0其余位不变。or语句又把颜色设为ah(100),比如红色。循环2000次,每个字符都变成红色(r)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值