Рисование прямоугольника - Assembler

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

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

Подскажите,пожалуйста,каким образом можно нарисовать прямоугольник с заданными координатами в ассемблер?

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

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. chr db 'F'
  5. x1 dw 10  ; col
  6. y1 dw 10  ; row
  7. x2 dw 50
  8. y2 dw 20
  9. color db 3
  10.  
  11. .code
  12. begin:
  13.     mov ax, @data
  14.     mov ds, ax
  15.     mov es, ax
  16.    
  17.     mov ah, 0       ; 0 - установить видеорежим
  18.     mov al, 13h     ; Видеорежим = 13h (графика, 320х200)
  19.     int 10h         ; Прерывание - видео сервис.
  20.        
  21.     mov cx, x1      ; устанавливаем координату Х (откуда будем рисовать)
  22.     mov dx, y1      ; устанавливаем координату Y
  23.     mov ah, 0Ch     ; Номер функции установки точки
  24.                     ; CX - строка (Y) ; DX - столбец (Х)
  25.     xor bh, bh      ; видеостраница - 0
  26.     mov al, color   ; устанавливаем цвет  
  27.    
  28.    
  29. c1:                
  30.     int 10h         ; вызываем прерывание и ставим точку
  31.     cmp dx, y2      ; сравниваем со значением y2
  32.     jne lp          ; если не равно - goto LP
  33.     cmp cx, x2      ; если равно - сравниваем с Х2
  34.     jne lp2         ; не равно - goto lp2
  35.     jmp ex          ; иначе - выходим из цикла (т.к. половину прямоугольника мы нарисовали)
  36. lp:
  37.     inc dx          ; увеличиваем координату
  38.     jmp c1
  39. lp2:
  40.     inc cx
  41.     jmp c1
  42.      
  43. ex:  
  44.  
  45. ; аналогичный цикл на достроение 2 части прямоугольника  
  46. c2:  
  47.     int 10h
  48.     cmp dx, y1
  49.     jne lp3
  50.     cmp cx, x1
  51.     jne lp4
  52.     jmp ex2
  53. lp3:
  54.     dec dx
  55.     jmp c2
  56. lp4:
  57.     dec cx
  58.     jmp c2  
  59. ex2:    
  60.     mov ah, 1
  61.     int 21h
  62.    
  63.     mov ax, 4c00h
  64.     int 21h    
  65.  
  66. end begin

Объяснение кода листинга программы

  1. Определение модели памяти - .model small
  2. Определение размера стека - .stack 100h
  3. Объявление переменных:
    • chr db 'F' - символьная переменная chr со значением 'F'
    • x1 dw 10 - переменная x1 с размером слова (dw) и значением 10
    • y1 dw 10 - переменная y1 с размером слова (dw) и значением 10
    • x2 dw 50 - переменная x2 с размером слова (dw) и значением 50
    • y2 dw 20 - переменная y2 с размером слова (dw) и значением 20
    • color db 3 - байтовая переменная color со значением 3
  4. Определение сегментов кода и данных:
    • mov ax, @data
    • mov ds, ax
    • mov es, ax
  5. Установка видеорежима:
    • mov ah, 0
    • mov al, 13h
    • int 10h
  6. Установка начальной координаты точки для рисования прямоугольника:
    • mov cx, x1
    • mov dx, y1
    • mov ah, 0Ch
    • xor bh, bh
    • mov al, color
  7. Цикл для рисования первой половины прямоугольника:
    • int 10h
    • cmp dx, y2/jne lp/cmp cx, x2/jne lp2/jmp ex/lp:/inc dx/jmp c1/lp2:/inc cx/jmp c1
  8. Цикл для рисования второй половины прямоугольника:
    • 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:
  9. Команды для завершения программы:
    • mov ah, 1
    • int 21h
    • mov ax, 4c00h
    • int 21h

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


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

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

6   голосов , оценка 4.333 из 5

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

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

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