x86 – Why is no code executed after a db directive?

I have a very simple program that I’ve written using FASM that attempts to simply print out a string from inside the boot sector of an emulated x86 chip via qemu. I am attempting to print out a basic startup string. I can get the emulator to boot from the virtual hard disk and print out individual characters if I specify them by hand by moving a specific ascii value into the al register, but it will not execute passed a db or dw command. Here is the current code I have:

mov ah,0x0e ;int 10/ah = 0eh -> scrolling teletype BIOS routine

prepare db "Preparing to Launch..."

lea ebx,(prepare)

print1:
mov al, (ebx)
int 0x10
inc cl

cmp cl, 22
jle print1

times 510 -( $ - $$ ) db 0 ;Pad the boot sector out with zeros
dw 0xaa55

The code appears to be compiling perfectly fine, as when I look at the hex values of the harddisk, it places the 0xaa55 in the proper location. Furthermore, if I place a simple interrupt statement around the db command, so that it looks like this:

mov al, 76
int 0x10

prepare db "Preparing to Launch..."

mov al, 76
int 0x10 

the second interrupt will never be executed. I have tried moving the prepare db "Preparing to Launch..." line throughout the code, in which case it will compile without fail, but will print a series of 19 capital S’s as opposed to the actual string.

To simplify, the output I’m getting if prepare db "Preparing..." is near the top of my code looks like this:

Booting from Hard Disk...

If that line of code is at the bottom, then it looks like this:

Booting from Hard Disk...
SSSSSSSSSSSSSSSSSSSSSS

But I want it to look like this:

Booting from Hard Disk...
Preparing to Launch...