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
相关产品推荐
相关产品推荐

