Я написал небольшое ядро NASM, настроил IDT, переназначил PI C и PIT и замаскировал все прерывания, кроме клавиатуры IRQ1. Я хочу сделать драйвер клавиатуры, который печатает символы, введенные пользователем. Я пытался следовать учебным пособиям, но я просто запутался и не знаю, с чего начать. Я знаю, что есть порт управления (0x64) и порт данных (0x60). Я попробовал следующий подход:
irq1_h: ;irq1 handler
pusha ;save registers by placing on stack
sti ;restore interrupts
in al, 0x60 ;read input charcter from keyboard data port 0x60
mov [string], al ;save it in string
mov ebx, string ;print string character
call print_string
popa ;get registers back
mov al, 0x20 ;send End of Interrupt to PIC
out 0x20, al
Когда я запускаю код, все работает нормально, пока я не нажму клавишу. Я получаю проверку границ исключительных ситуаций (исключение № 5, мой собственный запрограммированный экран ошибок). Я запускаю это в QEMU. Помимо этого все работает хорошо.
РЕДАКТИРОВАТЬ: Добавление ret
в конце остановил сбой. Напечатанные символы не являются напечатанными, хотя, потому что я должен преобразовать коды сканирования от клавиатуры до символов ASCII?