Printing a string in NASM Win16 Assembly A small script that simply prints a given string. It's an improved snippet that combines some recommendations given in my post on string helper functions.

org 100h

mov     si, hello
call    puts
ret

puts:
    jmp     .run
.putc:
    mov     ah, 0Eh
    mov     bx, 7
    int     10h
.run:
    lodsb
    cmp     al, 0
    jne     .putc
    ret

hello db "Hello World!", 0
You have all the elements. The only thing that can be eliminated is jmp .run, as follows:

org 0x100

        mov     si, Prompt
        call    puts
        ret

  puts: mov     ah, 0xe
        mov     bx, 7
 .read: lodsb
        or       al, al
        jnz     .post     
        ret
 .post: int     0x10
        jmp     .read

 Prompt: db  'Hello World', 0


As INT 10H does not trash AH or BX, there is no need to reinitialize them each time through the loop.