首页 > 代码库 > 使用BIOS中断显示字符串笔记(int 10h 13号中断)

使用BIOS中断显示字符串笔记(int 10h 13号中断)

BIOS的10H中断的13号中断用于显示字符串,参数为:

1、AH=13H

2、AL=显示方式

      如果AL=0,表示目标字符串仅仅包含字符,属性在BL中包含,不移动光标

      如果AL=1,表示目标字符串仅仅包含字符,属性在BL中包含,移动光标

      如果AL=2,表示目标字符串包含字符和属性,不移动光标

      如果AL=3,表示目标字符串包含字符和属性,移动光标

      总之,可以归纳为:    

           |BIT7|BIT6|BIT5|BIT4|BIT3|BIT2|BIT1|BIT0| AL

             BIT0为0表示不移动光标,为1表示移动光标

             BIT1为0表示字符串仅包含字符,为1表示字符串包含属性

             BIT2~BIT7未使用


3、BH表示视频区页数

4、如果AL的BIT1为0,则BL表示显示属性。属性为:

      |BIT7|BIT6|BIT5|BIT4|BIT3|BIT2|BIT1|BIT0| BL

         BIT7:背景是否闪烁。0不闪烁,1闪烁

         BIT6~BIT4为背景色,分别为RGB,000为黑色,111为白色

         BIT3为1,则前景色加亮,为0则不加亮

         BIT2-BIT0为前景色,意义同背景色

5、CX为字符串长度

6、DH表示在第几行显示(0为第一行)

7、DL表示在第几列显示(0为第一列)

8、ES:BP指向字符串


以下是一段测试代码,显示为闪烁白色背景,红色前景。

这是一段扇区引导程序,使用NASM语法编写,在windows环境下测试通过。使用bochs或者virtualbox 等虚拟机可以看到运行结果。

test.asm:

mov ax, 0x7c0                         ; BIOS将代码加载到内存0x7c00处,因此段地址为0x7c
mov ds, ax                            ; 初始化数据段
mov es, ax                            ; 用于指向字符串

mov ax, Message                       ; es:bp指向要显示的字符串
mov bp, ax
mov ah, 0x13                          ; ah为0x13,调用13号中断
mov al, 0                             ; al为0,不移动光标,字符串中没有属性内容
mov bh, 0                             ; 第0页显示
mov bl, 0xFC                          ; 闪烁白色背景,红色加亮前景
mov cx, MessageLen                    ; 字符串长度
mov dx, 0                             ; dh=0, dl=0, 即第0行,第0列
int 10h                               ; 调用10H中断

jmp $                                 ; 无限循环,防止代码进入数据区

Message db "This is a test!"
MessageLen equ $ - Message
times 510-($-$$) db 0                 ; 在中间填充0
    db 0x55, 0xaa                     ; 在第511和512字节处写入引导程序标志位


编译方法:nasm test.asm -o test.bin


bochs的配置文件为:

megs: 32
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vga: extension=vbe
floppya: 1_44=test.bin, status=inserted
boot: a
log: bochsout.txt
mouse: enabled=0
cpu:count=1,ips=15000000
vga_update_interval: 150000
i440fxsupport: enabled=1

运行效果为(静态截图无法看到闪烁效果):

技术分享

使用BIOS中断显示字符串笔记(int 10h 13号中断)