Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

В.В. Демьянов Изучение системы команд микропроцессора серии К580 на учебно-отладочной микроЭВМ

.pdf
Скачиваний:
47
Добавлен:
19.08.2013
Размер:
329.66 Кб
Скачать

30

Продолжение программы 1

Адрес

Код

Метка

 

Мнемокод

Комментарий

 

команды

 

 

 

 

 

 

 

 

820F

0C

 

 

INR C

Содержимое

регистра C

 

 

 

 

 

увеличить на 1

 

8210

23

TRM

 

INX H

Указать

 

на

следующий

 

 

 

 

 

адрес слагаемого

 

8211

05

 

 

DCR B

Уменьшить на 1 содер-

 

 

 

 

 

жимое

счетчика

слагае-

 

 

 

 

 

мых

 

 

 

 

8212

C2 0B82

 

 

JNC CNT

Если не все слагаемые,

 

 

 

 

 

идти к CNT

 

 

8215

C9

 

 

RET

 

 

 

 

 

 

 

 

Программа 2

 

 

 

 

 

Адрес

Код

Метка

 

Мнемокод

Комментарий

 

команды

 

 

 

 

 

 

 

 

8200

AF

SBN

 

XRA

Очистить

аккумулятор и

 

 

 

 

 

признак CY

 

 

8201

32 0080

 

 

STA 8000

Очистить ячейку с адре-

 

 

 

 

 

сом 8000

 

 

 

8204

1A

CNT

 

LDA X, D

Записать

в аккумулятор

 

 

 

 

 

уменьшаемое

 

 

8205

9E

 

 

SBB M

Вычесть из содержимого

 

 

 

 

 

аккумулятора

вычитае-

 

 

 

 

 

мое

 

 

 

 

8206

77

 

 

MOV M,A

Записать разность на ме-

 

 

 

 

 

сто вычитаемого

 

8207

23

 

 

INX H

Указать

 

на

следующий

 

 

 

 

 

байт вычитаемого

 

8208

13

 

 

INX D

Указать

 

на

следующий

 

 

 

 

 

байт уменьшаемого

8209

0D

 

 

DCR C

Уменьшить на 1 содер-

 

 

 

 

 

жимое

счетчика

длины

 

 

 

 

 

числа

 

 

 

 

820A

C2 0482

 

 

JNC C T

Если число не кончилось,

 

 

 

 

 

идти к CNT

 

 

 

 

 

 

 

 

 

 

 

30

31

 

 

 

 

Продолжение программы 2

Адрес

Код

Метка

Мнемокод

Комментарий

 

команды

 

 

 

 

820D

D2 1582

 

JNC M1

Если нет займа (результат

 

 

 

 

положительный), идти к

 

 

 

 

M1

 

8210

AF

 

XRA

 

 

8211

3C

 

INR A

Занести 1 в аккумулятор

8212

32 00 80

 

STA 8000

Занести 1 по адресу 8200

8215

E7

 

RST4

Прервать

выполнение

 

 

 

 

программы

 

Существует несколько алгоритмов умножения чисел. Наиболее распространенный из них - алгоритм умножения в столбец, например:

При вычислении результата по этому алгоритму необходимо осуществить многократное суммирование со сдвигом влево множимого при одновременной проверке содержимого разрядов множителя, начиная со стороны его младшего разряда. При этом, если в очередном разряде множителя записана 1, то множимое прибавляется к сумме и сдвигается влево на 1 разряд, а если в разряде записан 0, то произойдет только сдвиг множимого. Сдвиг множимого влево можно заменить сдвигом суммы вправо. По этому

алгоритму работает программа умножения двух однобайтных чисел с получением двухбайтного результата (программа 3). В регистре D содержится множимое, в регистре Е - множитель. Результат записывается в регистры В и С.

Программа 3

Адрес

Код

Метка

Мнемокод

Комментарий

 

команды

 

 

 

8200

01 0000

MPL

LXI B, 0000

Очистить регистры B, C

8203

3E 01

 

MVI A,01

Загрузить в аккумулятор

 

 

 

 

указатель разряда

8205

A7

 

ANA A

Очистить признак C

31

32

Продолжение программы 3

Адрес

Код

Метка

Мнемокод

Комментарий

 

команды

 

 

 

 

8206

F5

MPL1

PUSH PSW

Сохранить указатель раз-

 

 

 

 

ряда в стеке

8207

A3

 

ANA E

Проверить

содержимое

 

 

 

 

очередного разряда мно-

 

 

 

 

жителя

 

8208

78

 

MOV A,B

Загрузить

в аккумулятор

 

 

 

 

старший байт суммы

8209

CA 0D 82

 

JZ MPL2

Если в очередном поряд-

 

 

 

 

ке записан 0, идти к

 

 

 

 

MPL2

 

820C

82

 

ADD D

Прибавить содержимое к

 

 

 

 

сумме

 

820D

1F

MPL2

RAR

Сдвинуть

сумму вправо

 

 

 

 

(младший байтC)

820E

47

 

MOV B,A

Сохранить

содержимое

 

 

 

 

аккумулятора в регистре

 

 

 

 

B

 

820F

79

 

MOV A,C

Загрузить

в аккумулятор

 

 

 

 

младший байт суммы

8210

1F

 

RAR

Сдвинуть число в акку-

 

 

 

 

муляторе вправо (Cв

 

 

 

 

старший байт)

8211

4F

 

MOV C,A

Сохранить

содержимое

 

 

 

 

аккумулятора в регистре

 

 

 

 

C

 

8212

F1

 

POP PSW

Получить из стека указа-

 

 

 

 

тель разряда

8213

17

 

RAL

Указатель на следующий

 

 

 

 

разряд

 

8214

D2 0682

 

JNC MPL1

Если разряд не послед-

 

 

 

 

ний, идти к MPL1

8217

E7

 

RST4

Прервать

выполнение

 

 

 

 

программы

32

33

Деление двоичных чисел основывается на последовательном вычитании делителя из делимого и остатков от деления. Использование в двоичном коде только двух цифр (0 и 1) исключает в каждом цикле деления необходимость определения числа делителей, содержащихся в текущем значении делимого или остатка (достаточно только сравнить их). Основанная на этом алгоритме программа 1 производит деление однобайтных чисел. Делимое содержится в регистре Е, делитель - в регистре D, частное - в регистре Н, остаток - в регистре С.

Для вычисления специальных функций (SIN X, COS X, LN X и т.п.) применяются алгоритмы, основанные на разложении этих функций в соответствующие ряды. Это занимает длительное время и обеспечивает невысокую точность, т.к. у МП серии К580 сравнительно небольшая длина машинного слова и невысокая производительность. Поэтому, когда ставятся жесткие требования по точности и быстродействию, функции задаются в виде таблиц. Однако такое представление требует значительно большего объема памяти, чем при их вычислении.

Программа 4

Адрес

Код

Метка

Мнемокод

Комментарий

 

команды

 

 

 

8200

21 0800

DIVB

LXI B, 0008

Загрузить счетчик блоков

 

 

 

 

в регистр L и очистить

 

 

 

 

регистр H

8203

0E 00

 

MVI C,00

Очистить регистр проме-

 

 

 

 

жуточного делимого

8205

7B

MXT

MOV A,E

Загрузить делимое в ак-

 

 

B

 

кумулятор

8206

17

 

RAL

Сдвинуть старший байт в

 

 

 

 

признак C

8207

5F

 

MOV E,A

Возвратить делимое в ре-

 

 

 

 

гистр E

8208

79

 

MOV A,C

Загрузить в аккумулятор

 

 

 

 

промежуточное делимое

 

 

 

 

из регистра C

8209

17

 

RAL

Сдвинуть признак C в

 

 

 

 

младший байт

33

34

 

 

 

 

Продолжение программы 4

Адрес

Код

Метка

Мнемокод

Комментарий

 

команды

 

 

 

 

820A

92

 

SUB D

Вычесть из модифициро-

 

 

 

 

ванного промежуточного

 

 

 

 

делимого делитель

820B

D2 0F82

 

JNC N0ADD

Если признак C=1, вос-

 

 

 

 

становить

содержимое

 

 

 

 

аккумулятора

820E

82

 

ADD D

 

 

820F

4F

N0AD

MOV C,A

Возвратить

промежуточ-

 

 

D

 

ные данные в регистр C

8210

3F

 

CMC

Инвертировать признак C

8211

7C

 

MOV A,H

Загрузить частное в ак-

 

 

 

 

кумулятор

 

8212

17

 

RAL

Сдвинуть

признак C в

 

 

 

 

младший разряд частного

8213

67

 

MOV H,A

Сохранить частное в ре-

 

 

 

 

гистре H

 

8214

2D

 

DCR L

Уменьшить на 1 содер-

 

 

 

 

жимое счетчика битов L

8215

C2 0582

 

JNZ MXTB

Если проверены 8 разря-

 

 

 

 

дов, то останов, иначе

 

 

 

 

идти к MXTB

8218

E7

 

RST4

Прервать

выполнение

 

 

 

 

программы

 

2. ЗАДАНИЕ ДЛЯ ДОМАШНЕЙ ПОДГОТОВКИ

1. Изучите группу арифметических команд МП серии К580.

2.Изучите программы 1-4, приведенные выше. Рассмотрите алгоритмы их работы. Рассмотрите результат выполнения каждой программы на конкретных числовых примерах.

3.Произведите оценку времени выполнения программ умножения

иделения восьмиразрядных двоичных чисел.

34

35

4.Составьте программы исследования результатов перемножения и деления чисел, приняв программы 3 и 4 в качестве подпрограмм.

5.Разработайте программу сложения двух восьмиразрядных чисел

сполучением результата в двоично-десятичном коде (результат должен быть записан по адресам 8000 и 8001).

3.ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ

3.1. Исследовать программу сложения однобайтных чисел с получением двухбайтного результата.

Ввести в микроЭВМ программу 1. Записать в микроЭВМ последовательность из пяти чисел, начиная с адреса 8400. Запустить программу на счет и проверить ее выполнение по данным, записанным в регистре С и аккумуляторе МП. Изменить программу 1 так, чтобы результат ее выполнения записывался по адресам 8000 и 8001. Изменить в программе количество слагаемых и выполнить счет заново.

3.2.Исследовать программу вычитания двух чисел, имеющих одинаковую длину.

Ввести программу 2 в микроЭВМ. Занести в регистровые пары DЕ

иHL начальные адреса младших байтов уменьшаемого и вычитаемого (используйте область памяти 8400-87FF), а в регистр С - длину числа в байтах (для первого случая длина равна 1). Записать по адресам, указанным в регистровых парах DЕ и HL, уменьшаемое и вычитаемое (выбрать уменьшаемое больше, чем вычитаемое). Запустить программу на счет и исследовать результат ее выполнения по числу, записанному по адресу, где находится вычитаемое, и по адресу 8000. Изменить числа, записанные по адресам, занесенным в регистровые пары DЕ и HL так, чтобы вычитаемое было больше уменьшаемого, запустить программу на счет и проанализировать результат. Исследовать в аналогичной последовательности результаты вычитания двухбайтных чисел.

3.3.Исследовать программу умножения двух восьмиразрядных чисел с получением шестнадцатиразрядного результата.

Ввести в микроЭВМ программу умножения, разработанную самостоятельно на основе программы 3. Осуществить пуск программы и проверить результат умножения двух чисел по числу, записанному в регистрах В, С.

35

36

3.4. Исследовать программу деления двух восьмиразрядных чисел. Ввести в микроЭВМ программу 4. Занести в регистры Е и D делимое и делитель. Запустить программу и проверить результат деления по

содержимому регистров H и C.

3.5.Исследовать программу сложения двух восьмиразрядных чисел

сполучением результата в двоично-десятичном коде.

Ввести в микроЭВМ программу, разработанную при выполнении п.5 задания для домашней подготовки. Проверить результаты выполнения программы при сложении следующих чисел 33+25; 38+25; 98+25. Заменить в разработанной программе операцию сложения на операцию вычитания и проверить, возможно ли осуществить десятичную коррекцию числа аккумулятора после команды вычитания.

4. СОДЕРЖАНИЕ ОТЧЕТА

Отчет должен содержать:

1) перечень арифметических команд МП серии К580;

2)алгоритмы сложения, умножения и деления;

3)разработанные на основании п.4 и 5 задания для домашней подготовки программы;

4)расчет времени выполнения программ умножения и деления восьмиразрядных чисел.

5. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Какие команды арифметических операций может выполнять МП К580?

2.Сформулируйте правило выполнения МП команды DAA.

3.После каких команд можно осуществлять десятичную коррекцию числа аккумулятора (выполнять команду DAA)?

4.Как оценить максимальное время выполнения подпрограммы умножения двух чисел (программа 3)?

5.Можно ли непосредственно исследовать перемножения двух чисел по подпрограмме 3?

6.На чем основаны алгоритмы работы подпрограмм умножения и деления чисел?

36

37

7.Представьте числа от 0 до 20 в двоично-десятичном коде.

8.Укажите возможные способы представления чисел для МП К580.

9.Оцените максимальное время выполнения программы деления двух чисел, если время такта для МП Т=1мкс.

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

1. Микропроцессоры: В 3 кн. Кн 3: Средства отладки: Лаб. практикум и задачник. Учеб. для вузов/ Под ред. Л.Н. Преснухина . - Минск:

Высш. шк., 1987.- 287 с.

2.Микропроцессоры: В 3 кн. Кн 1: Архитектура и проектирование микроЭВМ. Организация вычислительных процессов: Учеб. для вузов/ Под ред. Л.Н. Преснухина . - Минск: Высш. шк., 1987.- 414 с.

3.Электронные промышленные устройства: Учеб. для вузов/ В.И.Васильев, Ю.М.Гусев, В.Н.Миронов и др.- М.: Высш. шк., 1988.- 303 с.

4.Коган В.М., Сташин В.В. Основы проектирования микропроцессорных устройств автоматики. - М.: Энергоатомиздат, 1987.-304 с.

1.Майоров В.Г., Гаврилов А.И. Практический курс программирования микропроцессорных систем.- М.: Машиностроение, 1989.-272 с.

37

38

Приложение Система команд микропроцессоров К580ВМ80А и К1821ВМ85А

Обозначение

Код

Выполняемая функция

Количество

 

 

 

 

 

 

 

7654 3210

 

байт

цик-

так-

 

 

 

 

лов

тов

 

Команды передачи данных

 

 

 

MOV Rl, R2

OIDD DSSS Пересылка из регистра (R2)

1

1

4

 

 

в регистр (Rl)

 

 

 

MOV M, R

0111 OSSS

Пересылка из регистра

1

2

7

 

 

в память

 

 

 

MOV R, M

OIDD D11O

Пересылка из памяти

1

2

7

 

 

в регистр

 

 

 

MVI R

OODD D11O

Пересылка непосредст-

2

2

7

 

 

венных данных в регистр

 

 

 

MVI M

36

Пересылка непосредст-

2

3

10

 

 

венных данных в память

 

 

 

LXI В

01

Загрузка непосредственных

3

3

1

 

 

данных в регистры В и С

 

 

 

LXI D

11

Загрузка непосредственных

3

3

10

 

 

данных в регистры D и Е

 

 

 

LXI H

21

Загрузка непосредственных

3

3

10

 

 

данных в регистры Н и L

 

 

 

LXI SP

31

Загрузка непосредственных

3

3

10

 

 

данных в указатель стека

 

 

 

STAX В

02

Косвенная запись А в па-

1

2

7

 

 

мять посредством В и С

 

 

 

STAX D

12

Косвенная запись А в па-

1

2

7

 

 

мять посредством DH Е

 

 

 

LDAX В

0A

Косвенная загрузка А по-

1

2

7

 

 

средством В и С

 

 

 

LDAX D

Косвенная загрузка А по-

1

2

7

 

 

средством D и Е

 

 

 

STA

32

Прямая запись А в память :

3

4

13

LDA

ЗА

Прямая загрузка А 1

3

4

13

SHLD

22

Прямая запись Н и L

3

5

16

 

 

в память

 

 

 

 

 

 

 

 

38

39

Продолжение прил.

Обозначение

Код

 

Выполняемая функция

Количество

 

 

 

 

 

 

 

7654 3210

 

байт

цик-

так-

 

 

 

 

 

лов

тов

LHLD

2A

 

Прямая загрузка Н и L

3

5

16

XCHG

ЕВ

 

Обмен между Н, L и D, Е

1

1

4

 

 

 

Команды стека

 

 

 

PUSH В

C5

 

Пересылка В и С в стек

1

3

12

PUSH D

D5

 

Пересылка DHEB в стек

1

3

12

PUSH Н

E5

 

Пересылка H и L в стек

1

3

12

PUSH PSW

F5

 

Пересылка А и регистра

1

3

12

 

 

 

признаков в стек

 

 

 

POP в

Cl

 

Загрузка В и С из стека

1

3

10

POP D

Dl

 

Загрузка D и Е из стека

1

3

10

POP H

El

 

Загрузка Н и L из стека

1

3

10

POP PSW

Fl

 

Загрузка А и регистра

1

3

10

 

 

 

признаков из стека

 

 

 

XTHL

E3

 

Обмен между Н, L и стеком

1

5

16

SPHL

F9

 

Пересылка Н и L

1

1

6

 

 

 

в указатель стека

 

 

 

 

 

Команды переходов

 

 

 

JMP

C3

 

Безусловный переход

3

3

10

JC

DA

 

Переход при переносе

3

2/3

7/10

JNC

D2

 

Переход при отсутствии

3

2/3

7/10

 

 

 

переноса

 

 

 

JZ

CA

 

Переход при нуле

3

2/3

7/10

JNZ

C2

 

Переход при отсутствии

3

2/3

7/10

 

 

 

нуля

 

 

 

JP

F2

 

Переход при плюсе

3

2/3

7/10

JM

FA

 

Переход при минусе

3

2/3

7/10

JPE

EA

 

Переход при четности

3

2/3

7/10

JPO

E2

 

Переход при нечетности

3

2/3

7/10

PCHL

E9

 

Пересылка Н и L в СК

1

1

6

39

Соседние файлы в предмете Автоматизация технологических процессов и производств