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


标签:
股票 |
分类: 设计操作系统 |
1、AH=13H
2、AL=显示方式
3、BH表示视频区页数
4、如果AL的BIT1为0,则BL表示显示属性。属性为:
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
运行效果为(静态截图无法看到闪烁效果):
http://img.blog.csdn.net/2015020123145369310h
最后,记录一下直接写入显存以显示字符串的代码:
-
mov
ax, 0x7c0 -
mov
ds, ax -
-
mov
ax, 0xb800 -
mov
es, ax -
mov
ax, text -
mov
si, ax -
-
mov
cx, textlen -
mov
ah, 0x7c -
cld
-
DispStr:
-
lodsb -
stosw -
loop DispStr -
jmp
$ -
-
text:
db "this is a test" -
textlen
equ $-text -
times
510-($-$$) db 0 -
dw
0xaa55