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

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

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

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

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

textual
Листинг программы
.model small
.stack 100h
.data
chr db 'F'
x1 dw 10  ; col
y1 dw 10  ; row
x2 dw 50
y2 dw 20
color db 3
 
.code 
begin:
    mov ax, @data
    mov ds, ax
    mov es, ax
    
    mov ah, 0       ; 0 - установить видеорежим
    mov al, 13h     ; Видеорежим = 13h (графика, 320х200)
    int 10h         ; Прерывание - видео сервис.
       
    mov cx, x1      ; устанавливаем координату Х (откуда будем рисовать)
    mov dx, y1      ; устанавливаем координату Y
    mov ah, 0Ch     ; Номер функции установки точки 
                    ; CX - строка (Y) ; DX - столбец (Х)
    xor bh, bh      ; видеостраница - 0
    mov al, color   ; устанавливаем цвет   
    
    
c1:                 
    int 10h         ; вызываем прерывание и ставим точку
    cmp dx, y2      ; сравниваем со значением y2
    jne lp          ; если не равно - goto LP
    cmp cx, x2      ; если равно - сравниваем с Х2
    jne lp2         ; не равно - goto lp2
    jmp ex          ; иначе - выходим из цикла (т.к. половину прямоугольника мы нарисовали)
lp:
    inc dx          ; увеличиваем координату
    jmp c1 
lp2:
    inc cx
    jmp c1 
     
ex:  
 
; аналогичный цикл на достроение 2 части прямоугольника  
c2:  
    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:    
    mov ah, 1
    int 21h
    
    mov ax, 4c00h
    int 21h    
 
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