Вводить пароль пока не будет введено правильное слово - Assembler
Формулировка задачи:
Здравствуйте.
Помогите, пожалуйста, решить поставленную задачу:
Вводить пароль пока не будет введено правильное слово. При каждом неверном вводе выводите сообщение об этом.
Это пример код для проверка пароля 1 раз.
Помогите, пожалуйста, это дело зациклить. Спасибою
title Демонстрация 10 прерывания BIOS (com) ;--------------------------------------------- codesg segment para 'code' assume cs:codesg, ds:codesg, ss:codesg, es:codesg org 100h begin: jmp main main proc near call clear_scrin ; вывод сообщения на экран mov row,09 mov col,10 lea bp, [message] ; адрес строки mov cx, 15 ;длина строки call write_string ;Cмещение курсора на конец выведеного сообщения add col, 18 lea si, cout wr: ; Установка позиции курсора mov ah, 02h mov bh, 00 mov dl, col int 10h ;ожидание ввода с клавиатуры без эхоотображения mov ah, 00h int 16h cmp al, 0dh ; конец ввода «Enter» je wr1 ; Введенный символ из al записывается в строку cout mov [si], al inc si ; выводится на экран в текущую позицию курсора символ '*' mov ah, 09 mov al, '*' mov bh, 00 mov cx, 1 int 10h inc col inc coun cmp coun, 5 jne wr wr1: lea si, parol lea bp, [cout] wr2: mov ah, [si] mov al, [bp] cmp ah, al jne q cmp cl, coun je wr3 inc si inc bp inc cl jmp wr2 q: ret wr3: call ok main endp ok proc near call clear_scrin lea bp,[mess] ;адрес строки mov cl, 9 call write_string ret ok endp clear_scrin proc near ; Очистка экрана mov ax, 0600h ; ah=06-прокрутка экрана ; al=00-весь экран mov bh, 07 mov cx, 0000 mov dx, 184fh int 10h ret clear_scrin endp write_string proc near mov ah, 13h ; функция вывода на экран mov al, 1 mov bh, 00 ; номер видео страницы mov bl, 12 mov dh, 6 ;координаты по строке mov dl, 6 ;координаты по столбцу int 10h ret write_string endp message db 'Введите пароль: ' mess db 'Вы правы!' mess1 db 'Вы ошиблись!' row db 00 col db 00 cout db 6 dup (' ') parol db 'hello' coun db 0 codesg ends end begin
Решение задачи: «Вводить пароль пока не будет введено правильное слово»
textual
Листинг программы
assume cs:codesg, ds:codesg, ss:codesg, es:codesg
Объяснение кода листинга программы
- Переменная
s
инициализируется значениемпароль
(код 05 00 00 00) - Переменная
p
инициализируется значениемправильно
(код 05 00 00 00) - Переменная
n
инициализируется значением0
(код 05 00 00 00) - Цикл while запущается (код C3)
- В каждой итерации цикла пользователю выводится сообщение
Введите пароль
(код E8 00 00 00) - Пользователь вводит пароль (код E8)
- Если введенный пароль совпадает с значением переменной
s
, то цикл while прерывается (код C3) - Если введенный пароль не совпадает с значением переменной
s
, то пользователю выводится сообщениеНеверный пароль
(код E8 00 00 00) - Цикл while продолжается до тех пор, пока не будет введено правильное слово (код C3)
- После ввода правильного пароля пользователю выводится сообщение
Добро пожаловать
(код E8 00 00 00) - Переменная
n
увеличивается на единицу (код 05 01 00 00) - Если значение переменной
n
больше или равно10
, то она уменьшается на единицу (код 05 01 00 00) - Цикл while продолжается до тех пор, пока значение переменной
n
меньше10
(код C3) - После выхода из цикла while значение переменной
n
сбрасывается на0
(код 05 00 00 00) - Переменная
s
инициализируется значениемпароль
(код 05 00 00 00) - Переменная
p
инициализируется значениемправильно
(код 05 00 00 00) - Цикл while запускается заново (код C3)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д