- •Министерство образования Российской Федерации
- •Самарский государственный технический университет
- •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
- •Список литературы
Ассемблеры
Составлять программы гораздо удобнее, если наряду с символическими именами для команд, называемых мнемоническими кодами операций, можно употреблять для обозначения адресов в командах также символические имена, а не числовые значения. Например, чтобы загрузить содержимое ячейки памяти 538616 в аккумулятор, в нашем иллюстрированном микропроцессоре нужно выполнить команду из трех байтов 705386 (в шестнадцатеричном представлении). Естественно, более удобна и наглядна запись этой команды в виде LDR О,
Мы можем получить эти удобства, если будем располагать некоторым средством, подставляющим числовые значения вместо символических имен (операций и адресов) после того, как программа уже написана. Это и составляет основную функцию программы-ассемблера. Программа, написанная в новой удобной форме, называется программой на языке ассемблера, а каждая команда называется предложением на языке ассемблера или оператором на языке ассемблера.
Вообще говоря, программа на языке ассемблера — это, по существу, та же программа на машинном языке с символическими именами для адресов операндов, символическими именами для адресов команд и мнемоническими кодами операций. Задача ассемблера — заменить каждый мнемонический код операции соответствующим машинным кодом операции, отвести ячейки для каждой команды и каждого операнда и подставить вместо символических адресов их числовые значения. Как правило, между предложениями на языке ассемблера и командами на машинном языке существует взаимооднозначное соответствие. Однако бывают случаи, когда по одному предложению ассемблер генерирует несколько машинных команд.
На рис. 5.6 показана схема использования ассемблера.
Программа на языке ассемблера называется исходной программой, а генерируемая программа на машинном языке — объектной программой. Ассемблер, выполняющий функции транслятора и сам являющийся программой, загружается в компьютер вместе с исходной программой.
Рис. 5.6. Схема использования ассемблера. X,
где LDR — мнемонический код операции, 0 — обозначение общего регистра, а X — символическое обозначение ячейки памяти 5386
Исходная программа выступает в роли «данных», обрабатываемых программой-ассемблером. В результате генерируется объектная программа. Когда ассемблер работает на том же компьютере, что и объектная программа, он называется собственным ассемблером. Однако часто ассемблер бывает написан для большой универсальной ЭВМ, выполняющей процесс трансляции. Такой ассемблер называется кросс-ассемблером.
В процессе трансляции ассемблер использует таблицы для присваивания числовых значений мнемоническим кодам операций и символическим адресам. В ассемблер всегда включается таблица со всеми допустимыми мнемоническими кодами операций и соответствующими им числовыми значениями. Так что замена операций выполняется просто. Для того чтобы присвоить числовое значение каждому символическому адресу, ассемблер сначала составляет так называемую таблицу имен, в которую заносит все встреченные в программе символические адреса. Затем он отводит область памяти для программы, вычисляет значения для всех символических адресов и после этого выполняет соответствующую подстановку.
Одно из главных преимуществ языка ассемблера заключается в легкости, с какой делаются вставки и удаления предложений в исходной программе. При написании программы часто обнаруживается, что в некоторую точку уже написанной части программы нужно вставить группу команд. В программе на машинном языке это потребует сдвига всех слов программы ниже вставленных команд. Более того, может оказаться, что адресные поля некоторых команд в программе (если, например, есть циклы или переходы) теперь должны ссылаться на переместившиеся команды. Это значит, что все такие адресные поля нужно откорректировать.
В программе на языке ассемблера подобных проблем не возникает, поскольку адресам не даются числовые значения. Следовательно, при вставках предложений никаких трудностей не возникает. Точно так же трудностей не возникает и при выбрасывании предположений.
Другое полезное свойство многих ассемблеров — это обнаружение ошибок. Конечно, ассемблер не может обнаружить логических ошибок в самом замысле программы; однако он может проверять соблюдение определенных синтаксических ограничений, наложенных на язык, и сообщить программисту об их нарушениях.