Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Центральные и переферийные устройства электронно вычислительных средств.pdf
Скачиваний:
284
Добавлен:
02.05.2014
Размер:
6.14 Mб
Скачать

Глава 3. Системы команд микроЭВМ

54

действию и объему занимаемой памяти они более эффективны. Так, команды упрощенного формата для работы с РОН являются однобайтовыми, а поле REG помещено в байт с кодом операции. При работе с данными в памяти используется регистр АХ, а данные в сегментах данных адресуются 2-м и 3-м байтами команды.

3.3. Программирование микропроцессора

Программа обработки информации, записываемая в память МП, составляется на основе набора команд, присущих данному конкретному типу микропроцессора. Рассмотрим особенности программирования на языке машинных команд микропроцессора КР580ИК80, для чего разберем несколько примеров.

Пример 3.5.

Подпрограмма 3.1 обеспечивает извлечение числа из адреса памяти 0В00, инвертирование его и запись

результата в адрес памяти 0В01:

Подпрограмма 3.1 (в мнемокодах)

Мнемокод

Комментарий

LDA 0В00

Загрузить в аккумулятор число из адреса 0В00 ОЗУ

СМА

Инвертировать число, находящееся в аккумуляторе

SТА 0В01

Записать результат инвертирования по адресу 0В01

RSТ 1

Прервать выполнение программы 1

При записи программы все числа представляются в шестнадцатеричной системе счисления.

Для записи программы в память микроЭВМ необходимо перевести мнемокоды команд в машинные коды. Команды могут быть одно-, двухили трехбайтные и должны занимать в памяти соответственно один, два или три адреса: (рис. 2.8)

 

Подпрограмма 3.1 (размещение по адресам памяти)

Адрес

Число

Комментарий

0800

Код команды LDA

0801

00

Младший байт адреса числа

0802

Старший байт адреса

0803

2F

Код команды СМА

0804

32

Код команды SТА

0805

01

Младший байт адреса peзультата

0806

Старший байт адреса

0807

CF

Код команды RST 1

Предварительную запись программ удобно проводить в более компактной форме: указать начальный адрес каждой команды, помня при этом, что команды в зависимости от -длины (одно-, двухили трехбайтовые) в памяти будут занимать от 1 до 3 последовательных ячеек памяти. При такой записи в левом столбце указываются лишь адреса команд. Это позволяет сократить объем при описании программ и сделать более простым их

анализ:

 

 

 

 

Подпрограмма 3.1 (общий вид записи)

 

Адрес

Машинный код

Мнемокод

Комментарий

0800

3A

000ВА

LDA 0В00

Получить число

0803

2F

 

СМА

Инвертировать число

0804

32

010В

SТА 0В01

Запись по адресу 0В01

0807

CF

 

RST 1

Прервать выполнение

 

 

 

 

программы

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

Глава 3. Системы команд микроЭВМ

55

чество раз. Для обращения к подпрограммам и возврата из них используются команды вызова подпрограмм САLL и возврата RET.

Пример 3.6.

Подпрограмма временной задержки. Алгоритм работы подпрограммы приведен на рис. 3.13. Общее время задержки вычисляется по формуле

TЦДТ1+(ТТ2+ТТ3+ТТ4)*NI+TT5,

где NI - число, первоначально записанное в счетчике. В качестве счетчика используется один из РОН В, в который записывается число NI из регистра С. Команда NОР здесь используется для увеличения времени выполнения цикла, а следовательно, и общей задержки. Вместо команды NОР можно использовать любую последовательность команд, выполнение которых не изменяет содержимого регистров МП. Время записи числа NI в регистр В и возврата из подпрограммы фиксировано и в цикл не входит. Минимальная задержка определяется при NI=01 и равна

ТЦД минТ1+ТТ2+ТТ3+ТТ4+ТТ5;

максимальная задержка вычисляется по формуле

ТЦД максТ1+(ТТ2+ТТ3+ТТ4)*256+TT5,

где 256 - максимальное 8-ми разрядное двоичное число. Подпрограмма 3.2 реализует временную задержку,

записанную в соответствии с данным алгоритмом.

 

Подпрограмма 3.2

 

 

 

Адрес

Машинный код

Метка

Мнемокод

Комментарий

0900

41

 

MOV B,C

Записать число из регистра С в регистр В

0901

00

DLY

NOP

Нет операции

0902

05

 

DCR В

Уменьшить число в регистре В на 1

0903

C2 0109

 

JNZ B DLY

Если число, записанное в регистре В≠ 0,

 

 

 

 

то идти на DLY

0906

C9

RET

 

 

 

Подпрограмма

 

 

 

задержки

 

 

 

Записать число N1

 

 

ТТ1

из регистра С в

 

 

 

регистр В

 

 

ТТ2

Нет операции

 

 

ТТ3

Уменьшить

 

 

содержимое рег. В

 

 

 

на 1

 

 

 

Нет

 

 

ТТ4

В=0

 

 

 

Да

 

 

ТТ5

Выход из

 

 

подпрограммы

Рис. 3.13. Алгоритм подпрограммы задержки DLY

Глава 3. Системы команд микроЭВМ

56

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

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

Пример 3.7. Использование подпрограммы временной задержки при организации звуковых сигналов в микроЭВМ.

В микроЭВМ звуковые сигналы могут формироваться простой схемой, представленной на рис. 3.14, на вход которой со звуковой частотой записывается по очереди «0» и «1». Будем считать, что устройство формирования звуковых сигналов имеет адрес 80. Схема алгоритма работы подпрограммы генерации звуковых колеба-

ний приведена на рис. 3.15.

+5 В

R2

 

с Д0 МД

 

 

T

Q

R1

 

 

D

 

Зп

 

1

 

Q

 

&

 

 

 

 

 

 

 

 

 

от Сх

 

 

C

 

 

 

 

 

 

 

 

 

ДША

 

 

 

 

 

 

Рис. 3.14. Схема формирования звуковых сигналов в микроЭВМ

CALL BPP

Записать в вых. устр. 0

Вызвать подпр. DLY

Записать в вых. устр. 1

Вызвать подпр. DLY

RETURN

Рис. 3.15. Алгоритм подпрограммы формирования звукового сигнала в микроЭВМ

При выполнении арифметических операций двоичное число можно представить как семиразрядный код со знаковым восьмым разрядом. Такое представление позволяет записывать числа в диапазоне ± 128, а отрицательные числа кодировать в обратном или дополнительном коде. В МП КР580ИК80 предусмотрены команды с числами, представленными в двоично-десятичной системе счисления и арифметические команды с числами двойной разрядности (16 разрядов). Рассмотрим простые примеры выполнения арифметических операций.

Глава 3. Системы команд микроЭВМ

57

 

Подпрограмма 3.3.

 

АдресМашинный Метка Мнемокод

Комментарий

 

код

 

 

 

0А00

AF

ВРР

XRA А

Очистить аккумулятор

0А01

D3 80

 

OUT ВР

Записать 00 в выходное устройство

0А03

СD 0009

 

САLL DLY

Вызвать подпрограмму задержки

0А06

2F

 

СМА

Записать код в аккумулятор

0А07

D3 80

 

OUT ВР

Записать код в выходное устройство

0А09

CD 0009

 

CALL DLY

Вызвать подпрограмму задержки

0А0С С9

 

RET

Возврат из подпрограммы

 

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

 

Подпрограмма 3.4.

 

АдресМашинный Метка Мнемокод

Комментарий

 

код

 

 

 

0800

21 000В

MAIN LXI H,0B00

Записать в регистры H, L адрес первого слагаемого

0803

06 05

 

MVI B,05

Загрузить в регистр В количество слагаемых

0805

CD 090Z

 

CALL ADDB Вызвать подпрограмму сложения

0808

CF

 

RST 1

Прервать выполнение программы

0809

AF

ADDB XRA A

Очистить аккумулятор

080А

4F

 

MOV C,A

Очистить счетчик переносов

080В

86

INT

ADD M

Прибавить к содержимому аккумулятора число

 

 

 

 

из массива слагаемых

080С

2 1008

 

JNC TRM

Если переноса нет, то идти наTRM

080F

0C

 

INR C

Увеличить содержимое регистра С на 1

0810

23

TRM

INX H

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

0811

05

 

DCR B

Уменьшить содержание счетчика слагаемых

0812

С2 0В08

 

JNC CNT

Если не все слагаемые то идти на CNT

0815

C9

 

RET

Возврат

Слагаемые располагаются в последовательных адресах памяти. Входными параметрами используемой подпрограммы ADD В являются адрес первого слагаемого, записанный в регистрах Н, L, и число слагаемых, записанное в регистре В. Выходным параметром программы MAIN является сумма, старший байт которой записан в регистре С, а младший - в аккумуляторе.

Алгоритм подпрограммы сложения состоит в том, что после прибавления каждого элемента массива определяется переполнение аккумулятора (разряд С=1); если это имеет место, то содержимое регистра С увеличивается на 1. Таким образом, за счет суммирования единиц переноса получается старший байт суммы (рис. 3.16).

МикроЭВМ может проводить арифметические операции с числами с двойной или большей длиной машинного слова. Так как МП БИС имеет 8-разрядное АЛУ, то операции с такими числами должны проводиться по байтам, начиная с младших. Так, операция сложения чисел 17F5 + 3411 имеет следующий вид:

Старший байт

Флаг С

Младший байт

Числа

00010111

 

11110101

17F5

+

 

+

+

00110100

 

00010001

3411

——————————————————————————

01001100 00000110 4C06

Операция вычитания чисел 6F5C - 13C5 осуществляется в виде:

Старший байт

Флаг С

Младший байт

Числа

01101111

 

01011100

6F5C

-

 

-

-

00010011

1

11000101

13C5

———————————————————————————

01011011 10010111

Глава 3. Системы команд микроЭВМ

58

ADD B

Очистить рег.

суммы А и счетчик

переполн. С

Прибавить к

содерж. аккум.

число из памяти

С=1

Увеличить

содержимое рег. С

на 1

Уменьшить содерж.

счетч. колич.

слагаемых на 1.

Указать на след.

адрес

Нет

Последнее

слаг.?

Да

RETURN

Рис. 3.16. Алгоритм подпрограммы сложения

Из приведенных примеров видно, что для суммирования (вычитания) младших байтов чисел необходимо применять команду ADD, а для сложений вычитания остальных чисел -команду АDС, которая учитывает состояние разряда C регистра признаков МП БИС.

Пример 3.9. Нахождение разности чисел, имеющих одинаковую длину, показано в программе 3.5.

 

Подпрограмма 3.5.

 

 

АдресМашинный Метка

Мнемокод

Комментарий

 

код

 

 

 

0900

АF

SBN

ХRА А

Очистить аккумулятор и флаг С

0901

CNT

LDAX D

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

0902

9E

 

SBB M

Вычесть из содержимого аккумулятора

 

 

 

 

вычитаемое

0903

77

 

MOV М,А

Записать разность на место вычитаемого

0904

23

 

INX H

Указать на следующий байт вычитаемого

0905

13

 

INX D

Указать на следующий байт уменьшаемого

0906

0D

 

DСР С

Уменьшить содержимое счетчика длины числа

0907

C2 0109

 

JNZ CNT

Если не последний (старший) байт числа, то

 

 

 

 

идти на СNT

090А

D0

 

RNC

Если байт старший и результат без заема (С=0),

 

 

 

 

то возврат

090В

СD1200

 

CALL ВЕЕР Если был заем (С=1), то подать сигнал

090Е

CF

 

RSTI

Прервать выполнение программы