Изменение фона консоли - Assembler

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

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

при нажатии кнопки очистить экран синим цветом, вывести свое имя с атрибутом мерцающий красным цветом на зеленом фоне в левом верхнем углу и плавно перемещать в правый нижний угол. вот суть задания. но проблема с самого начала. не могу сделать синий экран при нажатии клавиши. вот мой код и ошибка
Листинг программы
  1. .model small
  2. .stack 100h
  3. .code
  4. start:
  5. ;input func
  6. again:
  7. xor ax,ax
  8. int 16h
  9. cmp ah, 34
  10. jz g
  11. cmp ah, 20
  12. jz t
  13. jmp again
  14. ;window 80*25, 16 col, blue background
  15. t:
  16. mov ax, 3h ;80*25
  17. mov al, 10h ;16 colors
  18. mov bh, 1h ;blue color
  19. int 10h
  20. g:
  21. ;cout
  22. int 29h
  23. ;endl
  24. mov al,0ah
  25. int 29h
  26. jmp again
  27. exit:
  28. mov ax,4c00h
  29. int 21h
  30. end start

Решение задачи: «Изменение фона консоли»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.  
  9. .code
  10.  
  11. main    proc
  12.     mov ax,     @data
  13.     mov ds, ax
  14.  
  15.     call    ClearScreen
  16.  
  17.     mov ax, 4C00h
  18.     int 21h
  19. main    endp
  20.  
  21. ;Очистка экрана
  22. ;вход
  23. ; - нет
  24. ;выход
  25. ; - нет
  26. ClearScreen     proc
  27.         push    ax
  28.         push    bx
  29.         push    cx
  30.         push    dx
  31.  
  32.         mov     ah,     06h     ;функция SCROLL UP
  33.         mov     bh,     17h     ;атрибут для заполнения
  34.         mov     cx,     0000h   ;верхний левый угол окна
  35.         mov     dx,     24*256+79
  36.         int     10h
  37.  
  38.         pop     dx
  39.         pop     cx
  40.         pop     bx
  41.         pop     ax
  42.         ret
  43. ClearScreen     endp
  44.  
  45. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы