6 Программирование в мнемокодах
Наиболее удобным методом написания программ является использование мнемонических кодов, состоящих из аббревиатуры полного названия инструкции. В этом случае мнемокод отражает содержательный смысл выполняемой операции.
Пример 1.1. Организация счетчиков циклов. Схема алгоритма счета показана на рис. 1.6, а фрагмент программы приведен в табл. 1.3.
Рисунок 1.6 – Схема алгоритма счета циклов
Счетчиком служит один из РОН – регистр В. По команде MVI B, N в него заносится число N, определяющее количество повторяемых циклов. В данной программе N=16. Для определенности принято, что участок программы, который необходимо повторить 16 раз, начинается командой логической операции «ИСКЛЮЧАЮЩЕЕ ИЛИ» XRA A, расположенной по адресу 1002, и заканчивается командой пересылки из аккумулятора в регистр D: MOV D, A, расположенный по адресу 10А1. После каждого выполнения этого участка программы содержимое счетчика (регистра В) уменьшается на единицу посредством команды DCR B (адрес 10А2). До тех пор, пока содержимое регистра В отлично от нуля, признак Z имеет нулевое значение и программа переходит к выполнению команды, адрес 1002 который содержится во втором и третьем байтах команды JNZ (переход по отсутствию нуля). Указанный адрес отмечен в программе меткой М1, т.е. метка М1 является мнемоническим обозначением адреса 1002.
Таблица 1.3 – Программа счета циклов
Метка | Мнемокод | Операнд | Адрес | Н - код | Комментарий | Vt |
. . . . . . . | . . . . . . . | . . . . . . | . . . . . . | . . . . . . . . . . | . . | |
MVI | B, 16 | 1000 | 06 | Установка счётчика | 7 | |
1001 | 10 | N=16 в (B) | ||||
M1: | XRA | A | 1002 | AF | Обнуление признака переноса | 4 |
. . . . . . . | . . . . . . . | . . . . . . | . . . . . . | . . . . . . . . . . | . . | |
MOV | D, A | 10A1 | 57 | Пересылка содержимого А в регистр D (D:=A) | 5 | |
DCR | B | 10A2 | 05 | Уменьшение содержимого счётчика на 1 | 5 | |
JNZ | M1 | 10A3 | C2 | Переход по условию (N) ¹ 0 к ячейке памяти с адресом 1002 | 10 | |
10A4 | 02 | |||||
10A5 | 10 | |||||
. . . . . . . | . . . . . . . | . . . . . . | . . . . . . | . . . . . . . . . . | . . |
Если в результате очередного вычитания единицы содержимое регистра В окажется равным нулю (Z=1), то программа перейдет к выполнению команды, расположенной за JNZ. Происходит выход из циклического участка программы. Поскольку регистр В имеет восемь двоичных разрядов, рассмотренная структура программы позволяет организовать счетчик от 1 до 255 циклов. При необходимости получения большого числа циклов для организации счетчика следует использовать регистровые пары (например, В и С). Загрузка такой пары осуществляется с помощью команды LXI B, а вместо команды DCR В необходимо использовать команду DCX B (декремент регистровой пары).
Пример 1.2. Определение модуля числа. При исследовании сигналов часто приходится оценивать погрешность измерения по модулю. Рассмотрим программу определения модуля числа, содержащую условный переход. В связи с тем, что отрицательные числа представляются в дополнительных кодах, при определении модуля нельзя ограничиться только отбрасыванием знака числа, информация о котором заключена в старшем бите. Если число положительное, то его надо умножить на -1. Знак можно определить, используя операцию маскирования или засылку старшего бита в триггер переноса с последующим его анализом. В данном случае эти операции нежелательны, так как сопровождаются изменением содержимого аккумулятора. Целесообразно применить команду логического сложения содержимого аккумулятора с самим собой. При этом содержимое аккумулятора не меняется, а флаги устанавливаются в соответствующие состояния. Условный переход выполняется по содержимому триггера знака S.
На рис. 1.7 изображена схема алгоритма определения модуля числа, находящегося в регистре Е. Программа работает следующим образом. Число из регистра Е пересылается в аккумулятор. В результате выполнения операции логического сложения аккумулятора с самим собой в триггер знака записывается старший бит числа. С помощью команды условного перехода осуществляется ветвление программы. Если S=0 (положительное число) не выполняется, то производится изменение знака числа и модуль числа из аккумулятора пересылается в регистр Е. Знак числа изменяется применением операции дополнения, заключающейся в инвертировании всех разрядов числа (команда CMA) c последующим прибавлением единицы к младшему разряду (команда INR A). Если условие S=0 выполняется (число положительное), то по условному переходу JM M2 три последние команды обходятся, содержимое регистра Е не меняется, а выполнение программы продолжается с адреса 01F8, соответствующего метке М2. Программа в машинных кодах с комментариями приведена в табл. 1.1.
Рисунок 1.7 – Схема алгоритма определения модуля числа
Пример 1.3. Определение максимального из двух положительных чисел. При обработке сигналов часто встречается необходимость определения максимального из нескольких положительных чисел. Такие задачи возникают, например, при обнаружении полезных сигналов или при нахождении максимального значения сигнала при заданном интервале времени. Нахождение максимального из нескольких чисел сводится к последовательному определению максимального из двух чисел.
В системе команд МП имеется команда сравнения СМР, которая не изменяет содержимого аккумулятора, однако устанавливает триггер признака CY (перенос) в единичное состояние, если содержимое аккумулятора меньше содержимого регистра.
Рисунок 1.8 – Схема алгоритма нахождения большего из двух положительных чисел
Таблица 1.4 – Программа определения модуля числа
Метка | Мнемокод | Операнд | Адрес | Н-код | Комментарий | Vт |
MOV | A, E | 01F0 | 7B | Пересылка в аккумулятор | 5 | |
ORA | A | 01F1 | B7 | Определение знака числа | 4 | |
JP | M2 | 01F2 | F2 | Условный переход по положительному значению | 10 | |
01F3 | F8 | |||||
01F4 | 10 | |||||
CMA | A | 01F5 | 2F | Изменение знака числа | 4 | |
INR | A | 01F6 | 3C | 5 | ||
MOV | E, A | 01F7 | 5F | Пересылка в регистр Е | 5 | |
M2: | 10F8 |
Для определенности будем считать, что одно из чисел находится в аккумуляторе, а другое – в регистре В. Требуется большее число поместить в регистр В, а меньшее – в аккумулятор. Схема алгоритма показана на рис. 1.8, а программа в машинных кодах приведена в табл. 1.5.
Рисунок 1.9 – Схема алгоритма формирования временной задержки
Таблица 1.5 – Программа нахождения большего из двух положительных чисел
Метка | Мнемокод | Операнд | Адрес | Н-код | Комментарий | Vt |
CMP | B | 00A1 | B8 | Сравнение чисел | 7 | |
JC | M1 | 00А2 | DA | Переход на М1, если (А) <(В) | 10 | |
00А3 | А8 | |||||
00А4 | 00 | |||||
MOV | C, A | 00A5 | 4F | Обмен содержимого между аккумулятором и регистром B через регистр С | 5 | |
MOV | A, B | 00A6 | 7B | 5 | ||
MOV | B, C | 00A7 | 41 | 5 | ||
M1: | 00A8 |
Пример 1.1. Организация временной задержки длительностью 100мкс.
Программу, обеспечивающую такую задержку, оформим в виде подпрограммы, которую назовем DEL. Это символическое имя будем использовать в виде метки, указывающей начальный адрес подпрограммы. Схема алгоритма формирования временной задержки изображена на рис. 1.9, а программа помещена в табл. 1.6. Начальный адрес подпрограммы записан во втором и третьем байтах команды, с помощью которой происходит обращение к подпрограмме DEL. При выполнении подпрограммы в регистр В должно быть записано число циклов Х, которое вначале неизвестно. Содержимое регистра В уменьшается на единицу до тех пор, пока не станет равным нулю. При этом признак Z устанавливается в единичное состояние (Z=1) и происходит выход из цикла.
Подпрограмма неработоспособна до тех пор, пока не будет задано значение X.
Зная, какие команды используются в данной подпрограмме и время их выполнения, можно вычислить, сколько раз должен повториться циклический участок подпрограммы для обеспечения требуемой временной задержки.
Команды MVI B, X, CALL DEL и RET используется один раз. Если частота задающего генератора МП составляет 2МГц, каждый такт длится 0.5мкс. В этом случае время выполнения перечисленных команд составит 17мкс.
Для получения задержки времени, равной 100мкс, циклический участок программы должен выполняться столько раз, чтобы этот процесс завершился за 100-17=83мкс. Время выполнения команд DCR B и JNZ M1 составляет 2. 5+5=7. 5 мкс. Задержку 83мкс нельзя получить многократным повторением команд цикла, поскольку 83 не делится на 7.5 без остатка.
Если повторить циклический участок программы X = 10 раз, то получим временную задержку 75 мкс. Оставшиеся 835=8 мкс можно скомпенсировать введением подряд четырех команд NOP (К=4). Значение X=0A, соответствующее требуемому числу циклов, заносится во второй байт команды MVI B, X.
Таблица 1.6 – Программа формирования временной задержки длительностью 100мкс
Метка | Мнемокод, операнд | Адрес | Н-код | Комментарий | Vт |
CALL DEL | 01C0 | CD | Вызов подпрограммы формирования временной задержки | 17 | |
01С1 | 09 | ||||
01С2 | 0A | ||||
. . . | . . . . . . . . . . . . | . . . . | . . . . | . . . . . . . . . . . . . . . | . . . |
DEL: | MVI B, X | 0A09 | 06 | Запись в регистр В числа X=0A | 7 |
0A0A | 0A | ||||
M1: | DCR B | 0A0B | 05 | Уменьшение содержимого регистра В на 1 | 5 |
JNZ M1 | 0A0C | С2 | Повторить цикл, если результат не равен нулю | 105 | |
0A0D | 0B | ||||
0A0E | 0A | ||||
NOP | 0A0F | 00 | Пустые операции | 4 | |
NOP | 0A10 | 00 | 4 | ||
NOP | 0A11 | 00 | 4 | ||
NOP | 0A12 | 00 | 4 | ||
RET | 0A13 | C9 | Возврат к основной программе | 10 |
... , а при открытии клапана 17, наоборот, уменьшается. Когда оба клапана закрыты, разрежение в полости 19 остается неизменным. Рисунок 4. Структурная схема микропроцессорной системы управления сцеплением В зависимости от разрежения в полости 19. сервокамеры меняется положение ее штока 21, и соответственно регулируется момент Мс, передаваемый сцеплением. Из рассмотрения зависимости Мс от ...
... ; - показывать, за счет каких структурных особенностей достигается увеличение производительности различных вычислительных систем; с этой точки зрения, классификация может служить моделью для анализа производительности. 1.12 Классификация Дазгупты Одним из последних исследований по классификации архитектур, по-видимому, является работа С. Дазгупты, вышедшая в 1990 году. Автор ...
... байт в регистре A, старший – в регистре B. В случае выполнения операции деления целое от деления помещается в аккумулятор А, остаток от деления – в регистр В. Логические команды с байтовыми переменными. Система команд ОМЭВМ позволяет реализовать логические операции: "И", "ИЛИ", "ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистре-аккумуляторе (А) и байте-источнике. Вторым операндом (байтом-источником) при этом может ...
... архитектурно-технические решения, используемые в настоящее время при создании микропроцессоров. Современные процессоры INTEL Компания Intel является одной из передовых в производстве современных микропроцессоров. Компанию основали Роберт Нойс и Гордон Мур в 1968 году Intel переводится с английского «интегральная электроника». Бизнес-план компании был распечатан на печатной машинке Робертом ...
0 комментариев