Закрасить прямоугольник зеленым цветом - 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
Объяснение кода листинга программы
- Установка начального регистра для видеорежима: mov ah, 00h; mov al, VGA_mode; int 10h
- Установка цвета точек: mov ah, 0Ch; mov al, color; mov bh, 0; mov dx, y_pos; mov cx, x_pos
- Цикл для вывода горизонтальных линий: @@Horizontal
- Цикл для вывода вертикальных линий: @@Vertical
- Блок обработки нажатия клавиши: anykey
- Завершение приложения: mov ax, 0003h; int 10h
- Вывод сообщения об ошибке: mov ax, 4C00h; int 21h
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д