You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让8086汇编代码中的'+'字符按红、蓝、绿颜色闪烁?

修改8086汇编代码实现交替闪烁的'+'字符

核心思路

  • 使用BIOS中断INT 10H设置文本属性,实现闪烁+彩色效果:
    • 属性字节格式:第7位(闪烁位,1=开启闪烁) + 高3位背景色 + 低4位前景色
    • 目标颜色对应值:闪烁红(128+4=132)、闪烁蓝(128+1=129)、闪烁绿(128+2=130)
  • 循环切换颜色值,每次打印'+'前设置对应属性,添加延迟控制闪烁节奏

修改后的代码片段

假设原代码中打印第4个灯泡第一行'+'的循环为print_plus_loop,修改如下:

; 定义闪烁颜色序列:红、蓝、绿
color_seq db 132, 129, 130
color_idx db 0

; 打印第4个灯泡第一行的'+'循环
print_plus_loop:
    ; 获取当前要使用的颜色
    mov bx, offset color_seq
    mov al, [color_idx]
    xlatb
    mov bl, al  ; 保存颜色属性

    ; (若原代码未设置光标位置,需补充以下代码定位到目标行/列)
    ; mov ah, 02h
    ; mov dh, 目标行号
    ; mov dl, 目标列号
    ; mov bh, 0
    ; int 10h

    ; 设置文本属性并打印'+'
    mov ah, 09h
    mov al, '+'
    mov bh, 0   ; 页号
    mov cx, 1   ; 打印次数
    int 10h

    ; 延迟一段时间(控制闪烁速度,可调整cx值改变快慢)
    call delay

    ; 更新颜色索引,循环切换红/蓝/绿
    inc color_idx
    cmp color_idx, 3
    jne skip_reset_color
    mov color_idx, 0
skip_reset_color:

    ; 继续循环(假设原循环用cx控制打印次数)
    loop print_plus_loop

; 简单延迟函数
delay:
    mov cx, 0FFFFh
delay_loop:
    dec cx
    jnz delay_loop
    ret

关键说明

  • INT 10H AH=09H:用于在指定位置打印带属性的字符,bl寄存器传入属性值
  • xlatb:快速从颜色序列中读取当前颜色值,简化索引切换逻辑
  • 延迟函数:通过空循环消耗CPU周期,调整cx的初始值可改变闪烁快慢
  • 若原代码使用INT 21H AH=02H打印字符,必须替换为INT 10H AH=09H才能携带颜色属性

内容的提问来源于stack exchange,提问作者Ricafort Roland Josh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:21:01