Ввод клавиш или комбинаций и вывод соответствующих сообщений - Assembler
Формулировка задачи:
Преподаватель уволился, а лабу нужно сделать. Нам прочитали всего 4 лекции, а новый, заменяющий, преподаватель в ассемблере только основы знает, потому будет смотреть только на результат и помогать не будет. Помогите, пожалуйста, понять где ошибка. Программа "собирается" но в итоге выводит сообщение с кучей символов и пробелов и на клавиатуру не реагирует. Само задание звучит так: Написать программу, которая проверяет нажатие клавиш (комбинаций клавиш) в соответствии с вариантом задания и выводит соответствующие сообщения. В моем случае F8 и CtrlF8
.MODEL Tiny .CODE ORG 100h Start: mov ah,9 lea dx,Question int 21h ; mess output RepeatEnter: xor ah,0 ; AH = 0 int 16h ; wait pressed ;or al,20h cmp al,66h je F8Pressed ; pressed 'F8' cmp al,101 jne RepeatEnter ; pressed not 'CtrlF8' (not 'F8') lea dx,CtrlF8Message ; pressed 'CtrlF8' jmp ShowMessage F8Pressed: lea dx,F8Message ShowMessage: mov ah,9 int 21h ; message output int 20h ; exit Question db 'Choose your side :) (F8/CtrlF8)?$' F8Message db 13,10,'PRESSED "F8"$' CtrlF8Message db 13,10,'PRESSED "CtrlF8"$' END Start
Решение задачи: «Ввод клавиш или комбинаций и вывод соответствующих сообщений»
textual
Листинг программы
stek segment stack 'stack' db 200h dup (?) stek ends data segment Question db 'Choose your side :) (F8/CtrlF8)?$' F8Message db 'PRESSED "F8"$' CtrlF8Message db 'PRESSED "CtrlF8"$' data ends code segment assume cs:code, ds:data Start: mov ax,data mov ds,ax mov ah,9 lea dx,Question int 21h ; mess output RepeatEnter: xor ah,ah ; AH = 0 int 16h ; wait pressed cmp ah,42h je F8Pressed ; pressed 'F8' cmp ah,65h jne RepeatEnter ; pressed not 'CtrlF8' (not 'F8') lea dx,CtrlF8Message ; pressed 'CtrlF8' jmp ShowMessage F8Pressed: lea dx,F8Message ShowMessage: mov ah,9 int 21h ; message output ; int 20h ; exit mov ah, 4ch int 21h code ends END Start
Объяснение кода листинга программы
- В начале кода определены сегменты стека и данных, а также переменные, используемые в коде.
- Код начинается с перемещения сегмента данных в регистр AX с помощью команды MOV.
- Затем команда MOV используется для вывода сообщения с помощью функции BIOS INT 21h.
- Далее следует цикл, который продолжается до тех пор, пока не будет нажата клавиша 'F8' или 'CtrlF8'.
- Если нажата клавиша 'F8', то выводится соответствующее сообщение с помощью команды LEA и функции BIOS INT 21h.
- Если нажата клавиша 'CtrlF8', то выводится соответствующее сообщение с помощью команды LEA и функции BIOS INT 21h.
- После вывода сообщения цикл повторяется.
- Если ни одна из клавиш не нажата, то выводится сообщение об ошибке.
- После выхода из цикла выводится сообщение с помощью функции BIOS INT 21h.
- В конце кода выводится сообщение об успешном выполнении программы с помощью функции BIOS INT 21h.
- Функция BIOS INT 20h используется для выхода из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д