При нажатии клавиш A или D завершить работу приложения - Assembler
Формулировка задачи:
Пытаюсь самостоятельно изучить ассемблер, хелловорлд вобщем получилось, но чем глубже - тем сложнее) Собственно дошел до ввода с клавиатуры, и по книжке, которую изучаю, идет задание.
Нарисовать программу,которая будет считывать строку из 5 символов (латинских), а при нажатии A или D - просто закрываться. Вот алгоритм, которым я пытался руководствоваться(возможно неверный из за того,что так бы я писал на каком нибудь питоне)
1. Дать на ввод символы с клавиатуры
2. если длина строки = 5 - какое нибудь сообщение, типа готово. все, конец.
3. если во время ввода нажата А или D - закрыть программу.
как такой детсад рисуется на ассемблере - стыдно, но не знаю,был бы очень благодарен за код такой программы с комментариями, желательно после каждой строки,мне куда важней не результат,а понимание процесса,заранее спасибо, не думаю что это трудно. Использую TASM 4.1 и Tlink.
Решение задачи: «При нажатии клавиш A или D завершить работу приложения»
textual
Листинг программы
.model small ; 3 segmenta - koda, steka i dannyh .code ; opredelenie segmenta koda start: mov cx,5 ; cicl- 5 povtoreniy metka_vvoda : mov ah,1 ; vvod sklavi int 21h ; prerivanie cmp al, 'a' ; esly A -idti na metku je metka_vihoda cmp al, 'd' ; esly D -idti na metku je metka_vihoda loop metka_vvoda metka_vihoda : mov ax, 4c00h ; 2 stroki - vihod iz programmi int 21h end start
Объяснение кода листинга программы
- .model small — указывает на модель памяти, в данном случае небольшую, в которой выделяется 3 сегмента — кода, стека и данных
- .code — определяет сегмент кода
- start: — точка входа в программу
- mov cx,5 - инициализация счётчика циклов
- metka_vvoda : — метка цикла
- mov ah,1 - установка регистра AH для ввода символа
- int 21h — прерывание для ввода символа
- cmp al, 'a' — сравнение введённого символа с 'a'
- je metka_vihoda — переход на метку, если символ равен 'a'
- cmp al, 'd' — сравнение введённого символа с 'd'
- je metka_vihoda — переход на метку, если символ равен 'd'
- loop metka_vvoda — начало цикла
- metka_vihoda : — метка, на которую переходят в случае ввода 'a' или 'd'
- mov ax, 4c00h — выход из программы с кодом 004C (DWORD_VALUE)
- int 21h — прерывание для выхода из программы
- end start — конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д