Некоторые значения гекса не выводятся - PullRequest
1 голос
/ 14 марта 2012

Я сделал эту программу, которая будет выводить символ ascii и его код цвета, сопоставляя их значение в гексаМоя проблема в том, что гекса из 7-13 не появляется.

.model small
.code
org 100h
s:jmp main
b dB 0h
d dB 000h
main proc


x:call color
mov ah,2
mov dl,b
int 21h
inc b
cmp b,14
jna x
int 20h

color proc
mov ah,9
mov al,''
mov bl,d
mov cx,1
int 10h
inc d
ret
color endp

main endp
end s

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Проблема в том, что символы в этом диапазоне не имеют изображения (глифа) для отображения, но используются в качестве управляющих символов, таких как табуляция и новая строка.

См. Эту таблицу http://www.asciitable.com/

0 голосов
/ 15 марта 2012

Во-первых, можете ли вы сказать мне, где преподается класс, где домашняя работа включает в себя написание 16-битных программных прерываний x86 ASM и DOS? Я просто думаю, что это здорово, что некоторые школы заботятся о преподавании классики. : -)

Далее я хочу уточнить, что делает ваша программа: вы пытаетесь продемонстрировать все 16 цветов в таблице атрибутов цвета BIOS , правильно? А какие символы вы хотите напечатать? Как уже ответил Бо Перссон , вы не можете печатать символы низкого ASCII, потому что они просто не могут быть напечатаны.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...