- •Введение
- •Порядок оформления срс по дисциплине «Системное программирование»
- •1. Постановка задачи.
- •2. Краткое описание алгоритма.
- •3. Текст программы.
- •4 . Результаты тестирования и характеристики
- •Трансляция программы. Компоновка программы. Отладка программы. Утилита make.
- •Арифметические команды: сложение,вычитание, умножение и деление со знаком и без знака.
- •Исследование различных структур данных.
- •4 Результаты тестирования и характеристики
- •Исследование операций над двоичными числами.
- •Команда int-прерывание .
- •Функции для работы с клавиатурой.
- •Вызовы функции, инициируемые прерыванием типа 21
- •Логические команды. Реализация программ разветвляющейся структуры
- •Команды передачи управления.
- •4 . Результаты тестирования и характеристики
- •Организация ввода данных и вывода результатов
- •Реализация алгоритмов работы со строками
- •Цепочные команды
- •Литература
Цепочные команды
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. ХАРАКТЕРИСТИКИ ПРОГРАММЫ И ЕЁ ПОЛНОТЫ ТЕСТИРОВАНИЯ.
В результате проведённого мною тестирования были получены правильные результаты для кодировки. Единственным ограничением является то, что пользователь должен сам следить за корректностью ввода, т.е. все символы должны быть введены заглавными буквами.
