1. Березин Б.И., Березин С.Б. Начальный курс С и С++. - М.: Диалог-МИФИ, 1996.
2. Питерсон У., Уэлдон Э. Коды, исправляющие ошибки: Пер. с англ. - М.: Мир, 1976. - 594 с.
3. Шеннон К.Э. Теория связи в секретных системах. В кн. К.Э. Шеннона. «Работы по теории информации и кибернетике». - М.: ИЛ, 1963.
ПРИЛОЖЕНИЯ
Приложение А
Листинг программы
<h11.c>
#include <stdio.h>
#include <dir.h>
#include <conio.h>
#include <process.h>
#include <string.h>
#include <alloc.h>
extern void far hem1511(const char far*, char far*); // функция перекодировки
extern void far unhem1511(const char far*, char far*); // функция перекодировкиrabota(int);()
{ch,end;(C80);
_setcursortype(_NOCURSOR);(WHITE);();("1. Закодировать файл\r\n2. Раскодировать файл\r\nВыход - Esc");=1;(end!=0)
{=getch();(ch)
{'1': rabota(1); clrscr();("1. Закодировать файл\r\n2. Раскодировать файл\r\nВыход - Esc");break;'2': rabota(2); clrscr();("1. Закодировать файл\r\n2. Раскодировать файл\r\nВыход - Esc");break;27: end=0;
}
}0;
}rabota(int mode)
{char *in_buffer[6],*out_buffer[6],in_name[MAXPATH],out_name[MAXPATH];*file_in, *file_out;int num;_in=NULL; file_out=NULL;(file_in==NULL)
{(WHITE);("\r\nВведите имя входного файла: ");(YELLOW);_name[0] = 254;
_setcursortype(_SOLIDCURSOR);(in_name);(in_name[1]==0)
{
_setcursortype(_NOCURSOR);(WHITE);1;
}
_setcursortype(_NOCURSOR);_in = fopen(&in_name[2], "rb");(file_in==NULL)
{(LIGHTRED);("\r\nНе могу открыть файл с именем %s",&in_name[2]);(WHITE);
}
}(file_out==NULL)
{(WHITE);("\r\nВведите имя выходного файла: ");(LIGHTMAGENTA);_name[0] = 254;
_setcursortype(_SOLIDCURSOR);(out_name);(out_name[1]==0)
{
_setcursortype(_NOCURSOR);(WHITE);1;
}
_setcursortype(_NOCURSOR);_out = fopen(&out_name[2], "wb");(file_out==NULL)
{(LIGHTRED);("\r\nНе могу открыть файл с именем %s",&out_name[2]);(WHITE);
}
}
{(mode==2)
{=fread(in_buffer, 6, 1, file_in); // чтение буфера(num) {((char far*)in_buffer, (char far*)out_buffer); // конвертация буфера(out_buffer, 4, 1, file_out);
}
}
{=fread(in_buffer, 4, 1, file_in); // чтение буфера(num) {((char far*)in_buffer, (char far*)out_buffer); // конвертация буфера(out_buffer, 6, 1, file_out);
}
}
}(!feof(file_in));(file_out); fclose(file_in);(LIGHTCYAN);("\r\nФайл %s успешно перекодирован в %s",&in_name[2],&out_name[2]);
_setcursortype(_NOCURSOR); textcolor(WHITE);();0;
}
Приложение Б
Листинг функции перекодирования
<h11a.asm>
.modelSMALL
.code
_hem1511, _unhem1511
_hem1511proc far; функция закодированияinbuf:dword, outbuf:dword; аргументы функции - два дальних указателя, sp; адресуем стек через bp; сохраняем используемые регистры, [inbuf], [outbuf], eax, ebx, ecx; формируем информационные биты, 3:, ebx, eax, 1, 1, 1, eax, 3, 3, 1, eax, 7, 7, 17; функция определения проверочных битов, ax, dl, ax; устанавливаем первый проверочный бит, dh, 1, ax; второй, cl, 3, ax; четвертый, ch, 7, ax; восьмой, bx; восстанавливаем регистры
_hem1511endp
_unhem1511proc far; функция раскодированияinbuf:dword, outbuf:dword; в параметрах - два указателя, sp, [inbuf], [outbuf], ebp, eax, 3:, ax, ax, bx, 1; формируем биты синдрома, 1, 15, al; нулевой, al, bx, 1, 2, 15, al; первый, al, bx, 1, 4, 15, al; второй, al, bx, 1, 8, 15, al; третий, ax, dl; формируем синдром из полученных битов, 1, dh, 2, cl, 3, ch, al; если синдром равен 0, то переходим на normal, cx; помещаем синдром в cl, al, cl, 1; исправляем ошибку, cl:, ax, 2, bx, 1, 2, bx, 3, 4, bx, 7, 5, eax, 10
;loop num2, ebp; восстанавливаем регистры
_unhem1511endpnear
; bx - входные 16 бит
; в регистрах dl, dh, cl, ch, - проверочные биты
; dl - первый, dh - второй, cl - четвертый, ch - восьмой
; получаем по очереди каждый бит и складываем с необходимыми проверочными битами, ax, cx, dx, 2, bx, 1; получаем 3 бит, 15, al; складываем с первым битом, al; складываем со вторым битом, al, 2, bx, 1;5, 15, al, al, al, 1, bx, 1;6, 15, al, al, al, 1, bx, 1;7, 15, al, al, alal, al, 2, bx, 1;9, 15, al, alal, al, 1, bx, 1;10, 15, al, al, al, 1, bx, 1;11, 15, al, al, al, al, 1, bx, 1;12, 15, al, al, al, 1, bx, 1;13, 15, al, al, al, al, 1, bx, 1;14, 15, al, al, al, al, 1, bx, 1;15, 15, al, al, al, al
Приложение В
Алгоритм работы программы
Приложение Г
Алгоритм работы внешних функций преобразования