代码行中的“ hello world”有什么问题?

时间:2019-05-01 06:35:04

标签: assembly nasm x86-16 bootloader bios

我试图在Qemu中加载“ Hello World”字符串,但只显示字母“ H”。我对此很陌生,在此先感谢您尝试帮助我:D 我正在Windows操作系统上执行此操作。


[BITS 16]
[ORG 0X7C00]

MOV SI, BOOTLOADSTR
CALL Printstring
JMP $

Printcharacter:
MOV AH, 0x0E
MOV BH, 0x00
MOV BL, 0x07

INT 0x10
RET

Printstring
next_character:
MOV AL, [SI]
INC SI
OR AL, AL
JZ exit_function
CALL Printcharacter
exit_function
RET

;DATA
BOOTLOADSTR db 'Hello World', 0

TIMES 510 - ($ - $$) DB 0
DW 0XAA55 

The image of the qemu should be here

1 个答案:

答案 0 :(得分:1)

您的代码似乎错误地引用了[DS:SI] ...似乎您只是从[DS:SI]抓取了一个字节,尝试使用lodsb连续收集字节直到{{1} }已终止 [CHAR_STREAM] NULL

可能我建议尝试这段代码;我提供了注释和[0x00]指令,并附有简单的详细信息来解释该过程:

lodsb

这是受人尊敬的结果:

Output of 'Hello, World!'