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

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

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

Кто нибудь может помочь по TASM. Дано программа которая выводит на экран прямоугольник. Можете помочь мне закрасит ее полностью.Спасибо всем.
.model small
.stack 100h
 
VGA_mode        equ 13h ; 320x200 256 цветный графический режим
color           equ 2       ; цвет линий
x_sise      equ 300 ; ширина прямоугольника в пикселях
y_sise      equ 100 ; высота прямоугольника в пикселях
x_pos       equ 10      ; положение нижнего левого угла прямоуг-ка
y_pos       equ 50
.code
start:
set_mode:                
mov     ah,00h          ; вызов нулевой функции BIOS
mov     al,VGA_mode     ; и инициализация графического режима
int 10h
set_proc:
mov     ah,0Ch          ; настройка параметров для вызова функции 0Ch
mov     al,color
mov     cx,x_pos
mov     dx,y_pos
line_1:             ; 
int         10h
inc         cx
cmp         cx,(x_pos + x_sise)
jne         line_1
line_2:                                             ;    
int     10h
inc         dx
cmp     dx,(y_pos + y_sise)
jne     line_2;
line_3:                                             ;   
int     10h
dec     cx
cmp     cx,x_pos
jne     line_3;
line_4:                                             ;  
int     10h
dec     dx
cmp     dx,y_pos
jne     line_4
anykey:                                            ; блок  отвечающий за завершение приложения
mov     ah,1                             ; при нажатии любой клавиши
int     16h                              ; вызов 16h прерывания BIOS, определения
jz      anykey                        ; наличия введенного символа
int     21h
   end  start

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

textual
Листинг программы
.model small
.stack 100h
 
VGA_mode        equ 13h ; 320x200 256 цветный графический режим
color           equ 2       ; цвет линий
x_size      equ 300 ; ширина прямоугольника в пикселях
y_size      equ 100 ; высота прямоугольника в пикселях
x_pos       equ 10      ; положение нижнего левого угла прямоуг-ка
y_pos       equ 50
.code
start:
set_mode:
        mov     ah,     00h             ; вызов нулевой функции BIOS
        mov     al,     VGA_mode        ; и инициализация графического режима
        int     10h
 
        mov     ah,     0Ch             ; настройка параметров для вызова функции 0Ch
        mov     al,     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
 
 
anykey:                                 ; блок  отвечающий за завершение приложения
        mov     ah,     1               ; при нажатии любой клавиши
        int     16h                     ; вызов 16h прерывания BIOS, определения
        jz      anykey                  ; наличия введенного символа
        mov     ah,     0
        int     16h
 
        mov     ax,     0003h
        int     10h
 
        mov     ax,     4C00h
        int     21h
   end  start

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

  1. Установка начального регистра для видеорежима: mov ah, 00h; mov al, VGA_mode; int 10h
  2. Установка цвета точек: mov ah, 0Ch; mov al, color; mov bh, 0; mov dx, y_pos; mov cx, x_pos
  3. Цикл для вывода горизонтальных линий: @@Horizontal
  4. Цикл для вывода вертикальных линий: @@Vertical
  5. Блок обработки нажатия клавиши: anykey
  6. Завершение приложения: mov ax, 0003h; int 10h
  7. Вывод сообщения об ошибке: mov ax, 4C00h; int 21h

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

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