Консультация № 181806
10.01.2011, 06:25
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос или решить срочно такую задачу: вывести на экран матрицу символов таблицы ASCII размером 16х16, чередуя выводимые символы пробелами. Размер матрицы, цвет символов, а также подсветка вводятся с клавиатуры.
Место вывода матрицы на экран определяется с помощью указателя устройства "мышь".
Спасибо

Обсуждение

давно
Старший Модератор
31795
6196
10.01.2011, 15:50
общий
это ответ
Здравствуйте, Посетитель - 337532!

Смотрите приложение. TASM, MS-DOS, 3-й текстовый режим.
Выбор фона и цвета выводимых символов производится с помощью мыши, я думаю так наглляднее, чем простой ввод данных с клавиатуры.
Удачи!

Приложение:
model tiny,pascal
.code
org 100h
.286
;уставливаем текстовый режим
begin: mov ax,3
int 10h
;инициализируем мышу
xor ax,ax
int 33h
;устанавливаем сегментный режим для строковых команд
mov ax,0b800h
mov es,ax
;получаем цвет фона
call GetData ,0,offset dbEnterFon,szEnterFon
;переводим в координату
shr cx,3
sub cx,13
;получаем соответсвующий цвет
and cl,07h
mov dbFon,cl
;получаем цвет символов
CALL GetData ,0,offset dbEnterColor,szEnterColor
;переводим в координату
shr cx,3
sub cx,13
;получаем соответсвующий цвет
and cl,0Fh
mov dbColor,cl
;чистим экран
xor di,di
xor ax,ax
mov cx,25*80
rep stosw
;получаем позицию вывода
CALL GetData ,0,offset dbEnterPosition,szEnterPosition
;преводим в координаты
shr cx,2
shr dx,2
;считаем смещение для строковых команд
mov di,cx
mov ax,dx
mov cx,80
xor dx,dx
mul cx
add di,ax
;формируем атрибут вывода
mov ah,dbFon
shl ah,4
mov al,dbColor
or ah,al
xor al,al
;внешний цикл по строкам
mov cx,16
@@08: push cx
push di
;внутренний цикл в строке
mov cx,16
@@09: stosw
;записываем пробел
push ax
mov ax,20h
stosw
pop ax
;следующий символ в таблице
inc al
loop @@09
;адрес следующей строки
pop di
add di,320
pop cx
loop @@08
;возвращаемся в ДОС
xor ax,ax
int 16h
ret
;данные пользователя
dbFon db 6
dbColor db 15
;подпрограмма ввода данных
GetData proc GD_a:word , GD_b:word , GD_c:word
;вывод названия параметра
mov di,GD_a
mov si,GD_b
mov cx,GD_c
rep movsb
;показываем и гасим мышу
GD_0: mov ax,1
int 33h
mov ax,2
int 33h
;получаем состояние и координаты мыши
mov ax,5
xor bx,bx
int 33h
;проверяем нажатие нужной клавиши
or bx,bx
jz GD_0
ret
endp
;
;макрогенератор формирования строки байтов
Generator macro m_a , m_b
irpc simb,<m_a>
db '&simb&',0Fh
endm
IndexColor = 0
rept m_b
db 20h,IndexColor
IndexColor = indexColor + 10h
endm
endm
;формируем строку байтов фона
dbEnterFon label byte
Generator <select fon :>,8
szEnterFon equ $ - dbEnterFon
;
;формируем строку байтов цвета
dbEnterColor label byte
Generator <select color:>,16
szEnterColor equ $ - dbEnterColor
;
;формруем строку байтов позиции
dbEnterPosition label byte
Generator <select positions>,1
szEnterPosition equ $ - dbEnterPosition
end begin
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа