Постановка задачи
Разработать программу формирования информационного кадра для передачи по локальной вычислительной сети. Формат кадра следующий:
ПП | Данные | КС | КК |
ПП - преамбула (4 байта с кодом 55Н);
Данные - поле данных (16 байт);
КС - контрольная сумма (2 байта);
КК - конец кадра (1 байт с кодом 1FН).
Под формированием понимается заполнение поля данных кадра и формирование контрольной суммы. Данные для передачи хранятся в области памяти с именем SDATA и представляют собой последовательность 16 символов из набора от A до Z и от 0 до 9. При формировании кадра данные необходимо зашифровать согласно таблице кодировки.
Контрольная сумма формируется как арифметическая сумма всех байт поля данных.
В лабораторной работе использовать команды работы со строками:
LODS,STOS и др.
Таблицы кодировки:
A | Q | K | 3 | U | R | 3 | M |
B | L | L | D | V | 9 | 4 | V |
C | O | M | X | W | B | 5 | N |
D | T | N | 7 | X | H | 6 | E |
E | W | O | 4 | Y | 5 | 7 | Y |
F | G | P | U | 9 | 0 | 8 | J |
G | Z | Q | P | Z | 8 |
|
|
H | C | R | 6 | 0 | I |
|
|
I | 1 | S | Z | 1 | F |
|
|
J | A | T | S | 2 | K |
|
|
Описание алгоритма
- В строку-результат записывается преамбула.
- Далее в цикле, который повторяется 16 раз, выполняются следующие действия:
- загрузка очередного символа из строки с данными;
- поиск соответствующего символа в первой строке таблицы кодировки;
- вычисление адреса соответствующего закодированного символа (к адресу второй строки таблицы прибавляется значение регистра СХ) и сохранение его в регистре АL;
- запись этого символа в строку-результат.
- Установка значения регистра SI на адрес начала данных в выходной строке.
- Подсчёт контрольной суммы (в цикле загружается каждый символ строки и складывается с значением в регистре ВХ в результате в ВХ будет храниться контрольная сумма).
- Запись контрольной суммы в выходную строку.
- Запись признака конца кадра в выходную строку.
Описание входных и выходных данных
Входными данными являются исходная строка данных, таблица кодирования, преамбула и признак конца кадра. Исходная строка данных представляется как обычная строка, преамбула и признак конца кадра задаются как обычные последовательности байт, а таблица кодирования представляется двумя строками.
Выходными данными является кадр. Для него резервируется место в 23 байта.
Текст программы
;------------------------------------------------------
LAB6 SEGMENT
ASSUME CS:LAB6,DS:LAB6,SS:LAB6
ORG 100H
BEGIN: JMP MAIN
;------------------------------------------------------
SDATA DB 'SDFSD12YGVF6RT92'
PP DB 4 DUP(55H)
KK DB 1FH
ABC DB 'ABCDEFGHIJKLMNOPQRSTUVWXY9Z012345678'
ABC_C DB 'QLOTWGZC1A3DX74UP6ZSR9BH508IFKMVNEYJ'
RES DB 23 DUP(?)
;------------------------------------------------------
MAIN: CLD
LEA SI,PP
LEA DI,RES
MOV CX,2
REP MOVSW
LEA SI,SDATA
MOV CX,16
CYCLE: LODSB
MOV DX,DI
LEA DI,ABC+35
MOV BX,CX
STD
MOV CX,36
REPNE SCASB
MOV BP,CX
ADD BP,OFFSET ABC_C
MOV AL,[BP]
MOV DI,DX
CLD
STOSB
MOV CX,BX
LOOP CYCLE
XOR BX,BX
XOR AX,AX
MOV CX,16
LEA SI,RES+4
CHECK: LODSB
ADD BX,AX
LOOP CHECK
MOV AX,BX
STOSW
MOV AL,KK
STOSB
INT 20H
LAB6 ENDS
END BEGIN
;------------------------------------------------------
Результаты тестирования
В результате работы программы вы из строки 'SDFSD12YGVF6RT92' должны получить следующее
55Н 55Н 55Н 55Н
‘ZTGZTFK5Z9GE6S0K’
8CH 04H (1164)
1FH
В результате работы получено:
Результата находится по адресам [0160]-[0177]
Вывод
В результате работы мною были изучены команд языка Ассемблер, предназначенных для обработки строк символов.
0 коммент.:
Отправить комментарий