Изучение команд языка Ассемблер, предназначенных для обработки строк символов.

 

Постановка задачи

Разработать программу формирования информационного кадра для передачи по локальной вычислительной сети. Формат кадра следующий:

    ПП

Данные

КС

КК

ПП - преамбула (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

 

 

Описание алгоритма

  1. В строку-результат записывается преамбула.
  2. Далее в цикле, который повторяется 16 раз, выполняются следующие действия:
    1. загрузка очередного символа из строки с данными;
    2. поиск соответствующего символа в первой строке таблицы кодировки;
    3. вычисление адреса соответствующего закодированного символа (к адресу второй строки таблицы прибавляется значение регистра СХ) и сохранение его в регистре АL;
    4. запись этого символа в строку-результат.
  3. Установка значения регистра SI на адрес начала данных в выходной строке.
  4. Подсчёт контрольной суммы (в цикле загружается каждый символ строки и складывается с значением в регистре ВХ в результате в ВХ будет храниться контрольная сумма).
  5. Запись контрольной суммы в выходную строку.
  6. Запись признака конца кадра в выходную строку.

Описание входных и выходных данных

Входными данными являются исходная строка данных, таблица кодирования, преамбула и признак конца кадра. Исходная строка данных представляется как обычная строка, преамбула и признак конца кадра задаются как обычные последовательности байт, а таблица кодирования представляется двумя строками.

Выходными данными является кадр. Для него резервируется место в 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

В результате работы получено:

clip_image002

Результата находится по адресам [0160]-[0177]

Вывод

В результате работы мною были изучены команд языка Ассемблер, предназначенных для обработки строк символов.

Предлагаю ознакомиться с аналогичными статьями: