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

16位汇编模拟器中实现十六进制色值彩虹渐变对角线的方法

16位汇编模拟器彩虹渐变绘制方案

问题原因

你当前代码的渐变异常是因为调色板默认按「B分量→G分量→R分量」的优先级递增排列,直接对颜色下标+1得到的是蓝色调先渐变、再绿色调、最后红色调的序列,不符合彩虹「红→橙→黄→绿→青→蓝→紫」的渐变逻辑。

实现方案

我们可以预先定义符合彩虹渐变顺序的调色板下标序列,绘制时依次读取序列值写入显存即可,修改后的代码如下:

colourDisplay EQU 0x300       ; 显存起始地址
rainbow_len EQU 16            ; 渐变颜色数量

bboot:
    MOV D, colourDisplay      ; D寄存器指向显存起始位置
    MOV SI, rainbow_colors    ; SI指向彩虹颜色序列首地址
    MOV C, rainbow_len        ; C作为计数器,存放颜色总数
    JMP print

print:
    MOVB BL, [SI]             ; 从序列中读取当前颜色下标
    MOVB [D], BL              ; 写入显存绘制点
    ADD D, 17                 ; 对角线步长(每行16像素,+17就是下一行同偏移位置)
    ADD SI, 1                 ; 移动到下一个颜色值
    DEC C                     ; 计数器减1
    JNZ print                 ; 未绘制完则继续
    HLT

; 彩虹渐变调色板下标序列,可按需调整增减过渡色
rainbow_colors:
    DB 0xE0, 0xE8, 0xF0, 0xF8, 0x78, 0x38, 0x1F, 0x17
    DB 0x0F, 0x07, 0x27, 0x47, 0x67, 0xA7, 0xC7, 0xE7

效果说明

上面的序列已经按照彩虹渐变的逻辑调整了颜色顺序,运行后即可得到连续的彩虹对角线效果,你也可以根据自己的需求修改rainbow_colors中的下标值调整渐变过渡的细腻程度,或者修改ADD D, 1改为绘制水平/垂直直线等其他形状。

内容的提问来源于stack exchange,提问作者lLauriix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:05