Вывод введенного числа в TASM - Assembler
Формулировка задачи:
Здравстуйте, никак не могу разобраться с ассемблером на примере кода.
Нужно вывести введенное число с текстом "Вы ввели"
И нужно сделать проверку это то число или нет, если то - то пусть выводится "нажмите любую клавишу" если нет "то введите число еще раз" . Пожалуйста, очень срочно
Листинг программы
- data segment para public "data" ;начало сегмента данных
- message db 'Enter: $' ;наша строка (приглашение для ввода двух символов с клавы)
- data ends ;конец сегмента данных
- stk segment stack ;начало сегмента стека
- db 256 dup ("?") ;выделение памяти под стек
- stk ends ;конец сегмента стека
- code segment para public "code" ;начало сегмента кода
- main proc ;начало процедуры
- assume cs:code,ds:data,ss:stk ;сопоставление сегментных регистров и сегментов
- mov ax,data
- mov ds,ax ;инициализация сегмента данных через промежуточный регистр ax
- mov ah,9 ;функция вывода сообщения на экран
- mov dx,offset message ;адрес начала сообщения
- int 21h ;прерывание, чтобы функция выполнилась
- xor ax,ax ;обнуление регистра ax (здесь это не обязательно, можно удалить эту строку)
- mov ah,1h ;функция ввода с клавиатуры символа с эхом
- int 21h ;прерывание, чтобы функция выполнилась
- ;ASCII-код введенного символа помещается в регистр al
- mov dl,al ;помещаем ASCII-код введенного символа в регистр dl
- sub dl,30h ;предполагаем, что была нажата цифра. преобразовываем ASCII-код цифры в символ
- cmp dl,9h ;проверяем, действительно ли была нажата цифра
- jle M1 ;если была нажата цифра, то прыгаем на метку M1
- sub dl,7h ;если была нажата буква, то дополнительно преобразовываем ASCII-код буквы в символ
- M1: ;метка M1
- mov cl,4h ;один шестнадцатеричный символ занимает 4 бита (полубайт)
- shl dl,cl ;сдвигаем символ из младшего полубайта в старший
- int 21h ;вводим второй символ. прерывание, чтобы функция ввода выполнилась
- sub al,30h ;предполагаем, что была нажата цифра. преобразовываем ASCII-код цифры в символ
- cmp al, 9h ;проверяем, действительно ли была нажата цифра
- jle M2 ;если была нажата цифра, то прыгаем на метку M2
- sub al,7h ;если была нажата буква, то дополнительно преобразовываем ASCII-код буквы в символ
- M2: ;метка M2
- add dl,al ;помещаем символ в младший полубайт
- mov ax,4c00h;функция выхода из программы. код возврата - ноль
- int 21h ;прерывание, чтобы функция выполнилась
- main endp ;конец процедуры
- code ends ;конец сегмента кода
- end main ;указывается метка (процедура), с которой должна начаться выполняться программа
Решение задачи: «Вывод введенного числа в TASM»
textual
Листинг программы
- org 100h
- jmp start
- mes0 db 13,10,'Введите число: $'
- mes1 db 13,10,'Вы ввели.....: $'
- mes2 db 13,10,'------------------------'
- db 13,10,'Нажмите любую клавишу...$'
- start: mov ah,9 ; мессага
- mov dx,mes0 ;
- int 21h ;
- mov ah,1 ; вводим символ
- int 21h ;
- cmp al,'0' ;
- jb start ; переход, если мень нуля
- cmp al,'9' ;
- ja start ; переход, если больше 9
- push ax ; значит цифра - запомним её
- mov ah,9 ;
- mov dx,mes1 ; мессага
- int 21h ;
- pop ax ; восстанавливаем цифру
- int 29h ; выводим её на экран
- mov ah,9 ;
- mov dx,mes2 ; мессага
- int 21h ;
- exit: xor ax,ax ; пауза..
- int 16h ;
- mov ax,4C00h ; выход!
- int 21h ;
Объяснение кода листинга программы
- org 100h — начало программы, задаёт базовый адрес в 100h
- jmp start — переход к метке start
- mes0 db 13,10,'Введите число: $' — описание сообщения для вывода на экран
- mes1 db 13,10,'Вы ввели.....: $' — описание сообщения для вывода на экран
- mes2 db 13,10,'------------------------' — описание сообщения для вывода на экран
- db 13,10,'Нажмите любую клавишу...$' — описание сообщения для вывода на экран
- start: mov ah,9 — подготовка к выводу сообщения
- mov dx,mes0 — указание на сообщение для вывода
- int 21h — вывод сообщения на экран
- mov ah,1 — подготовка к вводу символа
- int 21h — ввод символа
- cmp al,'0' — сравнение введенного символа со значением '0'
- jb start — если символ меньше или равен '0', то переход на начало цикла
- cmp al,'9' — сравнение введенного символа со значением '9'
- ja start — если символ больше '9', то переход на начало цикла
- push ax — сохранение введенной цифры в стеке
- mov ah,9 — подготовка к выводу сообщения
- mov dx,mes1 — указание на сообщение для вывода
- int 21h — вывод сообщения на экран
- pop ax — восстановление цифры из стека
- int 29h — вывод цифры на экран
- mov ah,9 — подготовка к выводу сообщения
- mov dx,mes2 — указание на сообщение для вывода
- int 21h — вывод сообщения на экран
- exit: xor ax,ax — остановка программы, переход в режим ожидания
- int 16h — переход в режим ожидания
- mov ax,4C00h — выход из программы
- int 21h — выход из программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д