Закрасить прямоугольник зеленым цветом - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д