Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2009, 18:47   #1
You_must_help
 
Регистрация: 10.04.2009
Сообщений: 4
Смущение Сравнение строк, ввод пароля (assembler)

Задание: вводите пароль 3 раза, каждый раз после ввода отображайте введенное слово и сообщайте верно или неверно введен пароль.
(Короче нужно доделать или переделать эту прогу... прикол в том что нет коментов.. хотя бы прокоментируйте не повторяющиеся строчки.. и если можно сравнение строк покажите... я знаю что с помощью cmp и по символьно.. но на практике если буду сам дрочиться, то до пенсии не дотяну)... а для знатаков это на 2 секунды... только с кометами плиз.. чтобы я сам разобрался потом)))) спасибо)))

Цитата:
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
You_must_help вне форума Ответить с цитированием
Старый 11.04.2009, 05:47   #2
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

Ник у тебя слишком вызывающий))))) И сразу шансов меньше на помощь.
Код:
.model	small
.stack	100h
.data
pass db 'Parol'						;собственно сам пароль
passLen=$-pass						;длинна
MaxInputLen db 50						;Максимальная длинна ввода
InputLen db 0						;Колличество введенных символов
InputBuff db 50 dup (0)					;Буфер для ввода
InputMsg db 'Vvedite parol',13,10,'popitok:'	;Сообщение ввода и....
Popitki db 0,13,10,'$'					;...колличества попыток
MsgWrong db 'Neverno!',13,10,'$'			;Сообщение о неверном вводе
MsgAccept db 'Parol Veren)))$'			;Сообщение о верном вводе
MsgWrongEx db 'Popitki ischerpani. Vihod.$'	;Сообщение при исчерпании попыток
Access db 0							;Флаг доступа 1-Верно 0-Неверно

.code
start:
;-----------------------стандарт-------------------
mov	ax,@data
mov	ds,ax
mov	es,ax			;только настроим на ds
xor	ax,ax
;----------------------/стандарт-------------------

;---------------------Основное тело программы-----
mov cx,3					;колличество попыток в cx

MainLoop:
call MessageForIn				;Приглашение ввода
call input					;Ввод
call Check					;Проверка
cmp Access,1				;если Access=1
je GoodPass					;то верно
call BadMsg					;иначе пишем, что неверно
loop MainLoop				;и повтор cx раз

call BadExMsg				;попытки исчерпаны.
jmp exit					

GoodPass:
call GoodMsg				;Пароль верен

exit:
mov ah,8					;Ожидание нажатия клавиши
int 21h

mov	ax,4c00h				;И стандартый Выход
int	21h
;-------------------/Основное тело программы---------

;-------------------Процедура ввода------------------
input proc
mov ah ,0Ah				;Функция ввода строки
mov dx,offset MaxInputLen	;Указатель на нужную таблицу
int 21h				
mov dl,10				;Перевод строки
mov ah,6
int 21h
ret
endp
;------------------/Процедура ввода-----------------

;--------Вывод приглашения к вводу и кол-ва попыток---
MessageForIn proc
mov ah,cl				;в ah=колличество попыток
add ah,'0'				;преобразуем в символ
mov Popitki,ah			;Запихнем в сообщение
mov ah,9
mov dx,offset InputMsg		;Вывод сообщения
int 21h
ret
endp
;--------/Вывод приглашения к вводу и кол-ва попыток---

;--------------Процедура проверки---------------------
Check proc
push cx			;сохраним cx
mov ah,passLen		;Сравниваем колличество...
mov bh,InputLen		;...введенных символов...
cmp ah,bh			;...с длинной пароля
jne wrong			;Если не равны, то выходим--
mov di,offset pass	;Иначе- сравниваем строки
mov si,offset InputBuff ;в si и di адреса строк
mov cx,PassLen		;максимальная длина
cld				;направление - вперёд
repe cmpsb			;сравнение
jne wrong			
mov Access,1		;Если равны, то Access=1
wrong:
pop cx			;Восстановим cx
ret
endp
;--------------/Процедура проверки---------------------


;-------------Ну тут уж все понятно)))---------------
GoodMsg proc
mov ah,9
mov dx,offset MsgAccept
int 21h
ret
endp

BadMsg proc
mov ah,9
mov dx,offset MsgWrong
int 21h
ret
endp

BadExMsg proc
mov ah,9
mov dx,offset MsgWrongEx
int 21h
ret
endp
;-------------/Ну тут уж все понятно)))---------------
end	start
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 11.04.2009, 18:34   #3
You_must_help
 
Регистрация: 10.04.2009
Сообщений: 4
По умолчанию

УУУУУУУУУУУУУУУХХХХХУУУУУУУУУУУУУУУ УУУ!!!!!!!!!!!!!!!!!!!!!!!
Спасибо)))))))))))))))))))))))))
You_must_help вне форума Ответить с цитированием
Старый 11.04.2009, 18:52   #4
You_must_help
 
Регистрация: 10.04.2009
Сообщений: 4
По умолчанию

Офигеть!!! Так всё понятно!!! Спаси бо ещё раз большое )))
You_must_help вне форума Ответить с цитированием
Старый 12.04.2009, 00:30   #5
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

)))) пажалста)))
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 16.04.2009, 23:02   #6
heart
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 64
По умолчанию

Не рекомендую так сравнивать, т.к пароль храняться в памяти в открытом виде, любй откроет hex - редактором, или запустит из под отладчика и пиши пропало...
heart вне форума Ответить с цитированием
Старый 17.04.2009, 03:00   #7
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

))))) это пример))))
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 19.04.2009, 23:53   #8
ASSEMBLER
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 27
По умолчанию

Ну... Спрятать пароль от программиста с отладчиком задача не тривиальная в принципе. А как пример работы со строками в самый раз.
Программы на заказ Delphi, Pascal, С++, Assembler e-mail: greatrock@mail.ru
<--Если я вам помог не забываем жать на весы
ASSEMBLER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод логина и пароля. С++ Builder lamaksi C++ Builder 2 05.03.2009 15:59
Сравнение строк Elm0 Паскаль, Turbo Pascal, PascalABC.NET 2 02.06.2008 09:31
нужна помощь, сравнение строк в Си 3.1 feranic Помощь студентам 5 24.04.2008 17:57
Сравнение строк HOMER Общие вопросы Delphi 7 04.01.2008 05:53