Вывод введенного числа в 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 — выход из программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д