Gosh darn, it's been a while... You might find this to be marginally more efficient.
.word $c000 ; file header
*=$c000
MAIN: LDX #$00
Loop: LDA hello,x
; CMP #$00 - no need for explicit compare as zero
; flags are set on LDA
BEQ Out
JSR CHROUT
INX
; JMP Loop - 3 bytes. Why waste of a byte and cycle...
BNE Loop ; when this will do just as well...
Out: RTS
hello: .asc "hELLO, WORLD!"
.byt 13,0
Saving 3 bytes and cycles might seem a bit odd to some of you people out there but it was the ethos of the 6502 hacker...