- •Министерство образования Российской Федерации
- •Самарский государственный технический университет
- •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
- •Список литературы
5. Программирование для микропроцессоров
Чтобы обработать информацию на микрокомпьютере, нужно шаг за шагом описать весь процесс обработки. Такое описание называется программой. Реальная программа, выполняемая микрокомпьютером, должна состоять только из тех команд, которые предусмотрены его конструкцией. Совокупность этих команд составляет так называемый машинный язык, или язык машинных команд данного компьютера.
Как мы видели в гл. 4, команды, выполняемые аппаратурой микропроцессора, довольно просты и немногочисленны. И тем не менее вычислительные возможности микропроцессора, как и любого другого компьютера, вообще говоря, не ограничены, поскольку эти команды можно объединять в программы. Совокупность программ, написанных для микрокомпьютера, составляют его программное обеспечение.
В этой главе мы рассмотрим программирование для микрокомпьютеров. Основное внимание будет уделено программированию на языке машинных команд описанных в предыдущей главе иллюстративного микропроцессора. На примере нескольких программ мы познакомимся с основными приемами программирования и попутно глубже поймем работу микропроцессора и пределы его возможностей. В заключение будут рассмотрены такие средства программирования, как ассемблеры и компиляторы. Ассемблеры выполняют трансляцию на машинный язык программ, написанных в символической форме, близкой к машинному языку. Компиляторы — это трансляторы для языков высокого уровня.
5.1. Программирование на машинном языке
Как уже говорилось, программа должна быть представлена в той форме, в какой ее воспринимает машина. В частности, команды должны быть представлены в виде последовательностей из нулей и единиц, поскольку это единственно понятная аппаратуре форма. Однако выписывать длинные последовательности из нулей и единиц довольно утомительно. Поэтому при записи команд применяется более удобная шестнадцатеричная система.
Между шестнадцатеричной и двоичной системами счисления преобразования выполняются очень легко. Каждая группа из 4 двоичных цифр соответствует ровно одной шестнадцатеричной цифре. Поэтому, если не оговорено противное, все программы на машинном языке в этой книге мы будем записывать шестнадцатеричными цифрами. Например, трехбайтовая команда нашего иллюстрированного процессора, загружающая в аккумулятор содержимое ячейки памяти с адресом 0110 1111 1101 10112, имеет вид
01110000
01101111
11011011
В шестнадцатеричных обозначениях эта команда запишется как
70
6F
DB
Тем не менее и двоичное, и шестнадцатеричное представление машинного языка неудобно и ненаглядно для человека. Поэтому, как правило, команды представляются в символической форме — используются легко запоминаемые мнемонические обозначения команд. Например, в соответствии с табл. 2 предыдущую команду можно записать в виде
LDR О
6F
DB
Второй и третий байты по-прежнему записаны шестнадцатеричными цифрами, и аккумулятор задан своим номером среди общих регистров, равным 0. Однако операция обозначена трехбуквенным мнемоническим именем LDR. В приложении приведены для справок две таблицы П1 и П2, в которых устанавливается соответствие между шестнадцатеричной и символической формой команд иллюстративного микропроцессора.
Теперь введем соглашение, которое будет действовать и далее. Все программы для нашего микропроцессора, если не сделано особых оговорок, мы будем записывать в символической форме. Таким образом, первый байт каждой команды будет выглядеть, как в табл. 2 (или П1 и П2). Номера общих регистров в командах мы будем задавать одной шестнадцатеричной цифрой, причем F16 будет обозначать косвенную адресацию. И наконец, значение второго и третьего байта в командах мы также будем задавать шестнадцатеричными цифрами.
Проиллюстрируем теперь наши соглашения на примере небольшой программы, в которой к числу, находящемуся в ячейке 000А16 главной памяти, прибавляется шестнадцатеричная константа ЗС. Программа приведена в табл. 5.1. Она выполняется следующим образом.
Прежде всего подается внешний импульс на линию «сброс», по которому на программный счетчик устанавливается 0. Затем подается импульс на линию «пуск», и начинается выполнение программы. Выбираются 3 байта, составляющие первую команду, и программный счетчик увеличивается на 1 после выборки каждого байта. Первая команда пересылает содержимое ячейки памяти 000А в аккумулятор.
Поскольку программный счетчик продвинулся на 3 единицы, он теперь содержит 0003.
Это адрес следующей команды — загрузки регистра с непосредственным адресом. Команда содержит в себе операнд и удобна для задания константы. Ее выполнение приводит к засылке значения ЗС, содержащегося во втором байте команды, в общий регистр 1, Теперь программный счетчик содержит 0005, т. е. адрес третьей команды. Ее выборка и выполнение приводят к прибавлению содержимого регистра 1 к содержимому аккумулятора и занесению суммы в аккумулятор. Следующая команда передает содержимое аккумулятора в ячейку памяти 00В. Последняя команда останавливает микропроцессор,
Таблица 5.1