neo_roses
Новенький
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х
|