最近我决定编写一些简单的 MSDOS 游戏会很有趣。不用说,我需要处理键盘事件的代码。
这是我想出的测试:
int i, c = 0;
for ( i = 0; i < 10; i++ )
{
asm
(
"mov $0x00, %%ah \n"
"mov $0x00, %%al \n"
"int $0x16 \n"
//"jnz keydn \n"
//"mov $0x00, %%al \n"
//"keydn: \n"
"movw %%ax, (%0) \n"
: "=r"(c)
);
printf( "%d\n", c & 0xFF );
}
该代码应该等待按键,然后打印出字符的 ASCII 值。并且一切都按预期工作,除非我按喜欢backspace或esc- 然后发生分段错误。
我对装配不熟悉,但我真的不知道是什么原因导致了这个错误。
我用 编译djgpp
并运行可执行文件DosBox
一切都基于此处提供的信息:
- https://courses.engr.illinois.edu/ece390/books/artofasm/CH20/CH20-3.html
- https://en.wikipedia.org/wiki/BIOS_interrupt_call
先感谢您!:)