6

我必须为可以运行计算机的操作系统编写代码。它就像一个桌面计算机。为此我正在阅读breakthorn操作开发系列我已经完成了bootloader的第二阶段引导加载程序处于实模式。在此之后,作者正在解释保护模式。我不想使用保护模式。我没有时间做那个。所以我想通过使用bios中断在实模式下编写计算器。可能吗?我认为它可以写在引导加载程序的第二阶段(我不确定。)意味着我不必使用内核(我不确定)。我不知道如何使用 BIOS 中断来处理键盘。任何人都可以提供一个链接来帮助我吗?如果我在上面假设的任何错误是错误的,请纠正我。在此先感谢。

4

3 回答 3

10

如果您想使用高级 BIOS 键盘服务,而不是自己处理键盘中断,那么INT 16h这就是您想要的。

INT 16h使用AH=00hor10h将阻止等待按键(返回 ASCII 结果AL);如果要避免阻塞,请先使用AH=01hor查询按键是否可用(如果键可用,则立即返回 clear ,否则设置)。参见例如这里,或这里(或谷歌“INT 16h”了解更多)。11hZF

于 2010-11-06T15:02:15.433 回答
5

您可以处理 IRQ 1(由 x86 控制器映射到中断 9)并从端口读取密钥60h

请参阅http://inglorion.net/documents/tutorials/x86ostut/keyboard/

于 2010-11-06T13:24:43.140 回答
3

最小 GAS 引导扇区 BIOS 示例

当您输入一个字符时,它会打印到屏幕上。

电源

.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

编译并运行:

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

GitHub 上游.

在 Ubuntu 14.04 AMD64、Binutils 2.24、QEMU 2.0.0 和真实硬件 Lenovo Thinkpad T400 上测试。

于 2015-09-20T17:55:20.567 回答