X86 字符串未在程序集中显示
我正试图搞乱一些程序集,创建一个操作系统。当这段代码加载到引导加载程序中时,它会输出这是我最酷的新操作系统!呜呼!Chiggins,但现在它说,减去最后的Chiggins。我哪里做错了X86 字符串未在程序集中显示,x86,nasm,assembly,X86,Nasm,Assembly,我正试图搞乱一些程序集,创建一个操作系统。当这段代码加载到引导加载程序中时,它会输出这是我最酷的新操作系统!呜呼!Chiggins,但现在它说,减去最后的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 pri
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
您没有退出print_字符串子例程:当您执行“call exit”时,您正在启动一个新的子例程,因此“ret”将返回到“call exit”位置之后,并在print_字符串之后开始执行填充程序
用普通的“ret”替换“call exit”,它应该可以工作。您没有退出print\u string子例程:当您执行“call exit”时,您正在启动一个新的子例程,因此“ret”将返回到“call exit”位置之后,并在print\u string之后开始执行填充 将“呼叫退出”替换为普通的“ret”,它应该可以工作