Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМ отчёт №2.docx
Скачиваний:
37
Добавлен:
16.04.2015
Размер:
278.89 Кб
Скачать

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