I have a very simple boot loader in assembly that is supposed to print a string. I've tried looking up many different ways to print a string in assembly but none of them have worked for me. this is my most recent attempt that I've seen in a couple of tutorials but it doesn't work. it prints a T rather than the message. 
mov si, message       ;The message location *you can change this*
    call print            ;CALL tells the pc to jump back here when done
    print:
      mov ah, 0Eh         ;Set function
    .run:
      lodsb               ;Get the char
    ; cmp al, 0x00        ;I would use this but ya know u dont so use:
      cmp al, 0           ;0 has a HEX code of 0x48 so its not 0x00
      je .done            ;Jump to done if ending code is found
      int 10h             ;Else print
      jmp .run            ; and jump back to .run
    .done:
      ret                 ;Return
    message           db  'Hello, world', 0 ;IF you use 0x00
    ;message          db  'Hello, world', 0x00
jmp $
times 510-($-$$) db 0
dw 0xaa55
 
    