Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ильдар КУРСОВИК.doc
Скачиваний:
24
Добавлен:
16.04.2015
Размер:
158.72 Кб
Скачать

2.Практическая разработка.

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

Как известно, цифра, закодированная при помощи кода КОИ-7, отличается от незакодированной на число 30, а буквенное обозначение шестнадцатеричного числа – на 3716. Исходя из этой информации, принцип работы данной программы заключается в том, что константы из массива, начинающегося с адреса 500016, по очереди копируются в аккумулятор и над каждой из них осуществляются следующие действия: данное двузначное число подвергается четырём сдвигам вправо с помощью команды “RAR”, в результате чего его символы “меняются местами”. Это нужно, чтобы закодировать первый символ. Затем обнуляется первый символ результата путём применения команды “ANI 0F”. С помощью команды “CPI 0A” определяется, цифра или буква стоит на второй позиции.

На следующем этапе, в зависимости от того, цифра это или буква, результат складывается с числом 30 или 37 соответственно. После этого с исходным числом проделывается вышеописанная работа за исключением сдвигов вправо. Тем самым осуществляется кодировка второго символа исходной константы.

После того, как первая константа закодирована, получившееся в результате двухбайтное число заносится из аккумулятора в массив, начинающийся с адреса 600016.

Затем все действия повторяются применительно к каждой заданной константе в цикле.

В программе используется цикл на убывание. В паре <HL> создаётся счётчик на десять шагов, так как требуется закодировать десять констант.

2.2 Листинг программы

Адрес

Текст

ассемблера

Коды

ассемблера

Комментарии

4000

LXI B, 500016

01 00 50

Загрузка начала исходного массива

4003

LXI D, 600016

11 00 60

Загрузка начала массива кодов КОИ-7

4006

MVI H, 0Ah

26 0A

Создание счётчика в регистре H на 10 шагов

4008

JP 500016

F2 00 50

Выбор положительного числа

400B

LDAX B

0A

Запись первого числа в аккумулятор

400C

RAR

1F

Сдвиг вправо

400D

RAR

1F

Сдвиг вправо

400E

RAR

1F

Сдвиг вправо

400F

RAR

1F

Сдвиг вправо

4010

ANI 0Fh

E6 0F

Обнуление первой тетрады числа

4012

CPI 0Ah

FE 0A

Сравнение результата с 0Аh

4014

JP 401E16

F2 1E 40

Если это буква, прыжок к адресу 401E

4017

ADI 30h

C6 30

Сложение результата с константой 30h

4019

JMP 402116

C3 20 40

Прыжок к адресу 4020

401C

ADI 37h

C6 37

Сложение результата с константой 37h

401E

STAX D

12

Запись получившегося числа в массив кодов КОИ-7

401F

INX D

13

Переход к следующей ячейке массива кодов КОИ-7

4020

LDAX B

0A

Запись первого числа в аккумулятор

4021

ANI 0Fh

E6 0F

Обнуление первой тетрады числа

4023

CPI 0Ah

FE 0A

Сравнение результата с 0Аh

4025

JNC 403016

D2 2F 89213647048 40

Если это буква, прыжок к адресу 402F

4028

ADI 30h

C6 30

Сложение результата с константой 30h

402A

JMP 403216

C3 32 40

Прыжок к адресу 4032

402D

ADI 37h

C6 37

Сложение результата с константой 37h

402F

STAX D

12

Запись получившегося числа в массив кодов КОИ-7

4030

INX D

13

Переход к следующей ячейке массива кодов КОИ-7

4031

INX B

03

Переход к следующей ячейке массива исходных констант

4032

DCR H

25

Уменьшение счётчика на 01h

4033

JP 400816

F2 08 40

Прыжок к началу цикла, если в счётчике не 00h

4036

JMP 004016

C3 40 00

Выход в монитор