- •Министерство образования Российской Федерации
- •Самарский государственный технический университет
- •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
- •Список литературы
Пример программы: «прибавить константу к числу в памяти и записать результат снова в память»
Номер ячейки памяти (шест-надцатерич-ный) |
Команда на машинном языке |
Команда в символической форме |
Комментарий |
0000 |
70 |
LDR 0 |
Передача содержимого ячейки памяти |
0001 |
00 |
00 |
000 А в аккумулятор |
0002 |
0А |
0А |
|
0003 |
61 |
LRI 1 |
Загрузка в регистр 1 величины 3С |
0004 |
ЗС |
ЗС |
|
0005 |
81 |
ADD 1 |
Сложение регистров 0 и 1, сумма в аккумуляторе |
0006 |
74 |
SТR 0 |
Передача содержимого аккумулятора |
0007 |
00 |
00 |
в ячейку 000В |
0008 |
0В |
OB |
|
0009 |
FA |
HLT |
Останов программы |
000А |
|
|
Исходное число |
000В |
|
|
Сумма |
5.2. Разветвления в программах
Одно из наиболее мощных свойств компьютеров заключается в их способности принимать решения в ходе выполнения программы. Эти решения принимаются в зависимости от простых условий, сложившихся на данный момент. Обычно в результате принятия решения либо сохраняется последовательный порядок выполнения программы, либо происходит переход на другую часть программы. Сложные решения реализуются в виде нескольких простых разветвлений. Чтобы пояснить сказанное, рассмотрим программу, которая выбирает наибольшее из трех 8-битовых целых положительных чисел х, у и z. Сначала определяется наибольшее из двух чисел х и у путем вычитания второго из первого и проверки заема в старший разряд. Отсутствие заема говорит о том, что х больше или равен у. С другой стороны, присутствие такого заема означает, что у больше х. Затем аналогичным образом отыскивается наибольшее из двух чисел: z и найденного ранее наибольшего из х и у.
На рис. 5.1. описанная выше процедура представлена в виде диаграммы. Такие диаграммы называются блок-схемами. Они весьма удобны для построения схемы вычисленного процесса.
Программа, решающая нашу задачу, приведена в табл. 5.2. Предполагается, что три исходных числа х, у и z расположены в ячейках 001В, 001С и 001D.
Программа должна поместить наибольшее число в аккумулятор. Первая команда программы загружает х в аккумулятор, а вторая помещает у в общий регистр 1. Затем осуществляется их сравнение путем вычитания у из х. Если у строго больше х, тогда возникает заем в старший разряд, который сохраняется в виде единицы в триггере переноса С. Однако еще до проверки переноса С значение х как «пробное» наибольшее из х и у загружается в регистр 2. Эта загрузка не влияет на состояние триггера переноса С.
Рис. 5.1. Блок-схема программы выбора наибольшего из трех положительных чисел x, y и z
Таблица 5.2
Программа отыскания наибольшего из трех 8-битовых целых чисел без знаков х, у и z
Ячейка памяти |
Команда на машинном языке |
Команда в символической форме |
Комментарий |
0000 |
70 |
LDR 0 |
Передача х. из памяти в аккумулятор |
0001 |
00 |
00 |
|
0002 |
1В |
1В |
|
0003 |
71 |
LDR 1 |
Передача у из памяти в регистр 1 |
0004 |
00 |
00 |
|
0005 |
1C |
1C |
|
0006 |
А1 |
SUB 1 |
Вычитание у из х. Триггер С устанавливается, если у > х |
0007 |
72 |
LDR 2 |
Передача х в регистр 2 как возможного наибольшего |
0008 |
00 |
00 |
|
0009 |
1В |
1B |
|
000А |
7С |
JCZ |
Проверка С на наличие заема. Если нет заема, то х |
000В |
00 |
00 |
больше у, и следующая команда пропускается |
000С |
10 |
10 |
|
000D |
72 |
LDR 2 |
Передача у в регистр 2, замещающая х |
000Е |
00 |
00 |
если у больше х |
000F |
1C |
1C |
|
0010 |
71 |
LDR 1 |
Передача z из памяти в регистр 1 |
0011 |
00 |
00 |
|
0012 |
1D |
1D |
|
0013 |
12 |
MOV 0 from 2 |
Передача наибольшего из х, у на аккумулятор из регистра 2 |
0014 |
А1 |
SUB 1 |
Вычитание z из наибольшего среди х, у. |
|
|
|
С устанавливается, если z больше |
0015 |
12 |
MOV 0 from 2 |
Передача наибольшего из х, у в аккумулятор как возможного наибольшего |
0016 |
7С |
JCZ |
Проверка С на наличие заема. Если заем есть, |
0017 |
00 |
00 |
то z больше; в противном случае следующая команда |
0018 |
1А |
1A |
опускается |
0019 |
11 |
MOV 0 from 1 |
Передача z в аккумулятор как наибольшего |
001 А |
FA |
HLT |
Останов программы. Наибольшее число в аккумуляторе |
001В |
|
|
Число х |
001С |
|
|
Число у |
001D |
|
|
Число z |
Затем выполняется команда условного перехода по значению С. Переход произойдет, если С имеет нулевое значение. Если С не равно нулю, то претендент на роль наибольшего, т. е. х, заменяется на у. Это делает следующая команда, которая загружает у в регистр 2. Если С=0, то управление передается на команду, хранящуюся в ячейке 0010, и в этом случае в качестве большего значения остается х. При любом варианте в этой точке программы наибольшее значение из х и у находится в регистре 2, и оно будет аналогичным образом сравниваться сz.
Значение z передается из памяти в регистр 1 командой LDR, находящейся в ячейке 0010. Следующая команда передает наибольшее значение из х и у в аккумулятор. Затем осуществляется сравнение путем вычитания z из содержимого аккумулятора. Если z больше, то возникает заем. Наибольшее из х и у переносится из регистра 2 в аккумулятор на случай, если z окажется меньше. Затем снова проверяется состояние триггера С командой JCZ. Если С=0, что говорит об отсутствии заема, то делается переход на команду останова. В противном случае выполняется очередная команда, загружающая в аккумулятор значение z, и после нее — команда останова. При всех условиях и конечном итоге на сумматоре оказывается значение наибольшего из трех чисел х, у и z.
Вообще говоря, принятие решения сводится к организации такой проверки, такого теста, по результатам которого можно было бы выбрать ту или иную последовательность действий. Наличие команд условного перехода позволяет микропроцессору выбрать нужную альтернативу автоматически, без вмешательства человека. При этом задача программиста — обеспечить, чтобы микропроцессор выполнял нужные действия при любом исходе теста.