きれいなグラフィックスの下でシステムが実際にどのように機能するかについて、もっと学ぼうとしています。そのため、現在、BIOS が起動時にロードする 512 バイトのメモリで遊んでいます。現時点では、それをブートローダーと呼ぶことはできません。とにかく、割り込みベクターを交換していますが、問題があります。割り込み 09h (キーボード) を置き換えた後、正しく機能し、キーを押すと 'Memory messing' が出力されます。しかし、その後何もありません。その後、キーを押すたびに何もしません。システムがクラッシュしているのか、ハンドラーに何か不足しているのかはわかりません。コードは次のとおりです。
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