Консультация № 183275
21.05.2011, 16:34
55.07 руб.
0 8 1
Здравствуйте! Прошу помощи в следующем вопросе:
требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и вывод результата.
Задача- зашифровать текст букву на следующую(последнюю на первую). Ассемблер-TASM. EXE. Очень надеюсь, что Вы мне поможете.

Обсуждение

давно
Посетитель
7438
7205
21.05.2011, 19:14
общий
Здравствуйтк, Дмитрий.
Т.е., фактически требуется циклчески сдвинуть введенную строку не один символ влево. Я правильно понял? Или, может, например, эту процедуру надо проведить для каждого слова?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
21.05.2011, 19:24
общий
здравствуйте еще раз
надо поменять например букву а на б, букву б на в,я на а и так далее
давно
Посетитель
7438
7205
21.05.2011, 20:18
общий
Теперь ясно. Сделаем
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
21.05.2011, 20:19
общий
21.05.2011, 20:20
Хм, а разные там запятые, точки, пробелы?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
21.05.2011, 20:54
общий
их не надо учитывать,только буквы
давно
Посетитель
7438
7205
21.05.2011, 21:01
общий
Ну и последнее уточнение:
а на б, б на в, ..., я на а понятно. Дальше:
А на Б, ..., Я на А ? А английские?
a на b, ..., z на a, A на Z, ..., Z на A ?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
21.05.2011, 21:08
общий
Все правльно,именно так
давно
Посетитель
7438
7205
21.05.2011, 22:50
общий
это ответ
Здравствуйте, Дмитрий!
Вот Вам программа-шифровальщик

[code h=207];требуется составить подпрограмму решения задачи,
;использующую инструкции обработки цепочек.
;Составить программу, осуществляющую ввод необходимых данных,
;вызов подпрограммы и вывод результата.
;Задача- зашифровать текст букву на следующую(последнюю на первую)

.model small, C ;параметры обрабатываются, как в С
.data
;буфер для приема строки по ф-и 0ah
buf db 80
cnt db 0
string db 80 dup (?)

sStr db 'Enter string: ',0
sRes db 0dh, 0ah,
'Result string: ',0
sAny db 0dh, 0ah, 'Press any key',0
.code
.186 ;чтобы было возможно push <число>
start:
mov ax, @DATA
mov ds, ax
mov es, ax

;введем строку
call GetStr, offset buf, offset sStr
;зашифруем
call CryptStr, offset string
;выведем результат
call Print, offset sRes
call Print, offset string

;ждем нажатия на любую клавишу
call Print, offset sAny
mov ah, 0
int 16h

;выход в ДОС
mov ax, 4c00h
int 21h

;вывод строки ASCIIZ
Print proc pStr:word
mov si, pStr
PrintLoop:
lodsb
cmp al, 0 ;конец строки?
je PrintRet
int 29h ;вывод байта из al
jmp PrintLoop
PrintRet:
ret
Print endp

;ввод строки
GetStr proc sBuf:word, sTitle:word
call Print, sTitle ;вывод приглашения

mov dx, sBuf ;ввод строки
mov si, dx ;сохраним адрес структуры
mov ah, 0ah
int 21h

xor bx, bx ;заменим последний байт 0dh на 0
mov bl, byte ptr [si+1] ;длина строки
mov byte ptr [bx+si+2], 0 ;меняем
ret
GetStr endp

;шифровка строки sIn
CryptStr proc sIn:word
mov si, sIn ;адрес строки
CS_loop:
lodsb ;очереднй символ
cmp al, 0 ;дошли до конца?
je CS_ret

cmp al, 41h ;A
jb CS_loop ;меньше англ A не меняем
cmp al, 5ah ;Z
jb CS_inc ;A-Y -> B-Z
jz CS_41 ;Z -> A

cmp al, 61h ;a
jb CS_loop ;Z < al < a не меняем
cmp al, 7ah ;z
jb CS_inc ;a-y -> b-Y
jz CS_61 ;z -> a

cmp al, 80h ;А
jb CS_loop ;z < al < русск А не меняем
cmp al, 9fh ;Я
jb CS_inc ;А-Ю -> Б-Я
jz CS_80 ;Я -> А

cmp al, 0afh ;п
jb CS_inc ;а-о -> б-п
jz CS_e0 ;п -> р

;учитываем то, что между 'п' и 'р' есть "чужие" символы
cmp al, 0e0h ;р
jb CS_loop ;п < al < р не меняем
cmp al, 0efh ;я
jb CS_inc ;р-ю -> с-я
jnz CS_loop ;al != я, (т.е. > я), не меняем
mov al, 0a0h ;я -> а
jmp CS_store ;меняем
CS_41:
mov al, 41h ;Z -> A
jmp CS_store ;меняем
CS_61:
mov al, 61h ;z -> a
jmp CS_store ;меняем
CS_80:
mov al, 80h ;Я -> А
jmp CS_store ;меняем
CS_e0:
mov al, 0e0h ;п -> р
jmp CS_store ;меняем
CS_inc:
inc al ;меняем на следующий код
CS_store: ;запоминаем на месте только что прочитанного кода
mov byte ptr [si-1], al
jmp CS_loop ;по всей строке
CS_ret:
ret ;выход
CryptStr endp

end start
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа