Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: шифрование строки TASM  (Прочитано 4736 раз)
0 Пользователей и 1 Гость смотрят эту тему.
neo_roses
Новенький

ua
Offline Offline

« : 14-04-2011 10:34 » 

Вот листинг шифрование строки через массив 8х8 и выводом змейкой
Как его переделать чтобы заполнялся массив не в шахматном порядке, а каждый третья ячейка - 1, 4, 7 каждой строки массива
 
Индивидуальные домашние задания
№ 1 Использование режимов адресации к памяти машины
Разработать программу шифрования текста (строки символов )
Шифровка производится в два этапа
 1-этап - запись в массив из строки символов
 2-этап - формирование двух строк из элементов массива

Массив для заполнения имеет размерность 8Х8. Длина исходной строки должна обеспечивать хранение символов, необходимого для заполнения массива.

Варианты порядка заполнения  массива и выходных строк

 а-  В шахматном порядке

Код:
;-------------------------------------
OutStr macro str ;макрос вывода строки
push dx
mov ah,09h
lea dx,str
int 21h
pop dx
endm
;-----------------------------------------------------------
OutStrInv macro strsrc,strdest,cikl ;макрос вывода строки
xor cx,cx
xor ax,ax
xor bx,bx ;bx - индекс очередного символа для обработки (равен cx(уменьшается) при считывании и увел. при записи в строку)
mov cl,8 ;в cx - размер строки для цикла обработки

cikl:
 mov bx,cx ;и записываем в bx индекс чтения
 mov al,strsrc[bx]

 mov strdest,al ;запись в выходную строку
 OutStr strdest
 dec cx
 cmp cx,0
 jge cikl
endm
;-----------------------------------------------------------

GotoXY macro x,y ;макрос установки позиции курсора в т.(x,y)
push ax
push bx
push dx
mov ah,02 ;Запрос на установку курсора
mov bh,0 ;Экран 0
mov dh,x ;Строка
mov dl,y ;Столбец
int 10h ;Передача управления в BIOS
pop dx
pop bx
pop ax
endm
;----------------------------------
ClrScr macro ;макрос очистки экрана
push ax
push bx
push cx
push dx
mov ah,06h ;AH 06 (прокрутка)
mov bh,07 ;Нормальный атрибут (черно/белый)
mov cx,0000 ;Верхняя левая позиция
mov dx,184Fh ;Нижняя правая позиция
int 10h ;Передача управления в BIOS
pop dx
pop cx
pop bx
pop ax
endm
;----------------------------------
MasNeChet macro strsrc,strdest,num,cikl ;макрос формирующий нечётн?е строки массива
xor cx,cx
xor ax,ax
mov bx,num ;bx - индекс очередного символа для обработки (равен cx(уменьшается) при считывании и увел. при записи в строку)
xor dx,dx
mov cl,8 ;в cx - размер строки для цикла обработки

cikl:
 mov al,strsrc[bx]
 push bx
 mov bx,dx
 mov strdest[bx],al ;запись в выходную строку
 inc dx
 pop bx
 inc bx

loop cikl
endm
;----------------------------------
MasChet macro strsrc,strdest,num,cikl ;формирование чётных строк массива
xor cx,cx
xor ax,ax
mov bx,num ;bx - индекс очередного символа для обработки (равен cx(уменьшается) при считывании и увел. при записи в строку)
mov dx,1
mov cl,8 ;в cx - размер строки для цикла обработки

cikl:
 mov al,strsrc[bx]
 push bx
 mov bx,dx
 mov strdest[bx],al ;запись в выходную строку
 dec dx
 pop bx
 inc bx

 mov al,strsrc[bx]
 push bx
 mov bx,dx
 mov strdest[bx],al ;запись в выходную строку
 inc dx
 inc dx
 inc dx
 pop bx
 inc bx
 dec cx
loop cikl
endm
;----------------------------------

.model small
.stack 100h
.data
Return db '',10,13,'$'  ;символ для перевода строки
Hello db 'Vvedite stroku:',10,13,'$';строка для запроса
idz db 'IDZ Var a,5',10,13,'$';метка программы
etap1 db 'Etap 1(form. massiva 8x8 shahmatkoj):',10,13,'$'
etap2 db 'Etap 2(vivod zashifr teksta):',10,13,'$'
param label byte ;Список параметров для int 21h
maxlen db 65 ;Максимальная длина вводимой строки - 32 символа
reallen db ? ;Реальная длина
string db 65 dup (' '),'$' ;Введенные символы
stringOut db 65 dup (' '),'$' ;Выводимые символы
st db ' ','$'
str1 db 8 dup (' '),'$'  ;массив 8х8
str2 db 8 dup (' '),'$'
str3 db 8 dup (' '),'$'
str4 db 8 dup (' '),'$'
str5 db 8 dup (' '),'$'
str6 db 8 dup (' '),'$'
str7 db 8 dup (' '),'$'
str8 db 8 dup (' '),'$'

.code
.486
start:
mov ax,@DATA
mov ds,ax
clrscr

;--------------------------------------------------------------------
gotoxy 0,0  ;перевод курсора в верхний левый угол экрана
OutStr idz
OutStr Return
OutStr Hello
mov ah,0Ah ;функция DOS считывания строки, param - параметры ввода
lea dx,param
int 21h
OutStr return ;перевод строки

xor cx,cx
xor ax,ax
xor bx,bx ;bx - индекс очередного символа для обработки (равен cx(уменьшается) при считывании и увел. при записи в строку)
xor dx,dx
mov cl,reallen ;в cx - размер строки для цикла обработки

cmp cl, 32
jle step1
mov cl,32 ;в cx - размер строки для цикла обработки
step1:

loopLabel:
 mov al,string[bx]
 push bx
 mov bx,dx
 mov stringOut[bx],al ;запись в выходную строку
 inc dx
 inc dx
 pop bx
 inc bx
loop loopLabel

mov cl,reallen ;в cx - размер строки для цикла обработки
cmp cl, 32
jle step2

sub cl,32 ;в cx - размер строки для цикла обработки
mov bx,32 ;bx - индекс очередного символа для обработки (равен cx(уменьшается) при считывании и увел. при записи в строку)
mov dx,1

loopLabel2:
 mov al,string[bx]
 push bx
 mov bx,dx
 mov stringOut[bx],al ;запись в выходную строку
 inc dx
 inc dx
 pop bx
 inc bx
loop loopLabel2

step2:

MasNeChet stringOut,str1,0,nch1   ;построение первой строки массива
MasChet stringOut,str2,8,ch1      ;
MasNeChet stringOut,str3,0,nch3
MasChet stringOut,str4,8,ch4
MasNeChet stringOut,str5,0,nch5
MasChet stringOut,str6,8,ch6
MasNeChet stringOut,str7,0,nch7
MasChet stringOut,str8,8,ch8     ;построение последней строки массива
 ;вывод строк в обычном порядке
 OutStr return ;перевод строки
OutStr etap1
 OutStr return ;перевод строки
OutStr str1
 OutStr return ;перевод строки
OutStr str2
 OutStr return ;перевод строки
OutStr str3
 OutStr return ;перевод строки
OutStr str4
 OutStr return ;перевод строки
OutStr str5
 OutStr return ;перевод строки
OutStr str6
 OutStr return ;перевод строки
OutStr str7
 OutStr return ;перевод строки
OutStr str8
 OutStr return ;перевод строки
 OutStr return ;перевод строки
;вывод строк змейкой
OutStr etap2
 OutStr return ;перевод строки
 OutStr str8
 OutStrInv str7, st, o7
 OutStr str6
 OutStrInv str5, st, o5
 OutStr str4
 OutStrInv str3, st, o3
 OutStr str2
 OutStrInv str1, st, o1

gotoxy 2,reallen
;--------------------------------------------------------------------
mov ah,1h ;ожидание нажатия клавиши
int 21h
;--------------------------------------------------------------------

exit:
mov ax,4C00h ;стандартный выход
int 21h
END start

Добавлено через 1 час, 11 минут и 45 секунд:
К примеру
  строка "12345678"

1хх2хх3х
4хх5хх6х
7хх8хх1х
2хх3хх4х
5хх6хх7х
8хх1хх2х
3хх4хх5х
6хх7хх8х
« Последнее редактирование: 14-04-2011 11:45 от neo_roses » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines