Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Boriss
Статус: Академик
Рейтинг: 2670
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2262
∙ повысить рейтинг »
Жерар
Статус: Профессор
Рейтинг: 2201
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска: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 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное