学习从头写操作系统系列(一)创建了一个可引导的磁盘。当磁盘被引导之后,没有任何操作,即进入无限循环。

引导后显示内容到屏幕

本文示范在引导后显示内容到屏幕,代码如下1:

mov ah, 0x0e ; tty mode
mov al, 'H'
int 0x10
mov al, 'e'
int 0x10
mov al, 'l'
int 0x10
int 0x10 ; 'l' is still on al, remember?
mov al, 'o'
int 0x10

jmp $ ; jump to current address = infinite loop

; padding and magic number
times 510 - ($-$$) db 0
dw 0xaa55 

0x10中断
  是x86的第17号中断,主要负责video相关的service2

mov 0x0e, ah
  在ah寄存器中输入数值0x0e,在0x10中断下,表示Teletype output,即把字符显示到屏幕上。其中根据2

  • al寄存器:存放要打印的字符
  • bh寄存器:存放page number?
  • bl寄存器:存放显示颜色

从代码中可以看出,字符是一个一个显示到屏幕上的:一次中断,显示一个字符。这样的效率其实十分低下。

其余的内容,和学习从头写操作系统系列(一)几乎一致。

使用nasm -fbin 02-boot_sect_hello.asm -o boot_sect_hello.bin编译并保存成bin文件(模拟磁盘):

Fig.1 引导磁盘内容起始
Fig.1 引导磁盘内容起始

把bin文件模拟磁盘引导:

Fig.1 引导后显示内容到屏幕
Fig.1 引导后显示内容到屏幕

完整的0x10中断支持的function,见2