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

如何在x86汇编中实现屏幕绘制?BIOS中断调用方法咨询

实模式下用BIOS中断0x10实现屏幕绘制

在x86实模式(引导加载器的运行环境)中,屏幕绘制完全依赖BIOS提供的int 0x10视频服务中断,以下是核心用法和代码示例:

1. 先设置显示模式

绘制前需指定文本/图形模式,常用参数:

  • 80x25彩色文本模式:AH=0x00,AL=0x03
  • 320x200 256色VGA图形模式:AH=0x00,AL=0x13

代码示例:

; 切换到80x25彩色文本模式
mov ah, 0x00
mov al, 0x03
int 0x10

2. 文本模式下打印字符

两种常用子功能:

  • 滚动打印(类似printf):AH=0x0E,AL存字符,BH存页码(通常为0),BL存文本颜色(黑底白字为0x07)
  • 带重复的属性打印:AH=0x09,AL存字符,CX存重复次数,BL存颜色属性

滚动打印示例:

; 打印白色字符'A'
mov ah, 0x0E
mov al, 'A'
mov bh, 0x00
mov bl, 0x07
int 0x10

3. 图形模式下绘制像素

游戏常用的图形绘制功能:AH=0x0C,AL存像素颜色,CX存X坐标,DX存Y坐标,BH存页码

示例(在(100,50)位置画红色像素,0x13模式下红色值为0x04):

mov ah, 0x0C
mov al, 0x04  ; 红色
mov cx, 100   ; X坐标
mov dx, 50    ; Y坐标
mov bh, 0x00
int 0x10

4. 引导加载器基础框架

引导扇区需符合MBR规范(512字节,最后两字节为0xAA55),完整示例:

org 0x7C00  ; BIOS将引导扇区加载到0x7C00地址

start:
    ; 切换到320x200 256色图形模式
    mov ah, 0x00
    mov al, 0x13
    int 0x10

    ; 绘制一个红色像素
    mov ah, 0x0C
    mov al, 0x04
    mov cx, 100
    mov dx, 50
    int 0x10

    ; 无限循环防止程序跑飞
loop:
    jmp loop

times 510-($-$$) db 0  ; 填充剩余字节至510位
dw 0xAA55              ; 引导标志位

注意事项

  • 实模式下仅能访问1MB内存,所有寄存器操作均为16位
  • 不同显示模式的坐标范围和颜色值不同,比如0x13模式X最大319、Y最大199
  • 打印字符串可通过循环调用0x0E子功能逐个输出字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:06:04