文章目录
理解三个概念: 中断interrupts, CPU,寄存器registers
目标:让上一个静默的界面打印一些文本
我们将改进我们的无限循环引导扇区并在屏幕上打印一些东西。我们将为此提出中断。
我们尝试将"Hello"写到寄存器al
, 字节0x0e
写到ah
(the higher part of ax
),并提高中断’0x10`,这是视频服务的一般中断。
“ 0x0e” onah
告诉视频中断,我们要运行的实际函数是’在tty模式下编写``al“ al”内容’'。
我们只能在现实世界中设置一次TTY模式一次,我们无法确定“ AH”的内容是恒定的。 我们休眠时可能会在CPU上运行其他一些过程,无法正确清理,并在`ah’上留下垃圾数据。
在此示例中,我们不需要考虑这一点,因为我们是CPU上唯一运行的事情。
我们的引导代码如下 :
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 0x10jmp $ ; jump to current address = infinite loop; padding and magic number
times 510 - ($-$$) db 0
dw 0xaa55