I’ve written a simple bootloader in Assembly (NASM syntax), however when I run it in QEMU, the newlines show up like this:

This is my code:
Is there a way to stop 0Ah from pushing the lines forward?
.loop_top:
mov si, text_string ; Put string position into SI
call print_string ; Call our string-printing routine
loop .loop_top
jmp $ ; Jump here - infinite loop!
text_string db "This is my cool new OS!", 0Ah, 0
Well, obviously 🙂 your “print_string” subroutine takes the 0x0a seriously — it’s called “LF”, and it does just that, advances to the next line.
My guess is that using 0x0a 0x0d will do the trick.