字符串不在程序集中显示

时间:2011-01-19 16:27:09

标签: x86 nasm assembly

我正试图搞乱一些程序集,创建一个操作系统。当这个代码加载到引导程序中时,它会输出“这是我很酷的新操作系统!Woohoo!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

1 个答案:

答案 0 :(得分:6)

您没有退出print_string子例程:当您执行'call exit'时,您正在启动一个新的子例程,因此'ret'将返回到'call exit'位置之后并在print_string之后开始执行填充。

将'call exit'替换为普通'ret',它应该可以正常工作。