Сравнение введенного пароля с заданным - Assembler
Формулировка задачи:
Задать в программе пароль, в котором отсутствуют цифры. Из введенного пароля перед
сравнением с эталонным удалить цифры (если таковые присутствуют). Выдать сообщение "Ok",
если исходный пароль совпадает с введенным паролем, из которого предварительно удалены
цифры.
Решение задачи: «Сравнение введенного пароля с заданным»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- CrLf db 0Dh, 0Ah, '$'
- Password db 'Password'
- PassLen dw $-Password
- msgInputPass db 'Enter password: ', '$'
- msgOk db 'Ok', '$'
- kbBuffer db 81
- Len db ?
- String db 82 dup(?)
- .code
- main proc
- mov ax, @data
- mov ds, ax
- ;ввод пароля
- mov ah, 09h
- lea dx, msgInputPass
- int 21h
- mov ah, 0Ah
- lea dx, kbBuffer
- int 21h
- mov ah, 09h
- lea dx, CrLf
- int 21h
- ;удаление из введённой строки символов цифр
- lea si, String
- lea di, String
- mov cx, 0
- mov cl, Len
- mov Len, 0 ;пока длина строки без цифр нулевая
- @@For:
- mov al, [si]
- inc si
- cmp al, '0'
- jb @@Copy
- cmp al, '9'
- jbe @@Next
- @@Copy:
- mov [di], al
- inc di
- inc [Len]
- @@Next:
- loop @@For
- ;сравнение обработанной строки с паролем
- mov cx, 0
- mov cl, Len
- cmp cx, PassLen
- jne @@Exit
- push es
- mov ax, ds
- mov es, ax
- lea si, String
- lea di, Password
- repe cmpsb
- pop es
- jne @@Exit
- ;вывод сообщения "Ok"
- mov ah, 09h
- lea dx, msgOk
- int 21h
- @@Exit:
- mov ax, 4C00h
- int 21h
- main endp
- end main
Объяснение кода листинга программы
- Создаются локальные переменные и инициализируется размер стека и модель программы.
- Объявляются переменные в сегменте данных:
CrLf
как символы возврата каретки и новой строки,Password
как строкаPassword
,PassLen
как размер строкиPassword
,msgInputPass
как строкаEnter password:
,msgOk
как строкаOk
,kbBuffer
как массив буфера клавиатуры,Len
как переменная длины строки,String
как массив символов. - Начинается сегмент кода.
- В процедуре
main
происходит инициализация сегмента данных. - Вводится пароль с помощью прерывания 21h с параметрами 09h и 0Ah, выводится символ новой строки.
- Удаляются цифры из введенной строки путем сравнения каждого символа с ASCII-кодами цифр и копирования только символов, не являющихся цифрами, в новую строку.
- Сравнивается обработанная строка с паролем, если они совпадают, выводится сообщение
Ok
. - Процедура main завершается с помощью прерывания 21h с параметрами 4C00h.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д