Рисование прямоугольника - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д