When i run this program, it first prints weird symbols and then prints the Hello world. It consists of two files - boot.asm and display.asm. boot.asm is the main files
Here are the files-
boot.asm
global start
section .text
start:
    mov ax, 07C0h       ; Set up 4K stack space after this bootloader
    add ax, 288     ; (4096 + 512) / 16 bytes per paragraph
    mov ss, ax
    mov sp, 4096
    mov ax, 07C0h       ; Set data segment to where we're loaded
    mov ds, ax
   
    call read_key
    call display
    cmp al, 'm'
    je success
    cmp al, "m"
    jne failure
   
    
success:
    
    jmp success_deal
failure:
    
    jmp failur_deal
success_deal:
    
    ms db " hello world "
    mov si, ms
    mov bl, 2
    call print_string
    %include "display.asm"
    
failur_deal:
    call new_line
    mov al, " "
    call display
read_key:
    push bx
    push cx
    push dx
    push si
    push di
    mov ah, 0x00
    int 0x16
    pop di
    pop si
    pop dx
    pop cx
    pop bx
    ret
display:
    push bx
    push cx
    push dx
    push si
    push di
    movzx si, al
    mov ah, 0Eh
    int 10h
    pop di
    pop si
    pop dx
    pop cx
    pop bx
    ret
new_line:
    push bx
    push cx
    push dx
    push si
    push di
    mov dl, 10
    mov ah, 2
    int 21h
    mov dl, 13
    mov ah, 2
    int 21h
    pop di
    pop si
    pop dx
    pop cx
    pop bx
    ret
display.asm -
print_string:
    mov ah, 0Eh
    cmp bl, 3       ; int 10h 'print char' function
    jne .repeat
.repeat:
    lodsb           ; Get character from string
    cmp al, 0
    je .done        ; If char is zero, end of string
    int 10h         ; Otherwise, print it
    jmp .repeat
.done:
    ret
    times 510-($-$$) db 0   ; Pad remainder of boot sector with 0s
    dw 0xAA55 
    mov bl, 3
    jmp print_string
I get this output - Output
So, how can i remove the symbols and just print the hello world.
 
    