Вы включили материал в верхней части вашего загрузчика, где он будет выполняться первым. Вместо этого включите дополнительные функции, если они не находятся в основном пути выполнения и доступны только по вызову.
Пожалуйста, попробуйте. Согласно комментариям я отредактировал код
boot.asm:
[bits 16]
[org 0x7c00]
boot:
xor ax, ax
mov ds, ax ; set up DS to make sure it matches our ORG
mov si, boot_string_00
call println
mov si, boot_string_01
call println
finish: ; fall into a hlt loop to save power when we're done
hlt
jmp finish
%include "printf.asm" ; not reachable except by call to labels in this file
%include "text.S"
times 510-($-$$) db 0
dw 0xaa55
printf.asm:
print:
mov ah, 0x0E ; call number for int 0x10 screen output
print_loop:
lodsb
test al, al
je print_done
int 0x10
jmp print_loop
print_done:
ret
println:
call print
mov si, line_end
call print
ret
text.S:
boot_string_00: db "Placeholder OS Title v0.0.1", 0
boot_string_01: db "Loading Operating system", 0
line_end: db 0xD, 0xA, 0
(Примечание редактора: сам исправил этот код, вместо того, чтобы пытаться описать изменение в комментариях)