Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум.docx
Скачиваний:
0
Добавлен:
26.06.2025
Размер:
2.36 Mб
Скачать

Состав отчета по лабораторной работе

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

Рисунок 43 – Блок-схема программы определения максимального из массива чисел

  • титульный лист;

  • цель и задачи лабораторной работы;

  • программы, разработанные при выполнении заданий лабораторной работы;

  • результаты выполнения индивидуальных заданий;

  • выводы по лабораторной работе.

Контрольные вопросы

1. Перечень, назначение и процесс выполнения команд пересылки данных.

Рисунок 44 – Блок-схема «копирного» сравнения чисел

2. Организация и назначение стековой памяти.

3. Перечень, назначение и процесс выполнения команд обмена данными со стеком.

4. Как изменяется вершина стека при операциях с данными в стеке?

5. Каков порядок записи данных в стек при выполнении команды PUSH H, если (SP) = 0А37, (H) = 12, (L) = 34?

6. Каков порядок извлечения данных из стека при выполнении команды POP H, если (SP) = 9000, (8FFE) = 12, (8FFF) = 34, (9000) = 56, (9001) = 78, (9002) = 9A?

7. Каков порядок записи в стек данных при выполнении команды 0800 CALL 0850, если (SP) = 9000?

8. Перечень, назначение и процесс выполнения команд обмена данными с внешними устройствами (IN PORT, OUT PORT).

9. Назначение и процесс выполнения команд управления JMP ADDR, CALL ADDR, PCHL, RET, EI, DI, HLT, NOP, JC ADDR, CZ ADDR, RPO.

10. Назначение и процесс выполнения команд работы со стеком PUSH RP, POP RP, XTHL, SPHL.

Лабораторная работа №5 «Изучение машинных циклов команд мп кр580вм80а. Выполнение арифметических операций умножения и деления»

Цель и задачи работы

Цель: знакомство с принципами работы на УМК в пошаговом режиме работы (покомандном и поцикловом), изучение машинным циклов и составление операционных схем исполнения команд МП КР580ВМ80А, изучение алгоритмов выполнения арифметических операций умножения и деления.

Задачи: научиться производить отладку программ с использованием пошагового режима работы УМК, изучить машинные циклы команд МП КР580ВМ80А, уметь составлять операционные схемы и временные диаграммы выполнения команд, исследовать программы выполнения арифметических операций умножения и деления.

Порядок выполнения работы

1. Ознакомиться с методическим указанием.

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

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

4. Подготовить УМК к работе.

5. Изучить и выполнить индивидуальное задание.

6. Разработать отчет по лабораторной работе.

7. Подготовить ответы на контрольные вопросы.

Теоретическая часть

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

машинный цикл – интервал времени, в течение которого происходит один внешний обмен данными между МП и внешним устройством (памятью или периферийным устройством);

командный цикл – интервал времени, в течение которого выполняется команда. Командный цикл может состоять из одного или нескольких машинных циклов.

Время выполнения команды определяется ее форматом и реализуемыми действиями. На выполнение команд в МП КР580ВМ80А расходуются от одного до пяти машинных циклов. Машинный цикл состоит из 3 – 5 тактов. Первые три такта всех машинных циклов предназначены для выполнения действий, связанных с внешним обменом между МП и адресуемым в машинном цикле внешним устройством. Такты Т4 и Т5 в машинном цикле зарезервированы для выполнения операций внутри микропроцессора. К таким операциям относятся дешифрация кода команды, необходимые внутренние передачи и преобразования данных, выполнение сдвиговых, арифметических и логических операций.

В соответствии с предложенным разработчиками принципом синхронизации работы МП легко определить число машинных циклов, затрачиваемых на выполнение любой команды. Минимальное количество машинных циклов исполнения команды определяется форматом команды и равняется числу байтов команды. Если собственно выполнение команды требует дополнительных обращений к внешнему устройству, то командный цикл увеличивается на соответствующее число машинных циклов. Например, однобайтная команда пересылки данных из регистра источника RD в регистр приемник RS (MOV RD,RS) выполняется за один машинный цикл, поскольку собственно исполнение команды не требует дополнительных внешних обращений. Трехбайтная команда вызова подпрограммы CALL ADDR выполняется за пять машинных циклов. При ее выполнении к трем машинным циклам выборки команды добавляются два машинных цикла, затрачиваемых для запоминания в стеке 16-битного адреса возврата из подпрограммы.

При реализации всего списка команд МП КР580ВМ80А используется 10 видов машинных циклов:

1. Извлечение кода команды (М1).

2. Чтение данных из памяти.

3. Запись данных в память.

4. Извлечение данных из стека.

5. Запись данных в стек.

6. Ввод данных из внешнего устройства.

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

8. Цикл обслуживания прерывания.

9. Останов.

10. Обслуживание прерываний при работе МП БИС в режиме останов.

Тип выполняемого цикла МП указывает на первом такте каждого машинного цикла с помощью 8-разрядного слова состояния, выдаваемого на ШД. Значения разрядов слова состояния используются далее для формирования управляющих сигналов, действующих в течение всего текущего машинного цикла. Для сохранения на время выполнения цикла слово состояния записывается в регистр-защелку – регистр слова состояния МП. На рис. 45 приведена схема записи слова состояния.

В первом такте Т1 по переднему фронту сигнала С2 регистр адреса РА выставляет на ША адрес ячейки памяти или внешнего устройства. Одновременно с появлением адреса на ША, МП вырабатывает синхросигнал SYN, а на шину данных ШД выдает байт слова состояния МП.

В начале такта Т2 положительным фронтом импульса С1 на выходе ГТИ формируется строб STB, которым слово состояния записывается во внешний регистр слова состояния (Рг.СС). Положительным фронтом С2 заканчивается сигнал SYN и МП формирует управляющие сигналы текущего машинного цикла.

а)

б)

Рисунок 45 – Фиксация слова состояния микропроцессора

Назначение отдельных разрядов байта слова состояния МП КР580ВМ80А, а также соответствие сигналов состояния отдельным видам машинных циклов приведено в табл. 1, 2 (см. раздел «Описание лабораторного макета» данного учебного пособия).

Цикл команды состоит из двух фаз: выборки команды и ее исполнения. Фаза выборки команды одинакова для всех команд микропроцессора. Последняя операция фазы исполнения команды, а именно размещение результата в аккумуляторе или в одном из регистров, также одинакова для целого ряда команд. Классификация команд по типам отражается в самом коде команды, таким образом, существенно упрощается схема декодирования команды.

Пример выполнения некоторых команд иллюстрируется на рис. 46. В арифметической команде сложения содержимого регистра с содержимым аккумулятора ADD S (рис. 46, а) в единственном цикле ВЫБОРКА вначале осуществляется выборка байта кода операции, для чего в такте T1 на адресную шину выдается содержимое программного счетчика PC, которое затем увеличивается на 1 в такте Т2 для адресации следующей команды. Команда извлекается в такте Т3 и по ней в такте Т4 осуществляется подготовка операндов к выполнению операции сложения – операнд из регистра (S) пересылается по внутренней шине в регистр (БР1), а операнд из аккумулятора пересылается в регистр (БР2). В пятом такте, который выполняется в течение действия такта Т2 следующей команды, осуществляется сложение операндов с сохранением результата в аккумуляторе. Совмещение тактов позволяет повысить производительность процессора.

В команде сложения содержимого ячейки памяти с содержимым аккумулятора ADD M (рис. 46, б) цикл ВЫБОРКА, состоящий из тактов Т1Т4, выполняется почти аналогично, а цикл М2 используется для выполнения операции сложения. Для выборки операнда из памяти в такте Т1 на адресную шину выдается его адрес из пары (HL), по которому в такте Т3 операнд выбирается в регистр (БР1). В четвертом такте, которой также выполняется в течение такта Т2 следующей команды, осуществляется сложение операндов.

В командах ввода/вывода (IN, OUT) (рис. 46, в) для выборки используются два цикла, в каждом из которых на адресную шину выдается содержимое программного счетчика, увеличиваемого в Т2 на единицу. Первый байт выбирается в регистр команд, второй – в регистры (W), (Z). В третьих циклах команд – циклах ввода/вывода – на адресную шину выдается адрес порта (параллельно на младшие и старшие разряды шины), по которому затем осуществляется обмен с адресуемым портом.

В команде обращения к подпрограмме CALL ADR (рис. 46, г) команда выбирается в течение трех машинных циклов по адресам, формируемым в программном счетчике: в первом цикле в регистр (РК) выбирается байт кода операции, во втором – младшие разряды адреса (второй

78

79

80

байт команды) в регистр (Z), в третьем – старшие разряды адреса (третий байт команды) в регистр (W). Таким образом, адрес подпрограммы хранится в паре (WZ). В тактах Т4, Т5 цикла M1 осуществляется подготовка адреса стека – уменьшение содержимого (SP) на единицу. По этому адресу в цикле М4 в ячейку стека, адресуемую содержимым (SP), записывается старший байт адреса возврата, и адрес стека уменьшается на 1. Затем в цикле M5 в ячейку стека записывается младший байт адреса возврата. Адрес перехода на подпрограмму заносится в счётчик команд (РС) в цикле M1 следующей команды с последующим увеличением его на 1.

Временная диаграмма типичного машинного цикла показана на рис. 47. Длительность такта в МП КР580ВМ80А задается периодом синхроимпульсов фазы С1, внутренние микрооперации инициируются импульсами из последовательности С2. Начало каждого машинного цикла (такт Т1) отмечается появлением сигнала на выходе SYN (начало связано с фронтом импульса С2 c некоторой задержкой, а конец – с фронтом следующего импульса С2). В течение этого интервала выдается информация о состоянии процессора (текущее слово состояния МП).

Фронт импульса С2 в такте T1 также вызывает загрузку адреса на адресную шину. Адрес сохраняется до появления фронта импульса С2 после такта Т3. Выдав адрес на адресную шину, процессор в такте Т2 осуществляет проверку сигналов подтверждения состояний ОЖИДАНИЕ, ЗАХВАТ, ОСТАНОВ. Если, например, память не готова к обмену, на линии RDY выдается сигнал низкого уровня. При этом процессор переходит в состояние ОЖИДАНИЕ, выдает сигнал высокого уровня на линию WI, подтверждающий запрос памяти (переключение сигнала на линии WI осуществляется фронтом импульса С1).

Процессор остается в состоянии ОЖИДАНИЕ до тех пор, пока сигнал на линии RDY не переходит в состояние высокого уровня. Если информация о готовности предшествует спаду импульса С2, то следующий импульс С1 переводит линию WI в состояние низкого потенциала, и процессор переходит в состояние Т3. В этом состоянии осуществляется обмен информацией с памятью или внешним устройством через шину данных.

При вводе данных в процессор по фронту импульса С2 в такте Т2 снимается информация о состоянии, и шина готова к приему данных. Данные, вводимые в процессор, должны быть стабильными в течение интервала времени, начало которого предшествует спаду импульса С1 или фронту импульса С2 в такте ТЗ, а конец следует за фронтом импульса С2. При этом процессор формирует сигнал высокого уровня на линии DВIN (сигнал формируется в пределах действия фронтов импульсов С2 в тактах Т2 и Т3). Длительность сигнала зависит от длительности такта ожидания Тw, находящегося между тактами Т2, ТЗ.

При выводе данные появляются на шине по фронту импульса С2 (одновременно информация о состоянии снимается) и выдаются на шину

Рисунок 47 – Временные диаграммы типового машинного цикла МП КР580ВМ80А

до появления новой информации о состоянии. При этом процессор формирует сигнал низкого уровня на линии WR. Сигнал появляется по фронту импульса С1, следующего за тактом Т2 (это могут быть такты ТЗ или Тw), а оканчивается по фронту С1 в такте, следующем за Т3. Таким образом, его длительность также зависит от длительности такта ожидания Тw.

Все машинные циклы содержат такты T1, Т2, ТЗ. Такты Т4 и Т5 используются для выполнения команды. Завершив цикл M1, процессор переходит к циклу М2 выполняемой команды или к циклу M1 следующей команды, если команда одноцикловая.

В последнем такте последнего машинного цикла проверяется наличие запроса прерывания и, если он имеется, ЦП переходит к выполнению цикла M1 специального типа. В течение этого цикла содержимое программного счетчика не увеличивается на 1, а выдается сигнал подтверждения прерывания. Из устройства, вызвавшего прерывание, должна быть послана команда RST, в которой указывается вектор прерывания – адрес подпрограммы, обслуживающей прерывание.

Примеры временных диаграмм выполнения некоторых команд показаны на рис. 48.

Рисунок 48, а – Временные диаграммы выполнения команды ADD S

84

85

МП КР580ВМ80А выполняет только простейшие арифметические операции – сложение и вычитание. Для выполнения умножения и деления нужны специальные подпрограммы.

Существует несколько алгоритмов умножения. Простейший из них – последовательность сложений. Например: 25×3 = 25+25+25. Примеры программ умножения, реализованных по данному алгоритму приведены в этом учебном пособии (лабораторная работа №4, табл. 49 – 51). Существенный недостаток этого алгоритма – значительная длительность процесса вычисления. Второй алгоритм – умножение в столбец, основанное на последовательных сдвигах и суммировании. Отметим, что сдвиг возможен как влево, так и вправо (рис. 49).

Рисунок 49 – Операция умножения со сдвигом влево и вправо

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

Алгоритм умножения при сдвиге влево.

1. Загрузить в счетчик числа циклов число N, соответствующее размерности операндов.

2. Обнулить регистр-накопитель. Его разрядность 2×N.

3. Проанализировать младший (текущий) бит множителя. Если он равен нулю, то переход к пункту 5.

4. Прибавить множимое к регистру-накопителю.

5. Сдвинуть множимое влево на 1 разряд (или сумму вправо на 1 разряд).

6. Сдвинуть множитель вправо на один разряд (младший бит теряется).

7. Уменьшить счетчик числа циклов на единицу.

8. Переход к пункту 3, если счетчик не равен нулю.

Алгоритм умножения при сдвиге вправо отличается от вышеприведенного тем, что в пункте 3 анализируется старший (текущий) бит множителя, в пункте 5 – множимое сдвигается вправо (или результат влево), в пункте 6 множитель сдвигается влево (старший бит теряется).

Рассмотрим подпрограмму, реализующую умножение двух 8-ми разрядных чисел по первому алгоритму (табл. 52). Начальный адрес подпрограммы – 0800; входные параметры: регистр Е – множимое, регистр D – множитель, регистр L – счетчик числа циклов (первоначально равен разрядности операндов). Результат перемножения записываетcя в регистровую пару ВС.

Таблица 52

Умножение двух однобайтовых чисел без знака (сдвиг влево)

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0800

01 00 00

START

LXI B,

0000

(BC) ← 0000

0803

2E 08

MVI L,

08

(L) ← 08

0805

A7

ANA A

0806

7A

M1

MOV A,D

(A) ← (D)

0807

1F

RAR

Сдвиг (A) вправо через перенос

0808

57

MOV D,A

(D) ← (A)

0809

78

MOV A,B

(A) ← (B)

080A

D2 0E 08

JNC

080E

если C = 0

(PC) ← 080E

080D

83

ADD E

(A) ← (A) + (E)

080E

1F

M2

RAR

Сдвиг (A) вправо через перенос

080F

47

MOV B,A

(B) ← (A)

0810

79

MOV A,C

(A) ← (C)

0811

1F

RAR

Сдвиг (A) вправо через перенос

0812

4F

MOV C,A

(C) ← (A)

0813

2D

DCR L

(L) ← (L) – 1

0814

C2 06 08

JNZ

0806

если Z = 0

(PC) ← 0806

0817

C9

RET

(PC) ← M(SP)

(PC) ← M(SP + 1)

(SP) ← (SP) + 2

В этой подпрограмме команды MOV А,D; RAR; МОV D,А сдвигают вправо множитель, тем самым его младший (текущий) бит попадает в разряд С регистра признаков F. Если он равен 1, то к регистру-накопителю ВС прибавляется множимое – команды: МOV А,В; АDD Е. В противном случае команда ADD E пропускается (выполняется команда JNC M2). В подпрограмме содержимое регистра-накопителя сдвигается на один разряд вправо в каждом цикле, поэтому множимое прибавляется к старшему регистру в паре ВС. Возникающий при этом сигнал переполнения запоминается в разряде С регистра признаков F и при сдвиге пары ВС вправо занимает свое место в старшем бите. Для сдвига вправо регистровой пары ВС необходимы команды – RAR; MOV В,А; МОV А,С; RAR; MOV С,А. Команда DCR L уменьшает счетчик циклов на 1 и, если он не равен 0, команда JNZ M1 передает управление в начало цикла.

В подпрограмме табл. 53 реализуется алгоритм умножения при сдвиге вправо. Здесь анализ разрядов множителя начинается со старшего бита.

Таблица 53

Умножения двух однобайтовых чисел без знака (сдвиг вправо)

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0800

3E 08

START

MVI A,

08

(A) ← 08

0802

06 00

MVI B,

00

(B) ← 00

0804

21 00 00

LXI H,

0000

(HL) ← 0000

0807

EB

M1

XCHG

(HL) ↔ (DE)

0808

29

DAD H

(HL) ← (HL) + (HL)

0809

EB

XCHG

(HL) ↔ (DE)

080A

D2 0E 08

JNC

080E

если C = 0

(PC) ← 080E

080D

09

DAD B

(HL) ← (HL) + (BC)

080E

3D

M2

DCR A

(A) ← (A) – 1

080F

C8

RZ

если Z = 0

(PC) ← M(SP)

(PC) ← M(SP + 1)

(SP) ← (SP) + 2

0810

29

DAD H

(HL) ← (HL) + (HL)

0811

C3 07 08

JMP

0807

(PC) ← 0807

Предварительно множимое загружается в регистр С, множитель – в регистр D. Результат будет подучен в регистровой паре НL. Первая команда организует счетчик числа циклов в регистре А. Затем обнуляются регистр B и регистровая пара HL. Очистив регистр В, получаем 8-ми разрядное множимое в регистровой паре ВC. В этом случае для прибавления множимого к регистру-накопителю НL можно использовать команду DAD В. Команда XCHG меняет местами содержимое регистровых пар НL и DE. Теперь в старшем байте пары НL находится множитель. Что находится в младшем байте – неважно. Команда DAD Н эквивалентна сдвигу влево на один разряд содержимого регистровой пары НL, т.е. множителя. Тем самым старший (текущий) разряд множителя попадает в разряд С регистра признаков F. Если он равен 1, то множимое прибавляется к регистру-накопителю. Вторая команда XCHG снова меняет местами содержимое регистровых пар НL и DE. Команда JNC M2 обеспечивает пропуск операции прибавления множимого к накопителю, если старший (текущий) разряд множителя равен нулю. Команда DCR A уменьшает счетчик числа циклов на единицу и, если он станет равным нулю, то выполняется возврат из подпрограммы (команда RZ). В противном случае, прежде чем перейти к новому циклу (команда JMP M1), нужно сдвинуть множимое вправо, либо результат – влево. Здесь выбрано второе (команда DAD Н).

Результатом операции деления является частное и остаток, существует несколько алгоритмов деления. Простейший из них –последовательность операций вычитания. Вычитание производится до тех пор, пока остаток не станет меньше делителя. В этом случае при вычитании сигнал заёма для старшего разряда установит в регистре признаков F бит С в единицу. Алгоритм деления следующий:

1) обнулить регистр для частного;

2) загрузить в регистр для остатка делимое;

3) вычесть из остатка делитель;

4) если полученный остаток меньше делителя (признак С = 1), то переход к пункту 7;

5) увеличить частное на единицу;

6) переход к пункту 3;

7) восстановить остаток – прибавить к остатку делитель.

Программа, реализующая данный алгоритм, приведена в табл. 54.

Таблица 54

Деление двух однобайтовых чисел без знака

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0800

16 00

START

MVI D,

00

(D) ← 00

0802

78

MOV A,B

(A) ← (B)

0803

91

M1

SUB C

(A) ← (A) – (C)

0804

DA 0B 08

JC

080B

если C = 1

(PC) ← 080B

0807

14

INR D

(D) ← (D) + 1

0808

C3 03 08

JMP

0803

(PC) ← 0803

Продолжение таблицы 54

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

080B

81

M2

ADD C

(A) ← (A) + (C)

080C

C9

RET

(PC) ← M(SP)

(PC) ← M(SP + 1)

(SP) ← (SP) + 2

В данной подпрограмме делимое находится в регистре В, делитель в С, частное – в D, остаток – в А.

Рассмотренный алгоритм отличается простотой, но и невысоким быстродействием. Кроме того, время выполнения операции деления зависит от величины операндов. Поэтому на практике чаще применяются алгоритмы, основанные на операциях сдвига и вычитания. Один из таких алгоритмов поясним на следующем примере (рис. 50).

Рассматриваемый алгоритм осуществляет деление N-разрядного числа за N циклов. В каждом цикле выполняется одна опера­ция вычитания. При этом, если вычитаемое больше уменьшаемого, то С = 1.

Алгоритм расчета следующий.

1. Загрузить в счетчик числа циклов число N, соответству­ющее разрядности операндов. Обнулить частное и промежуточное делимое (остаток).

2. Сдвинуть старший бит делимого через разряд С регистра признаков F в младший бит промежуточного делимого (остатка).

3. Вычесть делитель из промежуточного делимого (остатка). Проверить полученный остаток.

4. Если С = 0, перейти к пункту 6.

5. Если С = 1, восстановить промежуточное делимое (остаток), прибавляя к полученному в пункте 3 остатку делитель.

6. Инвертировать содержимое разряда С и сдвинуть его в младший бит частного.

7. Уменьшить счетчик числа циклов на единицу. Перейти к пункту 2, если счетчик не равен нулю. В противном случае осуществить возврат в основную программу.

В табл. 55 приведена программа деления 8-ми разрядных двоичных чисел. Предварительно в регистр С загружается делимое, а в регистр D – делитель. Частное формируется в регистре Н, а промежуточное делимое (остаток) – в Е. Первая команда загружает в регистр Н число 00, а в регистр L – число 08. В регистре L организуется счетчик числа циклов. Вторая команда очищает регистр Е, в котором будет находиться промежуточное делимое и окончательный остаток.

Рисунок 50 – Деление однобайтовых чисел с помощью операций сдвига и вычитания

Теперь нужно из старшего бита (нескольких бит) делимого вычесть делитель. Для этого из регистра С (делимое) перемещаем старший бит в разряд признака С. Это делают команды MOV А,С; RAL; MOV С,А. На последующих циклах в разряд признака С будут попадать следующие по старшинству биты делимого. Далее в аккумулятор пересылается содержимое регистра Е (команда MOV A,E). Командой RAL содержимое А сдвигается влево, содержимое разряда С помещается на место младшего разряда. Команда SUB D вычитает из промежуточного делимого (содержимое А) делитель (содержимое D). При этом в аккумуляторе образуется промежуточный остаток. Проверяется новое значение разряда С. Если С = 1, то прежде всего необходимо восстановить промежуточное делимое – команда ADD D. Если С = 0, то команда АDD D пропускается. Команда MOV Е,А возвращает промежуточное делимое (остаток) в регистр Е. Следует обратить внимание, что после выполнения команды SUB D значение разряда признака С есть инверсия текущего бита результата (команда ADD в данном случае не меняет С = 1). Команда СMC инвертирует содержимое разряда признака С – получаем бит результата (частного). Он «вдвигается» в регистр Н со стороны младшего разряда (команды МОV А,Н; RAL, MOV H,A). Команды DCR L и JNZ завершают цикл.

Таблица 55

Деление двух однобайтовых чисел без знака

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0800

21 08 00

START

LXI H,

0008

(HL) ← 0008

0803

1E 00

MVI E,

00

(E) ← 00

0805

79

M1

MOV A,C

(A) ← (C)

0806

17

RAL

Сдвиг (A) влево

через перенос

0807

4F

MOV C,A

(C) ← (A)

0808

7B

MOV A,E

(A) ← (E)

0809

17

RAL

Сдвиг (A) влево

через перенос

080A

92

SUB D

(A) ← (A) – (D)

080B

D2 0F 08

JNC

080F

если C = 0

(PC) ← 080F

080E

82

ADD D

(A) ← (A) + (D)

080F

5F

M2

MOV E,A

(E) ← (A)

0810

3F

CMC

0811

7C

MOV A,H

(A) ← (H)

0812

17

RAL

Сдвиг (A) влево

через перенос

0813

67

MOV H,A

(H) ← (A)

0814

2D

DCR L

(L) ← (L) – 1

0815

C2 05 08

JNZ

0805

если Z = 0

(PC) ← 0805

0818

C9

RET

(PC) ← M(SP)

(PC) ← M(SP + 1)

(SP) ← (SP) + 2

Для вычисления специальных функций ( ) применяются специальные алгоритмы.

Функции можно вычислить, воспользовавшись их разложением в ряд:

Число членов ряда определяется из условия получения требуемой точности.

Для вычисления функции с точностью до целых чисел можно применить алгоритм, основанный на том, что квадрат числа можно определить сложением последовательности нечетных чисел (табл. 56).

Таблица 56

Квадраты чисел

Число

Сумма нечетных чисел

Результат

1

1

1

2

1+3

22

3

1+3+5

32

4

1+3+5+7

42

5

1+3+5+7+9

52

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

Вычисление специальных функций по приведенным выражениям занимает длительное время и обеспечивает низкую точность. Это обусловлено сравнительно небольшой длиной машинного слова и ограниченным быстродействием МП БИС. Поэтому в тех случаях, когда ставятся жесткие требования по быстродействию и точности, применяется вычисление функций с помощью таблиц. Проиллюстрируем этот метод на примере программы вычисления квадрата числа (табл. 57).

Программа определяет квадрат чисел от 0 до 10 включительно. Входной параметр программы – число х. Оно записывается в регистр L. Выходной параметр – значение х2 в регистре Н.

Таблица 57

Определение квадрата числа с помощью таблицы

Адрес

Машинный код

Метка

Мнемоника команды

Операнд

Комментарий

0900

26 00

MVI H,

00

(H) ← 00

0902

11 00 0A

LXI D,

0A00

(DE) ← 0A00

0905

19

DAD D

(HL) ← (HL) + (DE)

0906

66

MOV H,M

(H) ← (M)

0907

FF

RST 7

Прервать

выполнение

программы

0A00

00

00

Таблица квадратов чисел

0A01

01

01

0A02

04

04

0A03

09

09

0A04

10

10

0A05

19

19

0A06

24

24

0A07

31

31

0A08

40

40

0A09

81

81

0A0A

64

64