环境
- Time 2022-11-09
- WSL-Ubuntu 22.04
- QEMU 6.2.0
- NASM 2.15.05
前言
说明
参考:《x86汇编语言:从实模式到保护模式》李忠
参考:http://www.ablmcc.edu.hk/~scy/CIT/8086_bios_and_dos_interrupts.htm
目标
使用 BIOS 中断,来进行屏幕的输出。
BIOS 中断
BIOS 中断是 BIOS 启动后,从地址 0x0000 处初始化的一个中断向量表。
其中存放的是段地址和偏移地址,每个终端号对应四个字节,一共可以有 256 个中断号。
汇编代码
jmp start
data: db 'hello world'
start:
mov cx,start - data
mov bx,0x7c00 + data
printc:
mov al,[bx]
mov ah, 0eh
int 10h
inc bx
loop printc
jmp $
times 510 - $ + $$ db 0
db 0x55
db 0xaa
字符定义
之前是通过对单个字符进行定义的,这里直接使用了字符串,用单引号引起来。
loop 循环
使用了 CX 寄存器来存储字符的个数,使用 loop 进行循环。
中断
使用的是 0X10 中断,子功能号是 0X0E,表示向屏幕输出,并后移光标。
AL 寄存器存储将要显示的字符,AL 寄存器填写子功能号,最后使用 int 10h 进行中断。
该中断为 BIOS 提供。
总结
使用 BIOS 的中断,向屏幕输出了 hello world。