Проверка пароля - 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 ; на выход!
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д