Вводить пароль пока не будет введено правильное слово - 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

Объяснение кода листинга программы

  1. Переменная s инициализируется значением пароль (код 05 00 00 00)
  2. Переменная p инициализируется значением правильно (код 05 00 00 00)
  3. Переменная n инициализируется значением 0 (код 05 00 00 00)
  4. Цикл while запущается (код C3)
  5. В каждой итерации цикла пользователю выводится сообщение Введите пароль (код E8 00 00 00)
  6. Пользователь вводит пароль (код E8)
  7. Если введенный пароль совпадает с значением переменной s, то цикл while прерывается (код C3)
  8. Если введенный пароль не совпадает с значением переменной s, то пользователю выводится сообщение Неверный пароль (код E8 00 00 00)
  9. Цикл while продолжается до тех пор, пока не будет введено правильное слово (код C3)
  10. После ввода правильного пароля пользователю выводится сообщение Добро пожаловать (код E8 00 00 00)
  11. Переменная n увеличивается на единицу (код 05 01 00 00)
  12. Если значение переменной n больше или равно 10, то она уменьшается на единицу (код 05 01 00 00)
  13. Цикл while продолжается до тех пор, пока значение переменной n меньше 10 (код C3)
  14. После выхода из цикла while значение переменной n сбрасывается на 0 (код 05 00 00 00)
  15. Переменная s инициализируется значением пароль (код 05 00 00 00)
  16. Переменная p инициализируется значением правильно (код 05 00 00 00)
  17. Цикл while запускается заново (код C3)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы