bios视频​​服务中断调用

时间:2010-06-24 23:31:17

标签: assembly bios qemu

我正在尝试使用bios视频​​中断在屏幕上显示一个字符。 以下是汇编代码:

mov $0x0A, %AH
mov $0x68, %AL ; to display character 'h'
int $0x10

我使用GNU汇编程序组装了这段代码,以生成一个名为sample.o的目标文件 sample.o的总大小为449字节。现在,我在第511和第512字节位置手动向该目标文件写入十六进制数字0x55和0xAA,以使其可引导。所以我相信现在我有一个512字节的引导扇区。我使用qemu尝试从这个目标文件启动:

$> qemu -fda sample.o

qemu模拟器在“从软盘引导......”的位置启动并冻结 但我想在它检测到引导扇区后,bios视频​​中断代码应该运行并在屏幕上显示一个字符。

我知道我做的事情非常糟糕。也许我错过了整个中断的概念。任何人都可以提供帮助。

编辑:所以我现在使用as86和ld86来生成平面二进制文件。而不是在AH中的0x0A,我使用0x0E,似乎它的确如此。似乎是bios实施问题。

我感谢所有回复的人。

由于

3 个答案:

答案 0 :(得分:3)

正常.o文件除了产生的二进制代码之外还包含很多其他内容,所以你所做的事情不起作用也就不足为奇了(这个结果应该大约10个字节左右)

你可以为ld写一个脚本来让它产生一个平面二进制文件(我好像记得那应该是可能的,但是没有亲自试过)。如果我这样做,我可能会使用nasm,因为它可以很容易地生成原始二进制输出。另一种可能是一些旧的MS-DOS汇编程序,而不是产生.com格式输出(也是原始二进制文件,但你必须小心,因为它的加载方式有点不同)。

答案 1 :(得分:0)

你需要传递BL中的属性值(07h灰色为黑色),页面编号为BH,并计入CX。

你说你用气体编译它,它给你一个448字节的文件?你在组装成ELF文件还是什么?我建议使用BITS 16指令使用nasm -f bin。

答案 2 :(得分:0)

正如Jerry Coffin所说,问题是您的.o文件不是具有正确引导扇区的软盘映像。除了代码之外,.o文件还包含许多信息,例如符号名称和重定位信息。

如果您使用的是NASM,请使用-f bin生成原始二进制文件。如果您使用的是LD,则可以编写链接描述文件。

对于这类东西的帮助,最好的地方可能是osdev.org及其论坛。

相关问题