如何用汇编轻松改变控制台颜色?

在DOS环境下,可通过直接操作显存地址或调用BIOS中断INT 10H来修改控制台文本颜色,前者需向显存特定地址写入颜色属性字节,后者则使用AH=09H等功能设置字符颜色。

核心原理

显存地址 B800h(彩色文本模式)存储屏幕内容,每个字符由 ASCII码 + 属性字节 组成,属性字节结构如下:

位 7  6 5 4  3 2 1 0
   [B] [背景色] [前景色]
  • 前景色(低4位):字符颜色(0-15)
  • 背景色(中3位):背景颜色(0-7)
  • 闪烁位(最高位):1=闪烁,0=不闪烁(通常设为0)

颜色代码表

颜色 颜色
0 黑色 8 深灰
1 蓝色 9 亮蓝
2 绿色 10 亮绿
3 青色 11 亮青
4 红色 12 亮红
5 品红 13 亮品红
6 棕色 14 黄色
7 浅灰 15 白色

方法1:直接写显存(高效)

org 100h        ; .COM程序起始
start:
    mov ax, 0B800h  ; 显存段地址
    mov es, ax      ; ES = B800h
    xor di, di      ; DI=0(屏幕左上角)
    ; 设置属性:蓝色背景(1) + 黄色前景(14) + 不闪烁(0)
    mov ah, 00011110b  ; 二进制属性:背景001(蓝) + 前景1110(黄)
    mov cx, 80*25     ; 80列×25行=2000字符
loop_fill:
    mov al, ' '       ; 用空格填充
    stosw             ; 写入[ES:DI]:AL=字符, AH=属性
    loop loop_fill    ; 循环填充整个屏幕
    ; 退出程序
    mov ax, 4C00h
    int 21h

方法2:BIOS中断(兼容性好)

org 100h
start:
    ; 清屏并设置颜色 (INT 10h/AH=06h)
    mov ax, 0600h   ; AH=06h(滚动), AL=0(全屏)
    mov bh, 1Eh     ; 属性:蓝背景(001b) + 黄前景(1110b)
    mov cx, 0000h   ; 左上角(0,0)
    mov dx, 184Fh   ; 右下角(24,79)
    int 10h
    ; 设置光标位置 (INT 10h/AH=02h)
    mov ah, 02h
    mov bh, 0       ; 第0页
    mov dx, 0       ; 行=0, 列=0
    int 10h
    ; 退出程序
    mov ax, 4C00h
    int 21h

自定义颜色组合公式

属性字节 = (背景色 × 16) + 前景色
示例:

  • 红背景(4) + 白字(15) → 4*16 + 15 = 79 (4Fh)
  • 绿背景(2) + 蓝字(1) → 2*16 + 1 = 33 (21h)

注意事项

  1. 环境要求:需在实模式环境运行(如DOSBox或旧版Windows CMD)。
  2. 现代系统:Windows/Linux终端需调用系统API(非本文范围)。
  3. 闪烁控制:属性字节最高位=1时启用闪烁(如 10011110b=9Eh)。

效果验证

  1. 用NASM编译:nasm prog.asm -o prog.com
  2. DOSBox中运行:prog.com
  3. 屏幕将变为蓝底黄字(方法1/2)或自定义颜色。

通过修改属性字节值,可自由组合256种颜色方案(16背景×16前景),满足个性化需求。


引用说明:本文技术细节参考自《PC Assembly Language》(Paul Carter)、IBM BIOS中断手册及实模式内存映射规范。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7695.html

(0)
酷番叔酷番叔
上一篇 2025年7月17日 15:32
下一篇 2025年7月17日 15:44

相关推荐

  • Windows XP如何调用CMD命令提示符?

    方法1:通过开始菜单(最常用)点击屏幕左下角的 【开始】 按钮选择 【所有程序】 → 【附件】在展开的菜单中单击 【命令提示符】→ 此时会弹出黑色窗口,显示C:\Documents and Settings\用户名>,即可输入命令(如ipconfig查看网络信息),方法2:使用“运行”对话框(快速启动)按……

    2025年6月13日
    21900
  • 国内中台实施数据业务化,其效果与挑战如何平衡?

    需以业务价值为导向,通过敏捷迭代与精细治理,在降本增效中化解落地挑战。

    2026年2月22日
    11000
  • 安东尼奥法罗数据可视化有何独特价值?

    安东尼奥法罗数据可视化是一种将复杂数据转化为直观、易懂视觉表现的方法,其核心在于通过设计巧妙的图表和交互元素,让数据“说话”,帮助用户快速洞察信息背后的规律与价值,这种方法不仅强调数据的准确性,更注重视觉传达的效率与美感,广泛应用于科研、商业、媒体等多个领域,成为现代数据分析不可或缺的工具,安东尼奥法罗数据可视……

    2025年11月25日
    14200
  • 百度智能云登录时账号密码输不对怎么办?

    百度智能云作为百度公司倾力打造的云计算服务平台,致力于为企业和开发者提供全方位的云计算解决方案,无论是云服务器、云存储、云数据库等基础设施服务,还是人工智能、大数据分析、物联网等创新应用,百度智能云都能凭借其强大的技术实力和丰富的行业经验,满足不同用户的多样化需求,对于初次接触或需要频繁使用百度智能云的用户而言……

    2025年12月1日
    11800
  • 安全加速SCDN推广如何高效落地?

    安全加速SCDN推广:构建下一代智能网络防护体系在数字化浪潮席卷全球的今天,企业业务对网络的依赖程度达到前所未有的高度,传统CDN(内容分发网络)在应对DDoS攻击、数据泄露、内容篡改等安全威胁时显得力不从心,安全加速SCDN(Secure Content Delivery Network)作为CDN的升级版……

    2025年11月30日
    15400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信