Рисование прямоугольника - Assembler
Формулировка задачи:
Подскажите,пожалуйста,каким образом можно нарисовать прямоугольник с заданными координатами в ассемблер?
Решение задачи: «Рисование прямоугольника»
textual
Листинг программы
- .model small
- .stack 100h
- .data
- chr db 'F'
- x1 dw 10 ; col
- y1 dw 10 ; row
- x2 dw 50
- y2 dw 20
- color db 3
- .code
- begin:
- mov ax, @data
- mov ds, ax
- mov es, ax
- mov ah, 0 ; 0 - установить видеорежим
- mov al, 13h ; Видеорежим = 13h (графика, 320х200)
- int 10h ; Прерывание - видео сервис.
- mov cx, x1 ; устанавливаем координату Х (откуда будем рисовать)
- mov dx, y1 ; устанавливаем координату Y
- mov ah, 0Ch ; Номер функции установки точки
- ; CX - строка (Y) ; DX - столбец (Х)
- xor bh, bh ; видеостраница - 0
- mov al, color ; устанавливаем цвет
- c1:
- int 10h ; вызываем прерывание и ставим точку
- cmp dx, y2 ; сравниваем со значением y2
- jne lp ; если не равно - goto LP
- cmp cx, x2 ; если равно - сравниваем с Х2
- jne lp2 ; не равно - goto lp2
- jmp ex ; иначе - выходим из цикла (т.к. половину прямоугольника мы нарисовали)
- lp:
- inc dx ; увеличиваем координату
- jmp c1
- lp2:
- inc cx
- jmp c1
- ex:
- ; аналогичный цикл на достроение 2 части прямоугольника
- c2:
- int 10h
- cmp dx, y1
- jne lp3
- cmp cx, x1
- jne lp4
- jmp ex2
- lp3:
- dec dx
- jmp c2
- lp4:
- dec cx
- jmp c2
- ex2:
- mov ah, 1
- int 21h
- mov ax, 4c00h
- int 21h
- end begin
Объяснение кода листинга программы
- Определение модели памяти -
.model small
- Определение размера стека -
.stack 100h
- Объявление переменных:
chr db 'F'
- символьная переменная chr со значением 'F'x1 dw 10
- переменная x1 с размером слова (dw) и значением 10y1 dw 10
- переменная y1 с размером слова (dw) и значением 10x2 dw 50
- переменная x2 с размером слова (dw) и значением 50y2 dw 20
- переменная y2 с размером слова (dw) и значением 20color db 3
- байтовая переменная color со значением 3
- Определение сегментов кода и данных:
mov ax, @data
mov ds, ax
mov es, ax
- Установка видеорежима:
mov ah, 0
mov al, 13h
int 10h
- Установка начальной координаты точки для рисования прямоугольника:
mov cx, x1
mov dx, y1
mov ah, 0Ch
xor bh, bh
mov al, color
- Цикл для рисования первой половины прямоугольника:
int 10h
cmp dx, y2
/jne lp
/cmp cx, x2
/jne lp2
/jmp ex
/lp:
/inc dx
/jmp c1
/lp2:
/inc cx
/jmp c1
- Цикл для рисования второй половины прямоугольника:
int 10h
cmp dx, y1
/jne lp3
/cmp cx, x1
/jne lp4
/jmp ex2
/lp3:
/dec dx
/jmp c2
/lp4:
/dec cx
/jmp c2
/ex2:
- Команды для завершения программы:
mov ah, 1
int 21h
mov ax, 4c00h
int 21h
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д