Изменение фона консоли - 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

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

  1. .model small - Указывает модель сегментного регистра, используемую в программе. Сегментный регистр используется для адресации памяти в защищенном режиме, и его использование может быть полезно при работе с низкоуровневым кодом, таким как код управления процессором или драйверы устройств. Модель small обычно используется для программ, которые не требуют большой памяти и не используют сегменты, большие, чем 64 КБ.
  2. .stack 100h - Указывает размер стека в 100 байт (100h). Стек - это область памяти, используемая для временного хранения данных при вызове процедур и функций. Размер стека должен быть достаточным для хранения всех локальных переменных, которые могут быть созданы в процедуре или функции, а также для хранения аргументов, передаваемых в процедуру или функцию, и возвращаемого значения.
  3. .data - Отображает сегмент данных. Сегмент данных - это область памяти, используемая для хранения данных, которые могут быть доступны для чтения и записи во время выполнения программы.
  4. .code - Отображает сегмент кода. Сегмент кода - это область памяти, используемая для хранения команд, которые могут быть выполнены процессором.
  5. main proc - Определяет точку входа в программу. Точка входа - это место, с которого начинается выполнение программы.
  6. mov ax, @data - Перемещает адрес сегмента данных в регистр AX. Это обычно делается для того, чтобы можно было использовать сегмент данных в качестве сегмента для операций чтения и записи.
  7. mov ds, ax - Устанавливает сегмент данных равным сегменту, хранящемуся в регистре AX. Это обычно делается для того, чтобы можно было использовать сегмент данных в качестве сегмента для операций чтения и записи.
  8. call ClearScreen - Вызывает процедуру ClearScreen. В данном случае, это вызывает процедуру очистки экрана.
  9. mov ax, 4C00h - Перемещает значение 4C00h в регистр AX. Значение 4C00h обычно используется как код завершения программы.
  10. int 21h - Выполняет интеррутацию с номером 21h. Интеррутация - это способ взаимодействия между программами и операционной системой. Номер 21h обычно используется как код завершения программы.
  11. ClearScreen proc - Определяет процедуру очистки экрана.
  12. mov ah, 06h - Перемещает значение 06h в регистр AH. Значение 06h обычно используется как функция SCROLL UP.
  13. mov bh, 17h - Перемещает значение 17h в регистр BH. Значение 17h обычно используется как атрибут для заполнения.
  14. mov cx, 0000h - Перемещает значение 0000h в регистр CX. Значение 0000h обычно используется как верхний левый угол окна.
  15. *mov dx, 24256+79* - Перемещает значение 24256+79 в регистр DX. Значение 24*256+79 обычно используется как нижний правый угол окна.
  16. int 10h - Выполняет интеррутацию с номером 10h. Интеррутация - это способ взаимодействия между программами и операционной системой. Номер 10h обычно используется как функция вывода символов.
  17. pop dx - Восстанавливает значение регистра DX из стека.
  18. pop cx - Восстанавливает значение регистра CX из стека.
  19. pop bx - Восстанавливает значение регистра BX из стека.
  20. pop ax - Восстанавливает значение регистра AX из стека.
  21. ret - Возвращает управление в вызывающую программу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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