Я пытаюсь узнать больше о том, как на самом деле работают системы под всей красивой графикой сверху. Поэтому я сейчас играю с памятью в 512 байт, которую BIOS загружает при запуске, я не могу назвать ее загрузчиком в настоящий момент. В любом случае, я заменяю вектор прерывания, но у меня возникают проблемы с ним. После замены прерывания 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