![](/user_photo/2706_HbeT2.jpg)
- •Отчёт о лабораторной работе №2
- •С микропрограммным управлением серии к1804
- •1. Цель работы
- •2. Структурная схема цпэ к1804вс1
- •3. Структурная схема секции управления адресом микрокоманды к1804ву1
- •4. Система команд мп1804
- •5. Функциональная схема микротренажера мт2 1804
- •6. Программа работы на стенде мт2 1804
- •5. Микропрограмма организации цикла с помощью стека
- •7. Микропрограмма, организации вложения подпрограмм.
- •8. Микропрограмма, организации условных переходов.
- •7. Выполнение индивидуального задания
- •8. Выводы:
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 реализуются по содержимому регистра состояния. В данной микропрограмме реализован УП по значению флага переноса. Следует отметить, что результаты в регистр состояния записываются после выполнения операции в момент прихода тактового импульса, поэтому условный переход по этим результатам может быть сделан лишь в следующей команде.
7. Выполнение индивидуального задания
Подсчёт числа групп по три единицы в двух байтах.
Адрес памяти |
Микрокоманда |
Выполняемая функция | ||||||||
адрес перехода |
тип перехода |
приёмник результата |
источник операндов |
функция АЛУ |
А |
В |
D |
| ||
8-7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| ||
MS2 I8-I6 |
MS1 I2-I0 |
C0 I5-I3 |
| |||||||
000 |
xxx |
0010 |
х011 |
x111 |
x011 |
хххх |
0000 |
0110 |
Загрузка R0 (ст. разряды ст. байта) | |
001 |
xxx |
0010 |
х000 |
x111 |
x011 |
хххх |
хххх |
1110 |
Загрузка Q (мл. разряды ст. байта) | |
002 |
xxx |
0010 |
х011 |
x111 |
x011 |
хххх |
0001 |
0000 |
Загрузка счетчика групп (R1) | |
003 |
100 |
0101 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме | |
004 |
xxx |
0010 |
х011 |
x111 |
x011 |
хххх |
0010 |
0001 |
Загрузка счетчика байтов (R2) | |
005 |
xxx |
0010 |
х011 |
x111 |
x011 |
хххх |
0011 |
1000 |
Загрузка счетчика бит (R3) | |
006 |
xxx |
0010 |
х001 |
х011 |
х011 |
хххх |
0000 |
хххх |
Чтение R0 | |
007 |
102 |
1101 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
УП по F3 | |
008 |
100 |
0101 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
Переход к подпрограмме | |
009 |
xxx |
0010 |
1110 |
1011 |
х011 |
хххх |
0000 |
хххх |
8-разр. сдвиг влево | |
010 |
xxx |
0010 |
х011 |
х011 |
0001 |
хххх |
0011 |
хххх |
R3 := R3 - 1 | |
011 |
006 |
0000 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
УП по Z=0 | |
012 |
xxx |
0010 |
х001 |
х011 |
х011 |
хххх |
0010 |
хххх |
Чтение R2 | |
013 |
018 |
1100 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
УП по Z=1 | |
014 |
xxx |
0010 |
х011 |
х011 |
0001 |
хххх |
0010 |
хххх |
R2 := R2 - 1 | |
015 |
xxx |
0010 |
х011 |
x111 |
x011 |
хххх |
0000 |
0111 |
Загрузка R0 (ст. разряды мл. байта) | |
016 |
xxx |
0010 |
х000 |
x111 |
x011 |
хххх |
хххх |
1101 |
Загрузка Q (мл. разряды мл. байта) | |
017 |
005 |
0001 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
БП | |
018 |
018 |
0001 |
x001 |
х011 |
х011 |
хххх |
0001 |
хххх |
Чтение R1 | |
Адрес памяти |
Микрокоманда |
Выполняемая функция | ||||||||
адрес перехода |
тип перехода |
приёмник результата |
источник операндов |
функция АЛУ |
А |
В |
D |
| ||
8-7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| ||
MS2 I8-I6 |
MS1 I2-I0 |
C0 I5-I3 |
| |||||||
100 |
xxxx |
0010 |
х011 |
x111 |
x011 |
хххх |
0100 |
0010 |
Загрузка счетчика единиц (R4) | |
101 |
xxxx |
0110 |
х001 |
xxxx |
xxxx |
xxxx |
xxxx |
xxxx |
Возврат из подпрограммы | |
102 |
xxx |
0010 |
х001 |
х011 |
х011 |
хххх |
0100 |
хххх |
Чтение R4 | |
103 |
106 |
1100 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
УП по Z=1 | |
104 |
xxx |
0010 |
х011 |
х011 |
0001 |
хххх |
0100 |
хххх |
R4 := R4 - 1 | |
105 |
009 |
0001 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
БП | |
106 |
xxx |
0010 |
х011 |
х011 |
1000 |
хххх |
0001 |
хххх |
R1 := R1 + 1 | |
107 |
009 |
0001 |
х001 |
хххх |
хххх |
хххх |
хххх |
хххх |
БП |
Описание работы программы:
1. Загружаем старшую тетраду старшего байта в R0 и младшую тетраду старшего байта в Q.
2. Обнуляем R1 (регистр для подсчёта групп).
3. Загружаем 0010 в R4 (для подсчёта единиц идущих подряд).
4. Загружаем 0001 в R2 (для подсчёта обработанных байтов).
5. Загружаем 1000 в R3 (для подсчёта прочитанных бит в текущем байте).
6. Читаем данные из R0 и, если старший бит в прочитанной тетраде равен единице (анализируем его флагом F3), то идём на строчку 13.
7. Загружаем 0010 в R4. (когда старший бит в R0 равен нулю)
8. Сдвигаем влево байт, записанный в R0 и Q. Декрементируем R3 и, если там не ноль, то есть в текущем байте ещё есть непрочитанные биты, то идём на строчку 6.
9. Читаем R2. (когда все биты в текущем байте уже прочитаны)
10. Если в R2 ноль, то есть все байты уже обработаны, то читаем R1 и останавливаем программу.
11. Декрементируем R2. (когда там не ноль)
12. Загружаем старшую тетраду младшего байта в R0 и младшую тетраду младшего байта в Q, и идём на строчку 5.
13. Читаем R4, и если там ноль, то есть до этой единицы уже было прочитано две единицы подряд, то идём на строчку 15.
14. Декрементируем R4 (когда там не ноль) и идём на строчку 8.
15. Инкрементируем R1. (когда в R4 ноль) и идём на строчку 8.
Пример:
Число: 0110 1110 0111 1101
Результат: 0100