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