You don't need any of that bootcode, since you're not making anything to boot into, like a virtual floppy disk. As you know, in 16 bit land we just start executing from the top, so you can always just use the following macro to print your string:
%macro puts 1
pushaw
mov si, %1
mov ah, 0Eh ; INT 10h doesn't trash ah or bx
mov bx, 7 ; video mode support
%%read:
lodsb
test al, al ; check for null-terminating character (0)
jz %%done
int 10h ; print character in al
jmp %%read
%%done:
popaw
%endmacro
Then just `puts string` and either `ret` or `jmp $` to avoid running into the data section.