As per
Int 10/AH=0Eh, you haven't specified the page number in BX, in which should be zero in this case.
Also, it isn't safe to assume that the BIOS won't trash any particular registers. They shouldn't if they aren't supposed to, but with a PC history riddled with buggy BIOS implementations, it is better to be safe than sorry. The following is an example of safer encapsulation:
[BITS 16]
[ORG 0x7c00]
mov al, 0x0D
call print_chr
;... more printing...
je repeat
jmp shutdown
print_chr:
mov ah, 0eh
xor bh, bh
int 10h
ret
shutdown:
JMP 0FFFFh:0000h ; reboots system
repeat:
jmp repeat
times 512 - ($ - $$) db 0
Overall, a better and more efficient implementation would utilize
Int 10/AH=13h (write string) instead.
As for the rest, here are some questions for you:
1.) Do you know where your stack is?
2.) Do you know what's in the segment registers?
3.) Is this code being used as a MBR?
4.) What's the purpose of
je repeat?
That should be enough questions for a start