Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
1. ПОСТАНОВКА ЗАДАЧИ.
Разработать программу или распаковки информационного кадра
для передачи по локальной вычислительной сети.
Формат кадра:
ПП - преамбула (4 байта с кодом 55h)
Данные - поле данных (16 байт)
КС - контрольная сумма (2 байта)
КК - конец кадра (1 байт с кодом 1Fh)
Под распаковкой понимается чтение поля данных кадра и
проверка контрольной суммы. Данные для передачи (приема)
хранятся в области памяти с именем SDATA и представляют собой
последовательность 16 символов из набора от A до Z и от 0 до 9.
При распаковке кадра данные необходимо расшифровать согласно
указанной таблици кодировки
Контрольная сумма формироваться как арифметическая сумма
всех байт поля данных. В СРС использовать команды
работы со строками: LODS,STOS и др.
ТАБЛИЦА КОДИРОВКИ
0 I A Q K 3 U R
1 F B L L D V 9
2 K C O M X W B
3 M D T N 7 X H
4 V E W O 4 Y 5
5 N G Z Q P Z 8
6 E H C K 6
7 Y I 1 S Z
8 J J A T S
9 0
2. КРАТКОЕ ОПИСАНИЕ АЛГОРИТМА.
Основная идея алгоритма в том, что в ASCII таблице цифры 0..9 и заглавные буквы латинского алфавита A..Z расположены последовательно (по возрастанию ASCII кода), но с промежутком в 7 символов, т.к. нам эти символы не нужны, то мы их пропускаем, и из кода символа в зависимости от его положения вычитаем 30h (для цифр), или 55d для букв
В основе алгоритма лежит использование команды xlat в паре с командами lodsb и stosb:
lodsb
:загружает регистр AL байтом, находящимся в памяти, на
который указывает смещение в индексном регистре SI
относительно DS.
stosb:
пересылает содержимое регистра AL в байт, находящийся в
памяти, на который указывает смещение в индексном регистре
DI относительно сегмента ES.
xlat:
заменяет содержимое регистра AL байтом из таблицы
перекодировки, начальный адрес которой относительно сегмента
DS находится в регистре BX.
3. ТЕКСТ ПРОГРАММЫ.
.8086
.MODEL TINY
CODE SEGMENT
ASSUME CS: CODE, DS: CODE
ORG 100H
BEGIN:
JMP START
;опpеделяем данные
;поле SDATA предназначено для распакованной строки
;LAB3_... -кадр в заданном формате
Crc_er db 'CRC error!!! ',0Dh,0Ah,'$'
control db 'CWDD4IIIIIIIIIII - Control ',0Dh,0Ah,'$'
SDATA DB 16 DUP (?)
DB ' - Unpacked Data',0Dh,0Ah,'$'
LAB3_PA DB 4 DUP (55h)
LAB3_DATA DB 'HELLO00000000000'
LAB3_CRC DW 0384h
DB ' - CRC$'
LAB3_END DB 1Fh
;таблица кодиpовки 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
CODE_TABLE DB 'IFKMVNEYJ0QLOTW ZC1A3DX74 P6ZSR9BH58'
START:
cld
mov si,offset lab3_data
mov bx,offset code_table
mov di,offset sdata
mov cx,16
mov dx,[lab3_crc]
loop_coding:
xor ax,ax
lodsb
sub dx,ax
cmp al,'A'
jae is_a
sub al,'0'
jmp skip
is_a:
sub al,55D
skip:
xlat
stosb
loop loop_coding
or dx,dx
jne Crc_error
mov ah,9h
mov dx,offset Control
int 21h
mov ah,9h
mov dx,offset Sdata
int 21h
mov ah,9h
mov dx,offset Lab3_crc
int 21h
ret
Crc_error:
mov ah,9h
mov dx,offset Crc_er
int 21h
ret
CODE ENDS
END BEGIN
4. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ.
а) вводимая строка: 'HELLO00000000000'
закодированая строка: 'CWDDLIIIIIIIIIII'
б) вводимая строка: 'IT0IS0LB40300000'
закодированая строка: '1ST12IDLQMIIIIII'
5. ХАРАКТЕРИСТИКИ ПРОГРАММЫ И ЕЁ ПОЛНОТЫ ТЕСТИРОВАНИЯ.
В результате проведённого мною тестирования были получены правильные результаты для кодировки. Единственным ограничением является то, что пользователь должен сам следить за корректностью ввода, т.е. все символы должны быть введены заглавными буквами.
Литература
1. К.Г. Финогенов. Основы языка ассемблера. М.: «Радио и связь», 2000г
2. В. Юров. Основы языка ассемблера. С-П.: «Питер», 2001г
3. В. Юров, С. Хорошенко. Assembler. С-П.: «Питер», 1999г
4. К. Данкан. Профессиональная работа в MSDOS. М.: «Мир», 1993г
5. А.А. Чекотов. Использование Turbo Assembler при разработке программ. Киев: «Диалектика», 1995г
6. В.А. Пильщиков. Программирование на языке Assembler IBM PC. М.: «Диалог МИФИ», 1994г
7. Дж. Гудмен. Управление памятью для всех. Киев: «Диалектика», 1995г
8. П. Аорлон. Персональный компьютер фирмы IBM. М.: «Радио и связь», 1991г
9. А. Скэнлон. Персональные ЭВМ фирмы IBM PC и XT. Программирование на языке ассемблера. М.: «Радио и связь», 1988г
10. В.Ю. Пирогов Assembler. Учебный курс. – М.: «Номедж», 2001г
11. Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. М.: Наука, 1988г
Дата публикования: 2015-10-09; Прочитано: 287 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!