Изменение фона консоли - Assembler
Формулировка задачи:
при нажатии кнопки очистить экран синим цветом, вывести свое имя с атрибутом мерцающий красным цветом на зеленом фоне в левом верхнем углу и плавно перемещать в правый нижний угол.
вот суть задания. но проблема с самого начала. не могу сделать синий экран при нажатии клавиши. вот мой код и ошибка
Листинг программы
- .model small
- .stack 100h
- .code
- start:
- ;input func
- again:
- xor ax,ax
- int 16h
- cmp ah, 34
- jz g
- cmp ah, 20
- jz t
- jmp again
- ;window 80*25, 16 col, blue background
- t:
- mov ax, 3h ;80*25
- mov al, 10h ;16 colors
- mov bh, 1h ;blue color
- int 10h
- g:
- ;cout
- int 29h
- ;endl
- mov al,0ah
- int 29h
- jmp again
- exit:
- mov ax,4c00h
- int 21h
- end start
Решение задачи: «Изменение фона консоли»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- .code
- main proc
- mov ax, @data
- mov ds, ax
- call ClearScreen
- mov ax, 4C00h
- int 21h
- main endp
- ;Очистка экрана
- ;вход
- ; - нет
- ;выход
- ; - нет
- ClearScreen proc
- push ax
- push bx
- push cx
- push dx
- mov ah, 06h ;функция SCROLL UP
- mov bh, 17h ;атрибут для заполнения
- mov cx, 0000h ;верхний левый угол окна
- mov dx, 24*256+79
- int 10h
- pop dx
- pop cx
- pop bx
- pop ax
- ret
- ClearScreen endp
- end main
Объяснение кода листинга программы
- .model small - Указывает модель сегментного регистра, используемую в программе. Сегментный регистр используется для адресации памяти в защищенном режиме, и его использование может быть полезно при работе с низкоуровневым кодом, таким как код управления процессором или драйверы устройств.
Модель
small
обычно используется для программ, которые не требуют большой памяти и не используют сегменты, большие, чем 64 КБ. - .stack 100h - Указывает размер стека в 100 байт (100h). Стек - это область памяти, используемая для временного хранения данных при вызове процедур и функций. Размер стека должен быть достаточным для хранения всех локальных переменных, которые могут быть созданы в процедуре или функции, а также для хранения аргументов, передаваемых в процедуру или функцию, и возвращаемого значения.
- .data - Отображает сегмент данных. Сегмент данных - это область памяти, используемая для хранения данных, которые могут быть доступны для чтения и записи во время выполнения программы.
- .code - Отображает сегмент кода. Сегмент кода - это область памяти, используемая для хранения команд, которые могут быть выполнены процессором.
- main proc - Определяет точку входа в программу. Точка входа - это место, с которого начинается выполнение программы.
- mov ax, @data - Перемещает адрес сегмента данных в регистр AX. Это обычно делается для того, чтобы можно было использовать сегмент данных в качестве сегмента для операций чтения и записи.
- mov ds, ax - Устанавливает сегмент данных равным сегменту, хранящемуся в регистре AX. Это обычно делается для того, чтобы можно было использовать сегмент данных в качестве сегмента для операций чтения и записи.
- call ClearScreen - Вызывает процедуру ClearScreen. В данном случае, это вызывает процедуру очистки экрана.
- mov ax, 4C00h - Перемещает значение 4C00h в регистр AX. Значение 4C00h обычно используется как код завершения программы.
- int 21h - Выполняет интеррутацию с номером 21h. Интеррутация - это способ взаимодействия между программами и операционной системой. Номер 21h обычно используется как код завершения программы.
- ClearScreen proc - Определяет процедуру очистки экрана.
- mov ah, 06h - Перемещает значение 06h в регистр AH. Значение 06h обычно используется как функция SCROLL UP.
- mov bh, 17h - Перемещает значение 17h в регистр BH. Значение 17h обычно используется как атрибут для заполнения.
- mov cx, 0000h - Перемещает значение 0000h в регистр CX. Значение 0000h обычно используется как верхний левый угол окна.
- *mov dx, 24256+79* - Перемещает значение 24256+79 в регистр DX. Значение 24*256+79 обычно используется как нижний правый угол окна.
- int 10h - Выполняет интеррутацию с номером 10h. Интеррутация - это способ взаимодействия между программами и операционной системой. Номер 10h обычно используется как функция вывода символов.
- pop dx - Восстанавливает значение регистра DX из стека.
- pop cx - Восстанавливает значение регистра CX из стека.
- pop bx - Восстанавливает значение регистра BX из стека.
- pop ax - Восстанавливает значение регистра AX из стека.
- ret - Возвращает управление в вызывающую программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д