Консультация № 178550
21.05.2010, 18:03
43.38 руб.
0 4 1
Уважаемые эксперты! Требуется написать программу(с комментариями) Вывести на экран таблицу символов ASCII, используя для вывода символов различные атрибуты цвета и фона. Вывод на экран в текстовом режиме с использованием средств DOS и BIOS.
Бонусное задание: выполнить задание в двух вариантах, используя вывод на экран с помощью функций BIOS, и вывод напрямую в видеопамять.)
Платформа DOS, ассемблер TASM.

Обсуждение

давно
Посетитель
7438
7205
22.05.2010, 11:44
общий
это ответ
Здравствуйте, Филимонов Алексей Викторович.
Программа для вывода таблицы ASCII
Сначала при помощи функции 1302h прерывания БИОС формируем аттрибуты,
а затем в те же позиции выводим символы при помощи функции 9 прерывания ДОС
Код:

.model tiny
.code
.startup
call PrintAttrib ;Выводим на экран аттрибуты с помощью ф-и 13h прерывания 10h
call PrintTable ;Выводим на экран символы с помощью ф-и 9 прерывания 21h

mov ah, 0 ;ждем нажатие на клавишу
int 16h

mov ax, 4c00h ;выход
int 21h

;Выводим табличку ASCII кодов при помощи функции 9 прерывания 21h
;Выводим строками по 16 символов
PrintTable proc
mov dx, 0520h ;начальная позиция на экране
mov cx, 16 ;16 строк
mov al, 0 ;начинаем с 0
PrintSymbolLoop: ;цикл по строкам
push cx ;сохраним счетчик строк
lea di, String ;сформируем в данной строке строку для вывода
mov cx, 16 ;в строке 16 символов
FormSymbolRowLoop: ;цикл формирования строки
stosb ;очередной символ из al
inc al ;инкремент кода символа
loop FormSymbolRowLoop ;16 раз
push dx ;сохраним позицию курсора
push ax ;сохраним код последнего символа
mov bh, 0 ;страница для курсора
mov ah, 2 ;установим позицию курсора
int 10h

mov al,'$'
stosb ;зароем строку для ф-и 9

lea dx, String
mov ah, 9
int 21h ;выведем строку

pop ax
pop dx
inc dh ;на следующую строку
pop cx
loop PrintSymbolLoop
ret
PrintTable endp

;Выводим табличку аттрибутов при помощи функции 1302h прерывания 10h
;Выводим строками по 16 символов
PrintAttrib proc
mov al, ' ' ;любой код
lea di, String ;сформируем в данной строке строку для вывода
lea si, Attributes ;строка аттрибутов
mov cx, 16 ;в строке 16 символов
FormRowLoop: ;цикл формирования строки
stosb ;символ из al
movsb ;очередной аттрибут
loop FormRowLoop ;16 раз

mov dx, 0520h ;начальная позиция на экране
mov cx, 16 ;14 строк
PrintLoop: ;цикл по строкам
push cx ;сохраним счетчик строк
push dx ;сохраним позицию курсора
mov ax, 1302h ;функция вывода строки
lea bp, String ;es:bp - адрес строки
mov cx, 16 ;число символов
mov bh, 0 ;страница видеопамяти
int 10h ;сервис БИОС
pop dx
inc dh ;на следующую строку
pop cx
loop PrintLoop ;и так 16 раз
ret
PrintAttrib endp

.data
;Строка с примерными аттрибутами
Attributes db 09h,12h,20h,34h,45h,56h,67h,79h,0ah,1bh,2ch,3dh,4eh,5fh,60h,71h

.data?
;строка для формирования данных для вывода
String dw 16 dup (?)

end
5
Спасибо! благодарен.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
22.05.2010, 15:55
общий
а через что вы запускаете программу?
Просто у меня всю таблицу не выводит через TASM
давно
Посетитель
7438
7205
22.05.2010, 16:28
общий
Филимонов Алексей Викторович:
Не понял вопроса...
Делаем COM:
tasm ascii
tlink ascii /t
И заускаем ascii.com хоть самостоятельно, хоть из cmd
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
22.05.2010, 16:29
общий
а ясно вопрос исчерпан)
Форма ответа