You are definitely right, the code inside back label should be rewritten like this:
back:
jb TI,$
mov A,P0
mov SBUF,A
sjmp back
Coding back
label like I did before guarantee you that you are not going to move any data to SBUF until it finishes sending the last data.
There is one detail here to take into account, remember that serial port interrrupts (by receiving or transmitting) are not cleared automatically, so in the code before I am assuming that you cleared the TI interrupt flag manually.