Данная микропрограмма иллюстрирует один из методов организации цикла с использованием аппаратного стека на четыре 4-разрядных слова (он же используется при реализации подпрограмм), в который можно записывать адреса микрокоманд, а затем осуществлять условный или безусловный переход по записанному адресу.
Адрес памяти |
Микрокоманда |
Выполняемая функция |
|||||||
адрес перехода |
инструкция перехода |
приёмник результата |
источник операндов |
АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
хххх |
0010 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
0001 |
хххх |
1001 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Загрузить стек и продолжить |
0010 |
хххх |
0010 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
0011 |
1010 |
0001 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
БП по адресу 10 |
1010 |
хххх |
0111 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход по стеку |
Результат работы: В процессе работы программы осуществляется бесконечный цикл переходов по адресам 0000 -> 0001 -> 0010 -> 0011 -> 1010 -> 0010 -> 0011 -> …
6-Микропрограмма, демонстрирующая обращение к подпрограмме и возврат из нее.
Микропрограмма, являющаяся реализацией диаграммы переходов на рисунке ниже.
Программа Подпрограмма
Адрес памяти |
Микрокоманда |
Выполняемая функция |
|||||||
адрес перехода |
инструкция перехода |
приёмник результата |
источник операндов |
АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
хххх |
0010 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
0001 |
1000 |
0101 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме |
0010 |
хххх |
0010 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
0011 |
0000 |
0001 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
БП к адресу 0000 |
1000 |
хххх |
0010 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
1001 |
хххх |
0010 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
1010 |
хххх |
0110 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Возврат из подпрограммы |
Результат работы: происходит обращение к подпрограмме и возврат из нее в соответствии с рисунком
7-Микропрограмма, организации вложения подпрограмм.
Данная микропрограмма реализована с помощью аппаратного стека (на четыре 4-разрядных слова), поэтому возможно четыре вложения подпрограмм.
Адрес памяти |
Микрокоманда |
Выполняемая функция |
|||||||
адрес перехода |
инструкция перехода |
приёмник результата |
источник операндов |
АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
хххх |
0010 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
0001 |
0011 |
0101 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме 1 |
0010 |
0000 |
0001 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
БП к адресу 0000 |
0011 |
0110 |
0101 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме 2 |
0100 |
0111 |
0101 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме 3 |
0101 |
хххх |
0110 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Возврат из подпрограммы 1 |
0110 |
хххх |
0110 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Возврат из подпрограммы 2 |
0111 |
0110 |
0101 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме 2 |
1000 |
1010 |
0101 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме 4 |
1001 |
хххх |
0110 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Возврат из подпрограммы 3 |
1010 |
0110 |
0101 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме 2 |
1011 |
1101 |
0101 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме 5 |
1100 |
хххх |
0110 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Возврат из подпрограммы 4 |
1101 |
хххх |
0010 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
1110 |
хххх |
0110 |
хххх |
хххх |
хххх |
хххх |
хххх |
хххх |
Возврат из подпрограммы 5 |
Результат работы:
Последовательность адресов выполняемых микрокоманд:
0000 ® 0001 ® нач 1{0011 ® нач 2( 0110 )конец 2 ® 0100 ® нач 3[ 0111 ® нач 2( 0110 )конец 2 ® 1000 ® нач 4 ( 1010 ® нач 2( 0110 )конец 2 ® 1011 ® нач 5( 1101 ® 1110 ) конец 5 ® 1100 ) конец 4 ® 1001 ] конец 3 ® 0101 } конец 1 ® 0010 ® 0000 ® 0001 …
Скобки показывают вложенность подпрограмм, а цифра на верху показывает номер вложения.
8-Микропрограмма, организации условных переходов.
Адрес памяти |
Микрокоманда |
Выполняемая функция |
|||||||
адрес перехода |
инструкция перехода |
приёмник результата |
источник операндов |
АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
хххх |
0010 |
х011 |
х011 |
1000 |
хххх |
0000 |
хххх |
R0+1, продолжить |
0001 |
1111 |
1111 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
УП по С4 |
0010 |
0000 |
0001 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
БП к 0 |
1111 |
хххх |
0010 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
Продолжить |
Результат работы: Происходит увеличение R0.Условный переход будет сделан после сложения текущего R0=1111 c единицей, то есть произойдёт переполнение. Условные переходы в микропроцессоре К1804 реализуются по содержимому регистра состояния. В данной микропрограмме реализован УП по значению флага переноса. Следует отметить, что результаты в регистр состояния записываются после выполнения операции в момент прихода тактового импульса, поэтому условный переход по этим результатам может быть сделан лишь в следующей команде.
6. Выполнение индивидуального задания
Задание №1. Определение числа нулей в байте.
Адрес памяти |
Микрокоманда |
Выполняемая функция |
|||||||
адрес перехода |
инструкция перехода |
приёмник результата |
источник операндов |
АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
хххх |
0010 |
х011 |
x111 |
x011 |
хххх |
0000 |
0010 |
Загрузка R0 |
0001 |
xxxx |
0010 |
х000 |
x111 |
x011 |
хххх |
хххх |
0011 |
Загрузка Q |
0010 |
xxxx |
0010 |
х011 |
x111 |
x011 |
хххх |
0001 |
1000 |
Загрузка счетчика 8 бит(R1) |
0011 |
xxxx |
0010 |
х011 |
x111 |
x011 |
хххх |
0010 |
0000 |
Загрузка счетчика едениц(R2) |
0100 |
xxxx |
0010 |
x001 |
x011 |
x011 |
хххх |
0000 |
хххх |
Чтение R0 |
0101 |
1001 |
1101 |
x001 |
хххх |
хххх |
хххх |
хххх |
хххх |
УП по F3 |
0110 |
xxxx |
0010 |
x011 |
x011 |
0001 |
хххх |
0001 |
хххх |
R1=R1-1 |
0111 |
1010 |
1100 |
x001 |
хххх |
хххх |
хххх |
хххх |
хххх |
УП по Z |
1000 |
0100 |
0001 |
1110 |
1011 |
x011 |
хххх |
0000 |
хххх |
Арифм. сдвиг 8 разр. слова влево |
1001 |
0110 |
0001 |
x011 |
x011 |
1000 |
хххх |
0010 |
хххх |
R2+1 |
1010 |
xxxx |
0010 |
x011 |
x101 |
1010 |
0010 |
0010 |
1000 |
R2-1 |
1011 |
1011 |
0001 |
x001 |
x011 |
x011 |
хххх |
0010 |
хххх |
Чтение R2 |
6.1 Алгоритм программы.
В программе используется значение флага F3 для выявления единицы в старшем разряде. Когда F3=1 ведется подсчёт количества выходящих единиц из байта в счётчике R2. Просмотр старшего разряда будет идти пока счётчик R1(равен 8 в начале программы) не будет равен 0.
После чего R2 присваиваться значение 8-R2(т.е. количество нулей в байте).
Задание №2. Умножение младшими разрядами вперед со сдвигом суммы.
Адрес памяти |
Микрокоманда |
Выполняемая функция |
|||||||
адрес перехода |
инструкция перехода |
приёмник результата |
источник операндов |
АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
xxxx |
0010 |
x000 |
x111 |
x011 |
xxxx |
xxxx |
1100 |
Мн-ль—> Q |
0001 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0001 |
1011 |
Мн-e—> R1 |
0010 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0010 |
0000 |
Сумма(0)—> R2 |
0011 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0011 |
0100 |
CT(4)—> R3 |
0100 |
xxxx |
0010 |
x001 |
x110 |
x100 |
xxxx |
xxxx |
0001 |
Q И 1 |
0101 |
0111 |
1100 |
x001 |
xxxx |
xxxx |
xxxx |
xxxx |
xxxx |
Z=1 ->7 |
0110 |
xxxx |
0010 |
x011 |
x001 |
0000 |
0001 |
0010 |
xxxx |
Сумма+Mн-e |
0111 |
1001 |
1111 |
x001 |
xххх |
xххх |
хххх |
хххх |
хххх |
УП по С4=1 |
1000 |
1010 |
0001 |
x000 |
x110 |
x100 |
хххх |
хххх |
1110 |
Q ^ 1110 |
1001 |
хххх |
0010 |
x000 |
x110 |
x011 |
хххх |
хххх |
0001 |
Q v 0001 |
1010 |
xxxx |
0010 |
1100 |
0011 |
x011 |
xxxx |
0010 |
xxxx |
сдвиг |
1011 |
xxxx |
0010 |
x011 |
x011 |
0001 |
xxxx |
0011 |
xxxx |
CT-1 —>CT |
1100 |
0100 |
0000 |
x001 |
xxxx |
xxxx |
xxxx |
xxxx |
xxxx |
УП по Z=0 |
1101 |
1110 |
0001 |
x001 |
x010 |
x011 |
xxxx |
xxxx |
xxxx |
Q -> Y |
1110 |
1110 |
0001 |
x001 |
x011 |
x011 |
xxxx |
0010 |
xxxx |
R2 -> Y |
6.2Алгоритм программы.
Принцип работы:
1.Сложить множимое с предыдущей частной суммой, если очередной разряд множителя равен 1, и результат запомнить; в случае если очередной разряд множителя равен 0 суммирование не выполнять;
2. Уменьшить вдвое частную сумму, что равносильно сдвигу ее на один разряд вправо.
Результат работы программы:
R1=0011, Q=0011 => R2,Q=00001001
R1=0010, Q=0011 => R2,Q=00000110
R1=1011, Q=1101 => R2,Q=10001111
Второй вариант: Умножение младшими разрядами вперед со сдвигом множимого влево.
Адрес памяти |
Микрокоманда |
Выполняемая функция |
|||||||
адрес перехода |
инструкция перехода |
приёмник результата |
источник операндов |
АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
xxxx |
0010 |
x000 |
x111 |
x011 |
xxxx |
xxxx |
1100 |
Мн-ль—> Q |
0001 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0001 |
1011 |
Мн-e—> R1 |
0010 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0010 |
0000 |
Sm(0)—> R2 |
0011 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0011 |
0100 |
CT(4)—> R3 |
0100 |
xxxx |
0010 |
x001 |
x110 |
x100 |
xxxx |
xxxx |
0001 |
Q И 1 |
0101 |
0111 |
1100 |
x001 |
xxxx |
xxxx |
xxxx |
xxxx |
xxxx |
Z=1 ->7 |
0110 |
xxxx |
0010 |
x011 |
x001 |
0000 |
0001 |
0010 |
xxxx |
Sm+Mn-e |
0111 |
1001 |
1111 |
x001 |
xххх |
xххх |
хххх |
хххх |
хххх |
if С4==1 |
1000 |
1010 |
0001 |
x000 |
x110 |
x100 |
хххх |
хххх |
1110 |
Q ^ 1110 |
1001 |
хххх |
0010 |
x000 |
x110 |
x011 |
хххх |
хххх |
0001 |
Q v 0001 |
1010 |
xxxx |
0010 |
1100 |
0011 |
x011 |
xxxx |
0010 |
xxxx |
сдвиг |
1011 |
xxxx |
0010 |
x011 |
x011 |
0001 |
xxxx |
0011 |
xxxx |
CT-1 —>CT |
1100 |
0100 |
0000 |
x001 |
xxxx |
xxxx |
xxxx |
xxxx |
xxxx |
Z=0 ->4 |
1101 |
1110 |
0001 |
x001 |
x010 |
x011 |
xxxx |
xxxx |
xxxx |
Q -> Y |
1110 |
1110 |
0001 |
x001 |
x011 |
x011 |
xxxx |
0010 |
xxxx |
R2 -> Y |
За основу реализации данного алгоритма был взят тот факт, что для подсчета количества несовпадающих разрядов в двух байтах достаточно найти число единичных разрядов в байте B1, получаемом при поразрядном сложении по mod2 двух байт. Затем по значению старшего разряда байта B1 (флаг F3 в регистре состояния) нужно инкрементировать счетчик числа единичных разрядов байта B1. Для проверки остальных разрядов нужно произвести 8-разрядный сдвиг байта B1 еще 7 раз.
После 8 проверок разрядов байта B1 следует вывод значения счетчика числа единичных разрядов на выходную шину.
В созданной микропрограмме используются:
§ 4 РОН (1, 2, 3, 4) для ввода исходных данных
§ 2 РОН (5, 6) для счетчиков
§ Временный регистр и один из РОН для 8-разрядного сдвига
Микропрограмма подсчета количества несовпадающих разрядов в двух байтах
Адрес памяти |
Микрокоманда |
Выполняемая функция |
|||||||
АП |
ИП |
ПР |
ИО |
АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
хххх |
0010 |
х011 |
х111 |
х011 |
хххх |
0001 |
D1ст |
Загрузка R1:=D1ст |
0001 |
хххх |
0010 |
х011 |
х111 |
х011 |
хххх |
0010 |
D1мл |
Загрузка R2:=D1мл |
0010 |
хххх |
0010 |
х011 |
х111 |
х011 |
хххх |
0011 |
D2ст |
Загрузка R3:=D2ст |
0011 |
хххх |
0010 |
х011 |
х111 |
х011 |
хххх |
0100 |
D2мл |
Загрузка R4:=D2мл |
0100 |
хххх |
0010 |
х011 |
х111 |
х011 |
хххх |
0101 |
1000 |
Загрузка R5:=1000 |
0101 |
хххх |
0010 |
х011 |
х111 |
х011 |
хххх |
0110 |
1000 |
Загрузка R6:=1000 |
0110 |
хххх |
0010 |
х011 |
х001 |
х111 |
0011 |
0001 |
хххх |
R1 :=R1+R3 |
0111 |
хххх |
0010 |
х000 |
х001 |
х111 |
0100 |
0010 |
хххх |
Q :=R2+R4 |
1000 |
хххх |
0010 |
х011 |
х011 |
х011 |
хххх |
0001 |
хххх |
R1 := R1 |
1001 |
1011 |
1101 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
F3 = 1 ? |
1010 |
хххх |
0010 |
х011 |
х011 |
0001 |
хххх |
0101 |
хххх |
R5 := R5–1 |
1011 |
хххх |
0010 |
1110 |
1011 |
х001 |
хххх |
0001 |
хххх |
←(R1, Q) на 1 |
1100 |
хххх |
0010 |
х110 |
х011 |
0001 |
хххх |
0110 |
хххх |
R6 := R6-1 |
1101 |
1000 |
0000 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
z = 0 ? |
1110 |
1110 |
0001 |
х001 |
х011 |
х011 |
хххх |
0101 |
хххх |
ШДвых := R5 |
Результаты работы программы:
§ Пример 1.
D1 = 11010011 ответ: 4
D2 = 01010101 результат выполнения программы: 0100 ( 4 )
§ Пример 2.
D1 = 00000011 ответ: 0
D2 = 00000011 результат выполнения программы: 0000 ( 0 )
2- Найти максимальную последовательность единиц в байте
Адреса памяти |
МИКРОКОМАНДА |
Выполняемая функция |
|||||||
Адрес перехода |
Тип перехода |
Приемник результата |
Источник операнда |
Функция АЛУ |
А |
В |
D |
||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
0000 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0010 |
0000 |
Загрузка R2 |
0001 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0011 |
0000 |
Загрузка R3 |
0010 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0100 |
1001 |
Загрузка R4 |
0011 |
xxxx |
0010 |
x000 |
x111 |
x011 |
xxxx |
xxxx |
D2 |
ЗагрузкаQ(мл.р) |
0100 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0000 |
D1 |
ЗагрузкаR0(cт.р) |
0101 |
1101 |
1101 |
x001 |
x001 |
xxxx |
xxxx |
xxxx |
xxxx |
УП по F3 у R0 |
0110 |
xxxx |
0010 |
x001 |
x001 |
1001 |
0010 |
0011 |
xxxx |
R3-R2 |
0111 |
1110 |
1101 |
x001 |
x001 |
xxxx |
xxxx |
xxxx |
xxxx |
УП по F3 у (R3-R2) |
1000 |
xxxx |
0010 |
x011 |
x111 |
x011 |
xxxx |
0010 |
0000 |
R2:=0 |
1001 |
xxxx |
0010 |
1110 |
1011 |
x011 |
xxxx |
0000 |
xxxx |
Сдвиг байта влево |
1010 |
xxxx |
0010 |
x011 |
x011 |
0001 |
xxxx |
0100 |
xxxx |
R4:=R4-1 |
1011 |
1111 |
1100 |
x001 |
x001 |
xxxx |
xxxx |
xxxx |
xxxx |
УП по z=1 у R4 |
1100 |
0101 |
0001 |
x001 |
x011 |
x011 |
xxxx |
0000 |
xxxx |
Чтение R0 + БП |
1101 |
1001 |
0001 |
x011 |
x011 |
1000 |
xxxx |
0010 |
xxxx |
R2:=R2+1 |
1110 |
1000 |
0001 |
x011 |
x100 |
x011 |
0010 |
0011 |
xxxx |
R3:=R2 |
1111 |
1111 |
0001 |
x001 |
x011 |
x011 |
xxxx |
0011 |
xxxx |
Чтение R3 (конец) |
В программе осуществляется проверка знака байта в начале тела цикла и выход из цикла по результату проверки значения счетчика на 0.
В программе подсчитывается количество единиц в любой найденной последовательности. Далее это значение сравнивается с текущим максимумом. Если оно больше, то максимум переопределяется значением счетчика количества 1 в текущей последовательности.
Байт |
R3 |
1111 1011 |
0101 (5) |
0000 0000 |
0000 (0) |
1111 1111 |
1000 (8) |
1001 1100 |
0011 (3) |
2 Выводы
В результате выполнения лабораторной работы был изучен микропроцессор К1804В, его список микрокоманд и методики его программирования; выполнен набор тестовых микропрограмм, разработаны и реализованы микропрограммы по индивидуальному заданию.
Программирование микропроцессора показало, что с его помощью можно реализовать довольно сложные микропрограммы самого широкого применения.
Микротренажер, на котором выполнялось программирование микропроцессора
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.