我正在尝试更多地了解系统是如何在上面所有漂亮的图形下真正工作的。因此,我目前正在使用 BIOS 在启动时加载的 512 字节内存,目前我猜还不能真正将其称为引导加载程序。无论如何,我正在替换一个中断向量,但有问题。更换中断 09h(键盘)后,它可以正常工作,按键时会输出“内存混乱”。但后来什么都没有。之后的每一次按键都无济于事。我不知道系统是否崩溃,或者我的处理程序是否遗漏了一些东西,下面是代码:
jmp start
times 100 db 0 ; Cleared space for stack
start:
xor ax, ax
mov ax, start
sub ax, 80
mov sp, ax
mov al, 0x09 ; Interupt number
mov bl, 4
mul bl
mov bx, ax
xor ax, ax
mov es, ax
mov [es:bx], word prints ; My interupt handler
add bx, 2
mov [es:bx], word 0x00
bloader:
jmp bloader
prints:
cli
push ax
push bx
push si
mov si, msg ; Message to print
mov bl, 0x07
mov bh, 0x00
printnb:
lodsb ; Grab byte from message
cmp al, 0 ; End of message
je printf
mov ah, 0x0E
int 0x10 ; Print byte
jmp printnb
printf:
mov al, 0x20
out 0x20, al ; Inform interupt controller interupt has been handled
pop si
pop bx
pop ax
sti
iret ; Interupt return
msg db "Memory messing",0
times 510 - ($ - $$) db 0
dw 0xAA55