【发布时间】:2012-04-27 08:42:54
【问题描述】:
我正在将此代码用于 Hello World 引导加载程序。它没有打印出“Hello world\n”,而是打印出一个“H”并挂起。我已经使用 loadb 成功打印出消息,但我不明白为什么这种方法不起作用,因为它看起来是等效的。
[ORG 0x7c00]
[BITS 16]
xor ax, ax ;make it zero
mov ds, ax
mov ecx, msg
bios_print:
mov al, [ecx]
add ecx,1
cmp al, 0 ;zero=end of str
je hang ;get out
cmp al,100
jge hang
mov ah, 0x0E
int 0x10
jmp bios_print
hang:
jmp hang
msg db 'Hello World', 13, 10, 0
times 510-($-$$) db 0
db 0x55
db 0xAA
编辑: 我将 [BITS 64] 更改为 [BITS 16]
【问题讨论】:
-
电脑启动时为什么用
[BITS 64]生成64位汇编代码,是16位模式
标签: assembly operating-system x86 bootloader