Вопрос № 83876: добрый день. в приложении программа которая сверяет введенную строчку с паролем(std_pwd). Как изменить программу что бы она выдавала "success"
если пароль(строка) введена в обратном порядке? тоесть если пароль pass а пользователь ввел ...Вопрос № 83908: Дорогие эксперты!Напишите прогу - матрица 4x4,подсчитать среднее арифм. обратной диагонали!для проца. лучше для Intel 8080.Безвыходная ситуация-утром сдавать!с уважением SpraIt....
Вопрос № 83.876
добрый день. в приложении программа которая сверяет введенную строчку с паролем(std_pwd). Как изменить программу что бы она выдавала "success"
если пароль(строка) введена в обратном порядке? тоесть если пароль pass а пользователь ввел ssap то программа пишит "success". подозреваю что нужно изменить флаг направления( командой std). но куда и как не понимаю. спасибо.
Приложение:
Отправлен: 23.04.2007, 17:39
Вопрос задал: Biggle (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Biggle!
1)Вам нужно заменить строковую команду на её программый анналог,
т.к. флаг D указывает направление одновременно для SI и DI.
или
2)После ввода строки перевернуть введенную строку.
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Отвечает: An42
Здравствуйте, Biggle!
cld сбрасывает флаг df а, std устанавливает флаг df
в первом случае цепочные операции идут в сторону увеличения адресов
во в тором случае в сторону уменьшения адресов (причем для регистров si и di увеличение или уменьшение адресов происходит одновременно)
по этой причине мы не сможем использовать цепочные операции в которых регистр si движется в сторону увеличения адресов, а регистр di в сторону уменьшения адресов
предлагаю модуль который проверяет написания строки в обратном порядке
…
my_data segment
user_buf db 17, ?, 17 dup(?)
std_pwd db 'pass'
std_len = $-std_pwd
ok_mes db 13, 10, 'success$'
my_data ends
my_commands segment
…
mov ah,0ah
lea dx,user_buf
int 21h
sub cx,cx
mov al,user_buf[1]
mov cl,std_len
cmp al,cl ;Проверка длины пароля и длины введенной строки
jne error
lea si,user_buf[2] ;Адрес введенной строки
lea di,std_pwd[std_len-1] ;Адрес пароля
stdloop: ;Проверка совпадений символов
mov al,[si]
mov ah,[di]
cmp ah,al
jne error
inc si ;увеличиваем адрес
dec di ;уменьшаем адрес идем в обратном направлении
loop stdloop
mov ah,09
lea dx,ok_mes
int 21h
jmp exit
error:
;-- Сообщение об ошибке
exit:
....
Удачи
Ответ отправил: An42 (статус: 2-ой класс)
Ответ отправлен: 25.04.2007, 03:48
Вопрос № 83.908
Дорогие эксперты!Напишите прогу - матрица 4x4,подсчитать среднее арифм. обратной диагонали!для проца. лучше для Intel 8080.Безвыходная ситуация-утром сдавать!с уважением SpraIt.
Отправлен: 23.04.2007, 20:51
Вопрос задал: SpraIt (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, SpraIt!
maxL equ 4
;код
xor si,si
xor ax,ax
mov cl,maxL
goC: add si,maxL-1
add al,[dataArray+si]
loop goC
;код
dataArray-Ваш однобайтный массив(матрица 4*4)
в итоге в AX получается полная сумма обратной диагонали,
если делить на четыре(без остатка) сдвигаете вправо дважды,
если нужно с остатком то используете команду DIV
AL-целая часть.
AH-остаток.
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 23.04.2007, 21:46 Оценка за ответ: 5 Комментарий оценки: огромное спасибо!