Как на прямоугольнике белого цвета нарисовать полосы? - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы