汇编程序(fasm) - 读取字符

时间:2012-09-16 09:56:11

标签: assembly fasm

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

我的阅读功能:

    mov ah, 1h
    int 21h

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

或者我在遗漏代码中遗漏了什么?

2 个答案:

答案 0 :(得分:2)

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

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

有关捕获自己的内存缓冲区中所有按键的方法,请参阅此答案: How to check keys status in x86 assembly?

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

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

答案 1 :(得分:0)

你基本上做了两件事:

  1. 从键盘获取角色
  2. 将其显示在屏幕上
  3. 涉及两个不同的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的东西,如果我们谈论bootloader,这是一个禁忌。