Как на прямоугольнике белого цвета нарисовать полосы? - Assembler

Узнай цену своей работы

Формулировка задачи:

Нужно нарисовать на ассемблере в графическом режиме белый прямоугольник и на нем нарисовать 6 линий черного цвета, приблизительно как на скриншоте(без фона красного конечно, добавлен он для понятности), как это можно сделать? БУДУ ОЧЕНЬ благодарен за комментарии к коду!!!!

Решение задачи: «Как на прямоугольнике белого цвета нарисовать полосы?»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         White   equ     15
  9.         Black   equ     0
  10.         SizeX   equ     320 shr 1
  11.         SizeY   equ     200 shr 1
  12.         ShiftX  equ     (320-SizeX) shr 1
  13.         ShiftY  equ     (200-SizeY) shr 1
  14. .code
  15.  
  16. ;макрос для упрощения вызова процедур с параметрами
  17. invoke  macro   CallProc, Params
  18.         IRP     P, <Params>
  19.                 mov     ax,     P
  20.                 push    ax
  21.         endm
  22.         call    CallProc
  23. endm
  24.  
  25. main    proc
  26.         mov     ax,     @data
  27.         mov     ds,     ax
  28.  
  29.         mov     ax,     0013h   ;переключение в графический режим
  30.         int     10h
  31.  
  32.         invoke  Bar, <SizeY, SizeX, ShiftY, ShiftX, White>
  33.         invoke  Bar, <SizeY, 2, ShiftY, ShiftX+25, Black>
  34.         invoke  Bar, <SizeY, 2, ShiftY, ShiftX+52, Black>
  35.         invoke  Bar, <SizeY, 2, ShiftY, ShiftX+79, Black>
  36.         invoke  Bar, <SizeY, 2, ShiftY, ShiftX+106, Black>
  37.         invoke  Bar, <SizeY, 2, ShiftY, ShiftX+133, Black>
  38.  
  39.         ;ожидание нажатия клавиши
  40.         mov     ah,     10h
  41.         int     16h
  42.  
  43.         mov     ax,     0003h   ;переключение в текстовый режим
  44.         int     10h
  45.         mov     ax,     4C00h
  46.         int     21h
  47. main    endp
  48.  
  49. ;рисование полосы (залитого прямоугольника)
  50. ;на входе:
  51. ; color - цвет заливки
  52. ; x_pos, y_pos - координаты левого верхнего угла
  53. ; x_size, y_size - размеры прямоугольника
  54. ;на выходе:
  55. ; -
  56. Bar     proc    color: word, x_pos:word, y_pos: word, x_size: word, y_size: word
  57.         push    bp                      ;формирование кадра параметров
  58.         mov     bp,     sp
  59.  
  60.         push    ax                      ;сохранение регистров
  61.         push    bx
  62.         push    cx
  63.         push    dx
  64.         push    si
  65.         push    di
  66.  
  67.         mov     ah,     0Ch             ; настройка параметров для вызова функции 0Ch
  68.         mov     al,     byte ptr color           ;цвет точек
  69.         mov     bh,     0               ;номер видеостраницы
  70.         mov     dx,     y_pos           ;строка
  71.         mov     cx,     x_pos           ;колонка
  72.  
  73.         mov     di,     y_size
  74. @@Vertical:
  75.  
  76.         mov     cx,     x_pos           ;колонка
  77.         mov     si,     x_size          ;вывести x_size точек в горизонтальной линии
  78. @@Horizontal:
  79.         int     10h                     ;вывести точку
  80.         inc     cx                      ;прирастить координату x
  81.         dec     si
  82.         jnz     @@Horizontal
  83.  
  84.         inc     dx                      ;переход к следующей горизонтальной линии с
  85.         dec     di
  86.         jnz     @@Vertical
  87.  
  88.         pop     di                      ;восстановление рагистров
  89.         pop     si
  90.         pop     dx
  91.         pop     cx
  92.         pop     bx
  93.         pop     ax
  94.  
  95.         pop     bp
  96.         ret     10                      ;удаление параметров из стека
  97. Bar     endp
  98.  
  99. end     main

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


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

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

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы