Вывод введенного числа в TASM - Assembler

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

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

Здравстуйте, никак не могу разобраться с ассемблером на примере кода. Нужно вывести введенное число с текстом "Вы ввели" И нужно сделать проверку это то число или нет, если то - то пусть выводится "нажмите любую клавишу" если нет "то введите число еще раз" . Пожалуйста, очень срочно
Листинг программы
  1. data segment para public "data" ;начало сегмента данных
  2. message db 'Enter: $' ;наша строка (приглашение для ввода двух символов с клавы)
  3. data ends ;конец сегмента данных
  4. stk segment stack ;начало сегмента стека
  5. db 256 dup ("?") ;выделение памяти под стек
  6. stk ends ;конец сегмента стека
  7. code segment para public "code" ;начало сегмента кода
  8. main proc ;начало процедуры
  9. assume cs:code,ds:data,ss:stk ;сопоставление сегментных регистров и сегментов
  10. mov ax,data
  11. mov ds,ax ;инициализация сегмента данных через промежуточный регистр ax
  12. mov ah,9 ;функция вывода сообщения на экран
  13. mov dx,offset message ;адрес начала сообщения
  14. int 21h ;прерывание, чтобы функция выполнилась
  15. xor ax,ax ;обнуление регистра ax (здесь это не обязательно, можно удалить эту строку)
  16. mov ah,1h ;функция ввода с клавиатуры символа с эхом
  17. int 21h ;прерывание, чтобы функция выполнилась
  18. ;ASCII-код введенного символа помещается в регистр al
  19. mov dl,al ;помещаем ASCII-код введенного символа в регистр dl
  20. sub dl,30h ;предполагаем, что была нажата цифра. преобразовываем ASCII-код цифры в символ
  21. cmp dl,9h ;проверяем, действительно ли была нажата цифра
  22. jle M1 ;если была нажата цифра, то прыгаем на метку M1
  23. sub dl,7h ;если была нажата буква, то дополнительно преобразовываем ASCII-код буквы в символ
  24. M1: ;метка M1
  25. mov cl,4h ;один шестнадцатеричный символ занимает 4 бита (полубайт)
  26. shl dl,cl ;сдвигаем символ из младшего полубайта в старший
  27. int 21h ;вводим второй символ. прерывание, чтобы функция ввода выполнилась
  28. sub al,30h ;предполагаем, что была нажата цифра. преобразовываем ASCII-код цифры в символ
  29. cmp al, 9h ;проверяем, действительно ли была нажата цифра
  30. jle M2 ;если была нажата цифра, то прыгаем на метку M2
  31. sub al,7h ;если была нажата буква, то дополнительно преобразовываем ASCII-код буквы в символ
  32. M2: ;метка M2
  33. add dl,al ;помещаем символ в младший полубайт
  34. mov ax,4c00h;функция выхода из программы. код возврата - ноль
  35. int 21h ;прерывание, чтобы функция выполнилась
  36. main endp ;конец процедуры
  37. code ends ;конец сегмента кода
  38. end main ;указывается метка (процедура), с которой должна начаться выполняться программа

Решение задачи: «Вывод введенного числа в TASM»

textual
Листинг программы
  1. org 100h
  2. jmp start
  3.  
  4. mes0  db  13,10,'Введите число:  $'
  5. mes1  db  13,10,'Вы ввели.....:  $'
  6. mes2  db  13,10,'------------------------'
  7.       db  13,10,'Нажмите любую клавишу...$'
  8.  
  9. start: mov   ah,9           ; мессага
  10.        mov   dx,mes0        ;
  11.        int   21h            ;
  12.        mov   ah,1           ; вводим символ
  13.        int   21h            ;
  14.        cmp   al,'0'         ;
  15.        jb    start          ; переход, если мень нуля
  16.        cmp   al,'9'         ;
  17.        ja    start          ; переход, если больше 9
  18.        push  ax             ; значит цифра - запомним её
  19.        mov   ah,9           ;
  20.        mov   dx,mes1        ; мессага
  21.        int   21h            ;
  22.        pop   ax             ; восстанавливаем цифру
  23.        int   29h            ; выводим её на экран
  24.        mov   ah,9           ;
  25.        mov   dx,mes2        ; мессага
  26.        int   21h            ;
  27.  
  28. exit:  xor   ax,ax          ; пауза..
  29.        int   16h            ;
  30.        mov   ax,4C00h       ; выход!
  31.        int   21h            ;

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

  1. org 100h — начало программы, задаёт базовый адрес в 100h
  2. jmp start — переход к метке start
  3. mes0 db 13,10,'Введите число: $' — описание сообщения для вывода на экран
  4. mes1 db 13,10,'Вы ввели.....: $' — описание сообщения для вывода на экран
  5. mes2 db 13,10,'------------------------' — описание сообщения для вывода на экран
  6. db 13,10,'Нажмите любую клавишу...$' — описание сообщения для вывода на экран
  7. start: mov ah,9 — подготовка к выводу сообщения
  8. mov dx,mes0 — указание на сообщение для вывода
  9. int 21h — вывод сообщения на экран
  10. mov ah,1 — подготовка к вводу символа
  11. int 21h — ввод символа
  12. cmp al,'0' — сравнение введенного символа со значением '0'
  13. jb start — если символ меньше или равен '0', то переход на начало цикла
  14. cmp al,'9' — сравнение введенного символа со значением '9'
  15. ja start — если символ больше '9', то переход на начало цикла
  16. push ax — сохранение введенной цифры в стеке
  17. mov ah,9 — подготовка к выводу сообщения
  18. mov dx,mes1 — указание на сообщение для вывода
  19. int 21h — вывод сообщения на экран
  20. pop ax — восстановление цифры из стека
  21. int 29h — вывод цифры на экран
  22. mov ah,9 — подготовка к выводу сообщения
  23. mov dx,mes2 — указание на сообщение для вывода
  24. int 21h — вывод сообщения на экран
  25. exit: xor ax,ax — остановка программы, переход в режим ожидания
  26. int 16h — переход в режим ожидания
  27. mov ax,4C00h — выход из программы
  28. int 21h — выход из программы

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


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

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

11   голосов , оценка 3.909 из 5

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

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

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