При нажатии клавиш 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

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

  1. .model small — указывает на модель памяти, в данном случае небольшую, в которой выделяется 3 сегмента — кода, стека и данных
  2. .code — определяет сегмент кода
  3. start: — точка входа в программу
  4. mov cx,5 - инициализация счётчика циклов
  5. metka_vvoda : — метка цикла
  6. mov ah,1 - установка регистра AH для ввода символа
  7. int 21h — прерывание для ввода символа
  8. cmp al, 'a' — сравнение введённого символа с 'a'
  9. je metka_vihoda — переход на метку, если символ равен 'a'
  10. cmp al, 'd' — сравнение введённого символа с 'd'
  11. je metka_vihoda — переход на метку, если символ равен 'd'
  12. loop metka_vvoda — начало цикла
  13. metka_vihoda : — метка, на которую переходят в случае ввода 'a' или 'd'
  14. mov ax, 4c00h — выход из программы с кодом 004C (DWORD_VALUE)
  15. int 21h — прерывание для выхода из программы
  16. end start — конец программы

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


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

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

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