【发布时间】:2016-04-25 17:58:46
【问题描述】:
作为学习操作系统开发的一部分,我正在 x86 引导扇区中开发代码。我希望我的代码将其打印到控制台:
你好
我得到了这个:
H
为什么只打印一个字符而不是整个字符串?我该如何解决这个问题?
这是我的代码的 sn-p:
mov ah, 0x0e
mov bx, string_p
add bx, 0x7c00
mov al, [bx]
int 0x10
jmp $
string_p:
db 'Hello',0
"then padding and magic number"
【问题讨论】:
-
你在运行什么?
-
我的 ubuntu 虚拟机中的 Bochs
-
Int
10hfunction0Eh是一个 MS-BIOS 函数,它将一个 single 字符写入终端。我从标签中看到您正在 Linux 上运行仿真。我建议您参考 MS-BIOS 和 MS-DOS 参考,例如 Ralf Brown,它解释了这些功能。警告:某些字符串输出函数需要$终止符而不是0。 -
@MichaelPetch 谢谢我刚刚注意到“bootsector”。有 Int
10h函数13h可能会这样做,但编写循环可能会更容易。 -
@Weathervane :我稍微改写了这个问题并添加了适当的标签。起初我也错过了标题中的引导扇区。
int 10h/ah=13h是大多数 PC/AT 和基于克隆的系统或更高版本的合理替代方案。我会按照你的建议用一个循环来做,这样它就可以在古老的 8086/8088 PC 上使用。
标签: assembly bootloader bios bochs x86-16