| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Хранитель экрана |
| Автор: bip 24.11.2008, 19:52 |
| Здравствуйте! Прошу помочь с реализацией следующей задачки: Хранитель экрана: с клавиатуры вводится строка,затем экран очищается, запрашивается пароль до тех пор, пока он не совпадет с строкой, которую ввели в начале. |
| Автор: Diabolus 25.11.2008, 08:41 |
| А в чём проблема? Отслеживаешь нажатия клавиш, очищаешь экран (просто создаёшь чёрное окно без бордера и делаешь фулл скрин), опять отслеживаешь нажатия клавиш. Если нужно чтоб вводили пароль в окошко - создаёшь его и получаешь оттуда. С чем из этого проблемы? |
| Автор: ksili 25.11.2008, 09:46 |
| Только это не хранитель экрана... а хранитель учётной записи |
| Автор: bip 25.11.2008, 16:45 | ||
| проблема в графическом режиме Вот, кое что написал.. наброски. Прошу ваших комментарий и советов, по поводу данного кода.
|
| Автор: Mikl_ 26.11.2008, 07:04 | ||
bip, специально для похожих функций (сравнение строк) в ассемблере существует команда CMPS
|
| Автор: bip 26.11.2008, 18:09 | ||
| Mikl, что-то не проходит такое сравнение. Я ведь задаю и "символы" и пароль с консоли. и у меня постоянно выводится, что пароль не верен :(
Такое сравнение проходит только, когда строки заранее заданы в сегменте данных... Как поправить, чтобы заработало? |
| Автор: bip 27.11.2008, 00:23 | ||||
код из учебника:
тоже не пашет:
Почему, кто-нибудь объяснить может? |
| Автор: Mikl_ 27.11.2008, 05:00 |
| bip, префикс перед cmps в твоем случае должен быть repe а не repne как ты написал -- это две диаметрально пртивоположные вещи. Во вторых, к сравнению пароля приступай тогда, когда пользователь нажмет клавишу Enter |
| Автор: bip 27.11.2008, 20:13 | ||
Mikl,ты прав. но суть особо не меняется. Просто в одном случае мы ищем одинаковую пару и переходим на метку, если такой нет. В другом случае ищем первую пару различных символов и переходим на метку если строки совпали.Ведь так?
Кстати уже работает с заранее заданными строками, осталось разобраться с проверкой строк которые вводятся с консоли... |
| Автор: bip 27.11.2008, 21:39 | ||
Заработало! Всем спасибо!
|
| Автор: Mikl_ 28.11.2008, 06:09 | ||
|
| Автор: bip 28.11.2008, 22:10 | ||||||||
Да? Вы уверены? У меня работает, пробовал и на чужом компьютере компилировать-тоже всё работает, следствие под дебагом я не смотрел. Добавлено через 7 минут и 37 секунд
Ух ты! интересно! Но ведь строка будет занесена в заранее определённую область сегмента данных(Buffer2)только по нажатию клавиши Enter т.е. покак её не нажали ничего не произойдёт соответственно... не с чем сравнивать. |
| Автор: bip 28.11.2008, 22:34 | ||
dumb, вот конечный результат, под дебагом тоже всё как надо:
|
| Автор: dumb 29.11.2008, 07:06 | ||
| bip, излишняя самоуверенность - плохой помощник в деле изучения чего-либо. и тем не менее: неправильное формирование буфера для функции ввода строки 0a/21 - результат: ограничитель длины инициализирован мусором, что ведет в частных случаях к пропуску ввода вообще(0), либо к переполнению буфера при вводе. сравнение строк по словам, причем счетчик(cx) установлен на размер буфера в байтах(не говоря уже о том, что первые два байта надо пропускать) - результат: выход за границы буферов. и о самом сравнении:
"всё как надо"... |
| Автор: bip 29.11.2008, 17:57 |
| "но суть особо не меняется. Просто в одном случае мы ищем одинаковую пару и переходим на метку, если такой нет. В другом случае ищем первую пару различных символов и переходим на метку если строки совпали, и сравниваем дальше, что не так? суть меняется, и тебе об этом уже сказали. с каких пор пароли считаются одинаковыми, если в них совпали пару символов в одинаковых позициях?!" Добавлено через 8 минут и 9 секунд "сравнение строк по словам, причем счетчик(cx) установлен на размер буфера в байтах" Сравниваю я по словам и что? si и di имеют размерность слова. просто один в них байт будет всегда пустым. |