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

TASM中如何修改屏幕边框颜色?用int 10h功能1001h遇问题求助

TASM中int 10h 1001h修改屏幕边框无效的问题解决

问题场景

需求是在TASM中设置蓝色屏幕边框,并在屏幕中央绘制一个图形点,但使用int 10h的1001h功能修改边框颜色的操作未生效。以下是编写的代码:

.model small
.code
org 100h

start:
    ; 设置320x200 256色图形模式
    mov ax, 13h 
    int 10h

    ; 修改屏幕边框颜色(无效操作)
    mov ax, 1001h           
    mov bx, 0001h    
    int 10h
    
    ; 在屏幕中央绘制点
    mov ax, 0C01h      
    mov bh, 00h  
    mov cx, 160         
    mov dx, 100               
    int 10h

    
    mov ax, 4C00h       
    int 21h
end start

程序运行结果:
程序运行结果

问题原因

在VGA图形模式(比如你使用的13h模式)下,int 10h的1001h功能仅适用于文本模式,用来设置文本模式下的边框颜色和CGA调色板。而图形模式中,整个屏幕被像素缓冲区填满,不存在独立的"边框"硬件区域,所以这个功能调用完全无效。

修复方案

如果要在13h模式(320x200 256色)下实现蓝色边框效果,需要手动在屏幕四周绘制蓝色像素线条:

.model small
.code
org 100h

start:
    ; 设置320x200 256色图形模式
    mov ax, 13h 
    int 10h

    ; 手动绘制蓝色边框(颜色号1)
    mov ax, 0C01h      
    mov bh, 00h  

    ; 顶部横线:y=0,x从0到319
    mov dx, 0
draw_top:
    mov cx, 0
draw_top_loop:
    int 10h
    inc cx
    cmp cx, 320
    jl draw_top_loop

    ; 底部横线:y=199,x从0到319
    mov dx, 199
draw_bottom:
    mov cx, 0
draw_bottom_loop:
    int 10h
    inc cx
    cmp cx, 320
    jl draw_bottom_loop

    ; 左侧竖线:x=0,y从1到198
    mov cx, 0
    mov dx, 1
draw_left:
    int 10h
    inc dx
    cmp dx, 199
    jl draw_left

    ; 右侧竖线:x=319,y从1到198
    mov cx, 319
    mov dx, 1
draw_right:
    int 10h
    inc dx
    cmp dx, 199
    jl draw_right

    ; 在屏幕中央绘制点(颜色1)
    mov ax, 0C01h      
    mov bh, 00h  
    mov cx, 160         
    mov dx, 100               
    int 10h

    ; 等待按键(方便查看效果,可移除)
    mov ah, 00h
    int 16h
    
    mov ax, 4C00h       
    int 21h
end start

补充说明

  • 1001h功能的正确使用场景:仅在文本模式(如3h模式)下生效,此时BH寄存器指定边框颜色,BL寄存器用于设置CGA调色板。
  • 所有VGA图形模式中,屏幕边框都需要通过绘制像素模拟,硬件层面没有独立边框区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:02:52