Сравнение введенного пароля с заданным - 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

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

  1. Создаются локальные переменные и инициализируется размер стека и модель программы.
  2. Объявляются переменные в сегменте данных: CrLf как символы возврата каретки и новой строки, Password как строка Password, PassLen как размер строки Password, msgInputPass как строка Enter password:, msgOk как строка Ok, kbBuffer как массив буфера клавиатуры, Len как переменная длины строки, String как массив символов.
  3. Начинается сегмент кода.
  4. В процедуре main происходит инициализация сегмента данных.
  5. Вводится пароль с помощью прерывания 21h с параметрами 09h и 0Ah, выводится символ новой строки.
  6. Удаляются цифры из введенной строки путем сравнения каждого символа с ASCII-кодами цифр и копирования только символов, не являющихся цифрами, в новую строку.
  7. Сравнивается обработанная строка с паролем, если они совпадают, выводится сообщение Ok.
  8. Процедура main завершается с помощью прерывания 21h с параметрами 4C00h.

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


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

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

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