Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шифрование строки TASM 
:(
    Опции темы
neoroses
Дата 14.4.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.4.2011

Репутация: нет
Всего: нет



Вот листинг шифрование строки через массив 8х8 и выводом змейкой
Как его переделать чтобы заполнялся массив не в шахматном порядке, а каждый третья ячейка - 1, 4, 7 каждой строки массива

Шифровка производится в два этапа
 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

PM MAIL   Вверх
neoroses
Дата 14.4.2011, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 14.4.2011

Репутация: нет
Всего: нет



К примеру
  строка "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х
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0391 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.