Написание программы с выводом цифр и их подсчёт - Assembler
Формулировка задачи:
Здравствуйте
Может кто подсказать что нужно добавить чтоб была проверка на нажатие 10 цифр ( допустим нажал 1,2,3,4,5,6,7,8,9,0 прошло, нажал другой символ - выдавало ошибку)?
.data help db "Vvedite chislo.",0Ah,0Dh,'$' count db 0 .code main proc mov ax,@data mov ds,ax mov ah,9 mov dx,offset help int 21h mov cx,10 mov count,0 @1: mov ah,8 int 21h ; AL ;---------------------- ;тут должна быть проверка, но что должно быть, не пойму... ;---------------------- mov dl,al mov ah,2 int 21h inc count add count,30h mov ah,2 mov dl,count int 21h loop @1 mov ax,4C00h int 21h main endp end main
Решение задачи: «Написание программы с выводом цифр и их подсчёт»
textual
Листинг программы
.data help db "Vvedite chislo.",0Ah,0Dh,'$' count db 0 .code main proc mov ax, @data mov ds, ax mov ah, 9 mov dx, offset help int 21h mov cx, 10 mov count, 0 @1: mov ah, 8 int 21h ; AL sub al, '0' cmp al, 9 ja skip mov dl, al add dl, 30h mov ah,2 int 21h inc count mov ah,2 mov dl,count add dl, 30h int 21h skip: loop @1 mov ax, 4C00h int 21h main endp end main
Объяснение кода листинга программы
.data
help db Vvedite chislo.
,0Ah,0Dh,'$'
count db 0
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 9
mov dx, offset help
int 21h
mov cx, 10
mov count, 0
@1:
mov ah, 8
int 21h ; AL
sub al, '0'
cmp al, 9
ja skip
mov dl, al
add dl, 30h
mov ah,2
int 21h
inc count
mov ah,2
mov dl,count
add dl, 30h
int 21h
skip:
loop @1
mov ax, 4C00h
int 21h
main endp
end main
В этом коде используется язык Assembler. Постановка задачи — написание программы, которая считывает цифры, введенные пользователем, и подсчитывает их количество.
Описание работы:
- .data — раздел для определения данных. В нем указывается строка, которая выводится на экран для считывания числа, и переменная для хранения количества подсчитанных цифр.
- .code — раздел для определения кода программы.
- main proc — определение точки входа в программу.
- mov ax, @data — установка регистра ax в качестве сегмента данных.
- mov ds, ax — установка дескриптора сегмента данных.
- mov ah, 9 — установка регистра ah в качестве регистра функции.
- mov dx, offset help — передача в функцию вывода строки, находящейся по адресу help.
- int 21h — вызов функции вывода.
- mov cx, 10 — установка регистра cx в качестве счётчика циклов.
- mov count, 0 — инициализация переменной count.
- @1: — метка начала цикла.
- mov ah, 8 — установка регистра ah в качестве регистра функции.
- int 21h — считывание числа с помощью функции ввода.
- sub al, '0' — удаление ведущего нуля у считанного числа.
- cmp al, 9 - сравнение считанной цифры с цифрой 9.
- ja skip — если считанная цифра больше или равна 9, то переход к метке skip.
- mov dl, al — копирование считанной цифры в регистр dl.
- add dl, 30h — преобразование цифры в символьный формат.
- mov ah,2 — установка регистра ah в качестве регистра функции.
- int 21h — вывод символа на экран с помощью функции ввода.
- inc count — увеличение счётчика на единицу.
- mov ah,2 — установка регистра ah в качестве регистра функции.
- mov dl, count — копирование счётчика в регистр dl.
- add dl, 30h — преобразование счётчика в символьный формат.
- int 21h — вывод символа на экран с помощью функции вводa.
- loop @1 - переход к началу цикла.
- mov ax, 4C00h — установка регистра ax в качестве кода завершения работы программы.
- int 21h — вызов функции завершения работы программы.
- main endp — определение конца точки входа в программу.
- end main — определение конца программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д