Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1452 | Дата выхода: | 26.05.2011, 17:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 216 / 64 | Вопросов / ответов: | 1 / 1 | Вопрос № 183275: Здравствуйте! Прошу помощи в следующем вопросе: требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и вывод результата. Зада... Вопрос № 183275: Здравствуйте! Прошу помощи в следующем вопросе: требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и вывод результата. Задача- зашифровать текст букву на следующую(последнюю на первую). Ассемблер-TASM. EXE. Очень надеюсь, что Вы мне поможете. Отправлен: 21.05.2011, 16:34 Вопрос задал: Дмитрий (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Дмитрий! Вот Вам программа-шифровальщик
Код : ;требуется составить подпрограмму решения задачи, ;использующую инструкции обработки цепочек. ;Составить программу, осуществляющую ввод необходимых данных, ;вызов подпрограммы и вывод результата. ;Задача- зашифровать текст букву на следующую(последнюю на первую) .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 ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 21.05.2011, 22:50 Номер ответа: 267285 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267285 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий