lista interrupciones interrupcion example ensamblador 21h 17h 16h 14h 00h assembly operating-system x86 calculator bootloader

assembly - example - interrupciones 14h



¿Cómo manejar el teclado en modo real a través de interrupciones de BIOS? (3)

Ejemplo de BIOS del sector de arranque de Minimal Gas:

.code16 .global _start _start: cli /* Set SS and SP as they may get used by BIOS calls. */ xor %ax, %ax mov %ax, %ss mov 0x0000, %sp /* Get input to %al */ mov $0x00, %ah int $0x16 /* Print the input from %al */ mov $0x0E, %ah int $0x10 hlt .org 510 .word 0xaa55

Compilar y ejecutar:

as -o main.o main.S ld --oformat binary -o main.img -Ttext 0x7C00 main.o qemu-system-i386 -hda main.img

O simplemente clone este repositorio y ejecute make run RUN=bios_keyboard .

Luego, cuando ingresas un personaje, se imprime en la pantalla.

Probado en Ubuntu 14.04 AMD64, Binutils 2.24, QEMU 2.0.0 y en hardware real Lenovo Thinkpad T400.

Tengo que codificar un sistema operativo en el que pueda ejecutar una calculadora. Es como una calculadora de escritorio. Para esto estoy leyendo la serie de desarrollo operativo de Brokenthorn. He completado la segunda etapa del gestor de arranque. El gestor de arranque está en modo real. Después de esto, el autor está explicando el modo protegido. No quiero usar el modo protegido. No tengo tiempo para eso. Así que quiero escribir la calculadora en modo real mediante el uso de interrupciones de BIOS. ¿Es posible? Creo que se puede escribir en la segunda etapa del gestor de arranque (no estoy seguro). Significa que no tengo que usar un kernel (no estoy seguro). No sé cómo usar interrupciones de BIOS para manejar el teclado. ¿Alguien puede proporcionarme un enlace que me ayude en esto? Y si algo está mal en lo que supuse que es incorrecto, corrígeme. Gracias de antemano.



Si desea utilizar servicios de teclado BIOS de alto nivel, en lugar de manejar las interrupciones del teclado usted mismo, entonces INT 16h es lo que desea.

INT 16h con AH=00h o 10h bloqueará la espera de una pulsación de tecla (devuelve el resultado ASCII en AL ); use AH=01h u 11h para consultar si una pulsación de tecla está disponible primero si desea evitar el bloqueo (vuelve inmediatamente con ZF despejado si hay una clave disponible, o configurada si no). Ver, por ejemplo, aquí , o aquí (o Google "INT 16h" para más información).