Как на прямоугольнике белого цвета нарисовать полосы? - Assembler
Формулировка задачи:
Нужно нарисовать на ассемблере в графическом режиме белый прямоугольник и на нем нарисовать 6 линий черного цвета, приблизительно как на скриншоте(без фона красного конечно, добавлен он для понятности), как это можно сделать? БУДУ ОЧЕНЬ благодарен за комментарии к коду!!!!
Решение задачи: «Как на прямоугольнике белого цвета нарисовать полосы?»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- White equ 15
- Black equ 0
- SizeX equ 320 shr 1
- SizeY equ 200 shr 1
- ShiftX equ (320-SizeX) shr 1
- ShiftY equ (200-SizeY) shr 1
- .code
- ;макрос для упрощения вызова процедур с параметрами
- invoke macro CallProc, Params
- IRP P, <Params>
- mov ax, P
- push ax
- endm
- call CallProc
- endm
- main proc
- mov ax, @data
- mov ds, ax
- mov ax, 0013h ;переключение в графический режим
- int 10h
- invoke Bar, <SizeY, SizeX, ShiftY, ShiftX, White>
- invoke Bar, <SizeY, 2, ShiftY, ShiftX+25, Black>
- invoke Bar, <SizeY, 2, ShiftY, ShiftX+52, Black>
- invoke Bar, <SizeY, 2, ShiftY, ShiftX+79, Black>
- invoke Bar, <SizeY, 2, ShiftY, ShiftX+106, Black>
- invoke Bar, <SizeY, 2, ShiftY, ShiftX+133, Black>
- ;ожидание нажатия клавиши
- mov ah, 10h
- int 16h
- mov ax, 0003h ;переключение в текстовый режим
- int 10h
- mov ax, 4C00h
- int 21h
- main endp
- ;рисование полосы (залитого прямоугольника)
- ;на входе:
- ; color - цвет заливки
- ; x_pos, y_pos - координаты левого верхнего угла
- ; x_size, y_size - размеры прямоугольника
- ;на выходе:
- ; -
- Bar proc color: word, x_pos:word, y_pos: word, x_size: word, y_size: word
- push bp ;формирование кадра параметров
- mov bp, sp
- push ax ;сохранение регистров
- push bx
- push cx
- push dx
- push si
- push di
- mov ah, 0Ch ; настройка параметров для вызова функции 0Ch
- mov al, byte ptr color ;цвет точек
- mov bh, 0 ;номер видеостраницы
- mov dx, y_pos ;строка
- mov cx, x_pos ;колонка
- mov di, y_size
- @@Vertical:
- mov cx, x_pos ;колонка
- mov si, x_size ;вывести x_size точек в горизонтальной линии
- @@Horizontal:
- int 10h ;вывести точку
- inc cx ;прирастить координату x
- dec si
- jnz @@Horizontal
- inc dx ;переход к следующей горизонтальной линии с
- dec di
- jnz @@Vertical
- pop di ;восстановление рагистров
- pop si
- pop dx
- pop cx
- pop bx
- pop ax
- pop bp
- ret 10 ;удаление параметров из стека
- Bar endp
- end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д