Загружают шрифт представляющий из себя набор-маску для каждого символа, где какие пиксели должны гореть. И копируют в нужную область буфера каждый нужный символ.
Тут просто надо разобраться в двух вещах:
1. В какой кодировки у вас исходный файл, и соответственно как это было скомпилировано;
2. В какой кодировки выводит консоль, проверить командой chcp
Значит у вас не стоит нулевой символ или что у вас там сигнализирует, что конец текста для вывода. Вот он у вас и продолжает выводить весь мусор из памяти.
Очевидно же, что на две разные команды нужен разный код, иначе как их отличить. Вообще писать виртуальную машины и при этом ни разу не запустив дизассемблер это сильно.
Установив значение регистров es:di на адрес вашей переменной. Но вопрос оторванный от реальности какой-то. Эту штуку используют для обработки массивов в цикле, ибо она сама двигает указатель на следующий элемент.