- •Министерство образования Российской Федерации
- •Самарский государственный технический университет
- •2. Оформление курсового проекта
- •3. Описание вариантов заданий
- •Перечень операций подлежащих программированию
- •4. Архитектура микропроцессоров
- •4.1. Микрокомпьютер
- •4.2. Структура микропроцессора
- •4.3. Блок управления и синхронизации
- •4.4. Система команд
- •4.4.1. Фаза выборки и дешифрации
- •Обозначения, используемые при описании команд,
- •Команды передач управления
- •Команды обращения к подпрограммам
- •Арифметические и логические команды
- •Команды ввода/вывода
- •Специальные команды
- •4.4.2. Фаза выполнения
- •Команды пересылки
- •Команды с непосредственным адресом
- •Команды обращения к памяти
- •Команды передачи управления
- •Команды обращения к подпрограммам
- •Арифметические и логические команды
- •Команды ввода/вывода
- •Специальные команды
- •4.5. Способы адресации
- •Прямая адресация
- •Непосредственная адресация
- •Индексная адресация
- •Косвенная адресация
- •Относительная адресация
- •Страничная адресация
- •4.6. Некоторые другие команды, специфичные для микропроцессоров
- •Арифметические и логические команды с операндами в главной памяти
- •Команды условных переходов
- •Команды обработки данных
- •5. Программирование для микропроцессоров
- •5.1. Программирование на машинном языке
- •Пример программы: «прибавить константу к числу в памяти и записать результат снова в память»
- •5.2. Разветвления в программах
- •5.3. Программирование циклов
- •Программа вычисления суммы десяти 8-битовых чисел без знаков
- •5.4. Программирование сложных разветвлений
- •Программа сложного разветвления, использующая таблицу переходов
- •5.5. Подпрограммы
- •Вход в подпрограмму и выход из подпрограммы
- •Параметры подпрограммы
- •Пример передачи параметров от главной программы в подпрограмму через общие регистры
- •Сложение с п-кратной точностью
- •Подпрограмма сложения чисел с двойной точностью
- •Умножение
- •5.6. Загрузка программ
- •Подпрограмма умножения целых положительных чисел Распределение общих регистров: r2: счетчик, r3: множимое y, r4: множитель X, r5: ст. Часть произведения Рн, r6:мл. Часть произведения pl
- •80 (Маска)
- •Программа-загрузчик
- •5.7. Программирование на языке ассемблера
- •Ассемблеры
- •Язык ассемблера
- •Программа на языке ассемблера, соответствующая программе табл. 5.3
- •Директивы ассемблера
- •Макрокоманда
- •Список команд иллюстрированного микропроцессора
- •Список команд иллюстративного микропроцессора
- •Условные графические обозначения в схемах
- •Продолжение Приложение п3
- •Продолжение Приложение п3
- •Продолжение Приложение п3
- •Список литературы
- •Содержание и объем курсового проекта …………………………….
- •Оформление курсового проекта ……………………………………...
- •Продолжение Приложение п2
- •Продолжение Приложение п2
- •Продолжение Приложение п2
- •Продолжение Приложение п2
- •Приложение п2
- •Приложение п2
- •Список литературы
Программа сложного разветвления, использующая таблицу переходов
Ячейка памяти |
Команда на машинном языке |
Команда в символической форме |
Комментарий |
. . . . . . . . . |
|||
1000 |
61 |
LRI 1 |
Загрузка регистров Н, L начальным |
1001 |
20 |
20 |
адресом таблицы переходов |
1002 |
62 |
LRI 2 |
|
1003 |
00 |
00 |
|
1004 |
F4 |
RSC |
Сброс триггера С |
1005 |
F2 |
RTR |
Сдвиг младшего разряда аккумулятора в |
|
|
|
в триггер С |
1006 |
78 |
JCN |
Если С=1, то содержимое Н, L указы- |
1007 |
10 |
10 |
вает на начальный адрес нужной ветви |
1008 |
0Е |
0Е |
программы |
1009 |
F5 |
IHL |
Если С = 0, содержимое пары |
100А |
F5 |
IHL |
регистров Н, L увеличивается дважды на 1 и |
100В |
7В |
JMP |
1 и указывает на |
100С |
10 |
10 |
следующий начальный адрес |
100D |
05 |
05 |
|
100Е |
1F |
MOV 0 from F |
Замена в Н, L указателя на элемент таблицы переходов самим |
100F |
5F |
IHL |
адресом перехода |
1010 |
F5 |
MOV 2 from F |
|
1011 |
30 |
MOV 1 from 0 |
|
1012 |
F9 |
JHL |
Переход на нужную ветвь программы |
. . . . . . . . . |
|||
Таблица переходов: |
|||
2000 |
— |
— |
Начальный адрес ветви 1 |
2001 |
— |
— |
|
2002 |
— |
— |
Начальный адрес ветви 2 |
2003 |
— |
— |
|
. . . . . . . . . |
|||
200Е |
— |
— |
Начальный адрес ветви 8 |
200F |
|
|
|
В какой-то момент по команде перехода в ячейке 1006 микропроцессор выйдет из цикла на команду в ячейке 100Е. В этот момент содержимое пары регистров Н, L будет указывать на строку, содержащую начальный адрес нужной программной ветви. Четыре команды служат для загрузки этого начального адреса в регистры Н, L. Поскольку начальный адрес в строке таблицы замещает находившийся в Н, L указатель на саму строку, нужно особо позаботиться о том, чтобы не испортить указатель до того, как будет использована находящаяся в нем информация. Поэтому старшие разряды начального адреса ветви сначала переносятся в регистр 0, а не прямо в регистр Н. После этого указатель в Н, L увеличивается на 1, чтобы указывать на младшие разряды начального адреса, и эти разряды выбираются в регистр L, поскольку указатель больше не нужен. Затем в регистр Н переносятся старшие разряды начального адреса из регистра 0. Наконец, выполняется команда перехода по косвенному адресу, которая заносит содержимое регистров Н, L на программный счетчик, в результате чего начнется выполнение нужной программной ветви.
Недостатки обоих рассмотренных методов заключаются в том, что перебор всех возможных альтернатив делается последовательно. Это может потребовать заметного времени, особенно при большом числе альтернатив. Задержку можно уменьшить, если процедуру поиска альтернативы организовать в виде двоичного дерева. При такой процедуре последовательно отбрасывается половина оставшихся альтернатив, пока не останется единственная.
Для случая с таблицей переходов, например, на первом шаге нужно проверить, лежит ли нужный начальный адрес в первой четверке адресов или во второй. Затем на втором шаге нужно установить, принадлежит ли адрес первой или второй паре в выбранной на первом шаге четверке. На третьем шаге выбор сузится до одного адреса. Легко видеть, что такая процедура требует только трех, а не восьми шагов, соответствующих худшему случаю в описанной ранее процедуре. В общем случае, если число альтернатив равно N, то при поиске по двоичному дереву число шагов будет равно наименьшему целому числу, которое больше или равно Iog2 N. При больших N это дает значительную экономию по сравнению с последовательным перебором альтернатив.