Во-первых, можете ли вы сказать мне, где преподается класс, где домашняя работа включает в себя написание 16-битных программных прерываний x86 ASM и DOS? Я просто думаю, что это здорово, что некоторые школы заботятся о преподавании классики. : -)
Далее я хочу уточнить, что делает ваша программа: вы пытаетесь продемонстрировать все 16 цветов в таблице атрибутов цвета BIOS , правильно? А какие символы вы хотите напечатать? Как уже ответил Бо Перссон , вы не можете печатать символы низкого ASCII, потому что они просто не могут быть напечатаны.
Вы используете 2 отдельных прерывания в вашем коде, и я думаю, что они могут конфликтовать. Первый - int 21h / ah = 02h : записать символ в STDOUT. Это прерывание DOS. Второй: int 10h / ah = 09h : вывести на экран символ и атрибут. Это видео прерывание, и я думаю, что это то, что вам нужно. Попробуйте положиться на это второе прерывание. Запишите 30h (ASCII '0') в al--, который должен печатать нули разного цвета.