Проверка пароля - Assembler

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

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

Введенную строку считать паролем. Проверить наличие в пароле "даты рождения". Пример дат рождения 17081988, 07032004. Определять по следующему правилу: Первые два числа от 01 до 31, третье и четвертое число от 01 до 12, последние цифры от 1900 до 2099г. Если правило выполняется - это дата рождения. Сообщение о том, есть или нет даты рождения в пароле, вывести на экран. Как это реализовать на ассемблере.
.MODEL SMALL
.STACK 1024h
.data
     string db 100,100 dup ('$')
.CODE
 
start:
    mov ax, data
    mov ds, ax
    
    mov ah,0ah
    lea dx,string
    int 21h 
    
    mov string+1,0ah
    
    mov ah,9
    lea dx,string+1
    int 21h
    
    mov ah, 10h
    int 16h
 
    mov ax, 4c00h
    int 21h
 
 end start
нашел код ввода вывода теперь надо строку введеную разбить на строки дабы отделить дату месяц и год

Решение задачи: «Проверка пароля»

textual
Листинг программы
org  100h
jmp  start
 
;---- DATA ----
mes0     db  'PASS: $'
okey     db  ' <--OK!$'
err      db  7,' <--ERROR!$'
buff     db  8 dup(0)
 
;---- CODE ----
start:   mov   ah,9           ;запрос на ввод
         mov   dx,mes0
         int   21h
 
;--- Ввод пароля (8 символов) -------------------
         mov   cx,8           ;макс/символов
         mov   di,buff        ;приёмник для записи
         push  di             ;запомним для чтения
@inp:    xor   ax,ax          ;ввод без эха
         int   16h            ;
         stosb                ;запись AL в ES:DI
;         mov   al,'*'         ;звёздочка вместо ввода
         int   29h            ;
         loop  @inp           ;повторить СХ-раз..
 
;--- Проверка пароля на вальдность --------------
         pop   si             ;источник для чтения
         lodsw                ;берём в АХ день
         rol   ax,8           ;обменяем AH и AL
         cmp   ax,3331h       ;больше 31 ?
         ja    @error         ;ошибка!
 
         lodsw                ;
         rol   ax,8           ;берём в АХ месяц
         cmp   ax,3132h       ;больше 12 ?
         ja    @error         ;
         lodsw                ;
         rol   ax,8           ;берём в АХ год
         cmp   ax,3139h       ;меньше 19 ?
         jb    @error         ;
         cmp   ax,3231h       ;больше 21 ?
         ja    @error         ;
 
;--- Вывод результата ---------------------------
@ok:     mov   dx,okey        ;
         jmp   @print         ;
@error:  mov   dx,err         ;
@print:  mov   ah,9           ;
         int   21h            ;
 
@exit:   xor   ax,ax          ; ждём клавишу..
         int   16h
         int   20h            ; на выход!

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


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

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

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