2013-07-09 34 views
2

我已经基于写了一个简单的bootloader:http://www.viralpatel.net/taj/tutorial/hello_world_bootloader.phpNASM - Bootloader的打印线

它应该只显示“引导......”在屏幕上,但它也显示我定义的每个消息(“引导...删除磁盘并按回车键重新启动......“)。我该如何解决它?

这是我的代码:

[BITS 16] 
[ORG 0x7C00] 

xor ax,ax 
mov ds,ax 

mov si, msg_boot 
call printline 

loop: 
jmp loop 

reboot: 
mov si, msg_remove_disk 
call printline 
call .inputcheck 
ret 
.inputcheck: 
call input 
cmp al, 13 
je .end 
jmp .inputcheck 
.end: 
call reset 
ret 

reset: 
db 0Eah 
dw 0000h 
dw 0FFFFh 
ret 

exit: 
ret 

print: 
mov al, [si] 
inc si 
or al, al 
jz exit 
mov ah, 0x0E 
int 0x10 
jmp print 

printline: 
call print 
mov al, endofline 
call print 
ret 

input: 
mov ah, 0 
int 16h 
ret 

msg_boot db 'Booting...', 0 
msg_remove_disk db 'Remove disk and press enter for reboot...', 0 

endofline db 13, 10, 0 

TIMES 510 - ($ - $$) db 0 
DW 0xAA55 
+0

在这段代码中,它看起来像你故意展示两个消息。您首先调用'printline',然后'reboot',这也称为'printline' –

+0

对不起,我复制了错误的代码。 – raptor

+1

'mov al,endofline'应该是'mov si,endofline',否? –

回答

1

MOV人,行尾 应 MOV SI,行尾

感谢@Frank科特勒