3

bios 中断函数 21h (ah = 1h) 应该从标准输入中读取一个字符并回显它。

我的阅读功能:

    mov ah, 1h
    int 21h

所以,如果我按下一个键,它会意识到这一点,但它不会回显一个字符。由于我使用我的代码从我的软盘和字符回显功能 int 10h (ah = 0eh) 启动它,我想我必须存储它然后用“视频 - 电传输出” (int 10h (ah = 0eh) 回显它))。

还是我错过了 aboce 代码中的某些内容?

4

2 回答 2

2

中断 0x21 是类似于 MSDOS 的操作系统功能的“接口”,而不是 BIOS。

如果您正在编写实模式引导加载程序或小型操作系统内核,则必须使用自己的 IRQ 1 处理程序。

有关在您自己的内存缓冲区中捕获所有按键的方法,请参阅此答案: 如何检查 x86 程序集中的键状态?

然后你将不得不安排某种循环。您检查按键(通过读取内存缓冲区)。一旦检测到按键,要打印“回显”键,您必须向视频存储器写入一些内容。那是另一个故事。如果您使用默认文本模式,只需写入 0xB800 段。如果您使用的是图形模式(VGA 或 VESA),那么您必须从某个地方获取光栅字体。

如果您在引导加载程序级别以汇编语言编写内容,那么可用的内容不多。绝对不是int 0x21

于 2012-09-17T22:57:38.923 回答
1

你基本上在做两件不同的事情:

  1. 从键盘获取字符
  2. 将其显示到屏幕上

涉及两个不同的 BIOS 中断,但幸运的是,它们都在 AL 中使用相同的值。

mov ah,0h   ;get character from keyboard
int 16h     ;and store it in AL
mov ah,0eh  ;Display a character in AL
int 10h     ;aka, echo it

INT 21h 是一个 MSDOS 的东西,如果我们谈论的是引导加载程序,这是一个禁忌。

于 2014-01-27T17:09:09.010 回答