2011-01-19 14 views
0

我试图勾搭一些组件不显示,创建操作系统。当该代码被加载进入bootloader,它是假设输出“这是我很酷的新的操作系统!哇噢!ChigginsOS”但现在它说,减去“Chiggins”结尾。我哪里错了?字符串在装配

BITS 16 

start: 
    mov ax, 07C0h 
    add ax, 288 
    mov ss, ax 
    mov sp, 4096 

    mov ax, 07C0h 
    mov ds, ax 

    mov si, text_string 
    call print_string 

    mov si, name_string 
    call print_string 

    jmp $ 

    text_string db 'This is my cool new OS! Woohoo!',0 
    name_string db 'ChigginsOS',0 

;--------------------------------------------------------------------------------------- 

exit: 
    ret 

;--------------------------------------------------------------------------------------- 

print_string: 
    mov ah, 0Eh 

.repeat: 
    lodsb 
    cmp al, 0 
    je .done 
    int 10h 
    jmp .repeat 

.done: 
    call exit 

;--------------------------------------------------------------------------------------- 

    times 510-($-$$) db 0 
    dw 0xAA55 

回答

6

你不退出print_string子程序:当你执行“调用exit”,你正在开始一个新的子程序,所以“RET”将将“呼叫退出”的位置后返回,并开始执行print_string之后的填充。

替换“调用exit”以纯“沤”,它应该工作。