Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / Лабы1 / 666

.txt
Скачиваний:
14
Добавлен:
18.02.2017
Размер:
2.97 Кб
Скачать
;Измените программу так, чтобы она рисовала на экране 16 прямоугольников разного цвета (от 0
;до 15), расположенных в виде матрицы 4х4, размером hi = 50, len = 8, x0 = 3, y0 = 20, шаг
;по оси X равен 8 байт, а по оси Y - 30 точек.
TITLE GRAPF.EXE
STACKSG SEGMENT PARA STACK 'Stack'
DW 128 DUP(?)
STACKSG ENDS
DATASG SEGMENT PARA 'Data'
x0 dw 0
y0 db 0
len dw 0
hi dw 0
xy dw 0
color db 0
xcnt db 0
ycnt db 0
shx dw 0
shy db 0
DATASG ENDS
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:NOTHING
RECT PROC FAR ;Подпрограмма для рисования прямоугольника
MOV AL,y0 ;Y-координата начала
MOV BL,80 ;Число байт в строке
MUL BL ;AL*BL->AX
ADD AX,x0 ;Прибавим смещение курсора
MOV xy,AX ;Сохраним
MOV CX,hi ;Высота прямоугольника (точек)
MOV SI,0 ;Смещение от угла
L2: PUSH CX ;Сохраним в стеке
MOV CX,len ;Ширина прямоугольника (байт)
MOV BX,xy ;Смещение от 0,0
MOV AL,color ;Зададим цвет
L1: MOV ES:[BX][SI],AL ;Вывод в видеобуфер
INC BX ;К следующему байту
LOOP L1 ;Цикл в строке
ADD SI,80 ;Прибавим длину строки
POP CX ;Высоту стека
LOOP L2 ;Цикл по строкам
RET ;Возврат в программу
RECT ENDP

MAIN PROC
MOV AH,00 ;Установим графический режим
MOV AL,10H ;640*350 точек
INT 10H
; Установим адресацию к видеобуферу
MOV AX,0A000H
MOV ES,AX
MOV BX,0
; Установим режим записи 2
MOV DX,3CEH ;Адресный регистр контроллера
MOV AL,5 ;Регистр режима
OUT DX,AL ;Установка адресуемого регистра
MOV DX,3CFH ;Регистр данных
MOV AL,2 ;Режим 2
OUT DX,AL ;Установка режима записи
; Установим маску битов 0FFH
MOV DX,3CEH ;Адресный регистр контроллера
MOV AL,8 ;Регистр маски битов
OUT DX,AX ;Установка адресуемого регистра
INC DX ;Регистр данных
MOV AL,0FFH ;Все пиксели байта размаскировать
OUT DX,AL ;Установка маски битов

MOV color,0 ;Задаём изначальный цвет
MOV hi,50 ;Высота (в пикселях)
MOV len,8 ;Ширина (в байтах)
MOV y0,20 ;Начальная координата Y
MOV shy,30 ;Смещение по оси Y
MOV ycnt,4 ;Число строк
Y: MOV x0,3 ;начальная координата X
MOV shx,8 ;Смещение по оси X
MOV xcnt,4 ;Число столбцов
X: CALL RECT ;Вызов процедуры
MOV BX,x0 ;Запишем в регистр первоначальное положение по X
ADD BX,len ;Прибавляем длину прямоугольника
ADD BX,shx ;Прибавляем сдвиг
MOV x0,BX ;в переменную
INC color ;Изменяем цвет на следующий
DEC xcnt ;Уменьшаем счётчик X
JNZ X ;Конец цикла X
MOV BH,y0 ;Запишем в регистр первоначальное положение по Y
ADD BH,40 ;Прибавляем высоту прямоугольника
ADD BH,shy ;Прибавляем сдвиг
MOV y0,BH ;в переменную
DEC ycnt ;Уменьшаем счётчик Y
JNZ Y ;Конец цикла Y

;завершаем программу
MOV AH,00H ;ввод с клавиатуры
INT 16H
CMP AL,00 ;Проверка на <Enter>
JZ EXIT ;Если да, то exit
EXIT:
MOV AH,00H ;Установим текстовый режим
MOV AL,03H
INT 10H
MOV AX,4C00H ;Код выхода
INT 21H
RET
MAIN ENDP
CODESG ENDS
END MAIN
Соседние файлы в папке Лабы1