我正试图搞乱一些程序集,创建一个操作系统。当这个代码加载到引导程序中时,它会输出“这是我很酷的新操作系统!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
答案 0 :(得分:6)
您没有退出print_string子例程:当您执行'call exit'时,您正在启动一个新的子例程,因此'ret'将返回到'call exit'位置之后并在print_string之后开始执行填充。
将'call exit'替换为普通'ret',它应该可以正常工作。