Сравнение введенного пароля с заданным - Assembler

Узнай цену своей работы

Формулировка задачи:

Задать в программе пароль, в котором отсутствуют цифры. Из введенного пароля перед сравнением с эталонным удалить цифры (если таковые присутствуют). Выдать сообщение "Ok", если исходный пароль совпадает с введенным паролем, из которого предварительно удалены цифры.

Решение задачи: «Сравнение введенного пароля с заданным»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         CrLf    db      0Dh, 0Ah, '$'
  9.         Password        db      'Password'
  10.         PassLen         dw      $-Password
  11.  
  12.         msgInputPass    db      'Enter password: ', '$'
  13.         msgOk           db      'Ok', '$'
  14.         kbBuffer        db      81
  15.         Len             db      ?
  16.         String          db      82 dup(?)
  17. .code
  18.  
  19. main    proc
  20.         mov     ax,     @data
  21.         mov     ds,     ax
  22.  
  23.         ;ввод пароля
  24.         mov     ah,     09h
  25.         lea     dx,     msgInputPass
  26.         int     21h
  27.         mov     ah,     0Ah
  28.         lea     dx,     kbBuffer
  29.         int     21h
  30.         mov     ah,     09h
  31.         lea     dx,     CrLf
  32.         int     21h
  33.         ;удаление из введённой строки символов цифр
  34.         lea     si,     String
  35.         lea     di,     String
  36.         mov     cx,     0
  37.         mov     cl,     Len
  38.         mov     Len,    0       ;пока длина строки без цифр нулевая
  39. @@For:
  40.         mov     al,     [si]
  41.         inc     si
  42.         cmp     al,     '0'
  43.         jb      @@Copy
  44.         cmp     al,     '9'
  45.         jbe     @@Next
  46. @@Copy:
  47.         mov     [di],   al
  48.         inc     di
  49.         inc     [Len]
  50. @@Next:
  51.         loop    @@For
  52.  
  53.         ;сравнение обработанной строки с паролем
  54.         mov     cx,     0
  55.         mov     cl,     Len
  56.         cmp     cx,     PassLen
  57.         jne     @@Exit
  58.         push    es
  59.         mov     ax,     ds
  60.         mov     es,     ax
  61.         lea     si,     String
  62.         lea     di,     Password
  63.         repe    cmpsb
  64.         pop     es
  65.         jne     @@Exit
  66.  
  67.         ;вывод сообщения "Ok"
  68.         mov     ah,     09h
  69.         lea     dx,     msgOk
  70.         int     21h
  71. @@Exit:
  72.         mov     ax,     4C00h
  73.         int     21h
  74. main    endp
  75.  
  76. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы