Ваша проблема исходит из строки
cmp WORD [bx], 0
Это говорит: "сравните слово по адресу, на который указывает bx, с 0."Однако строка, на которую вы смотрите, состоит из байтов, а не слов. Для того чтобы это сравнение было успешным, ему нужно было бы найти 2 байта подряд (иначе слово), которые оба содержат нули.
Это не происходит в конце HELLO_MSG, поэтому он просто продолжает печататьсимволы, идущие вправо через следующую строку (GOODBYE_MSG), пока, наконец, не найдет пару в times 510-($-$$) db 0
.
Это также объясняет дополнительное пространство, которое вы видите, так как вы фактически печатаете 0 в концеHELLO_MSG.