- •Министерство образования Российской Федерации
- •Самарский государственный технический университет
- •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
- •Список литературы
Язык ассемблера
Чтобы проиллюстрировать тесную взаимосвязь между языком ассемблера и языком машинных команд, обратимся снова к программе вычисления суммы 10 чисел из разд. 3. Программа была приведена в табл. 5.3, причем именно загружаемая в микрокомпьютер программа приведена в графе «команды на машинном языке».
Программа на языке ассемблера для того же примера приведена в табл. 5.9. Каждая строка соответствует одному предложению на языке ассемблера. Как легко заметить, предложение состоит из четырех полей: поля метки, поля операции, поля операндов и поля комментария.
Поле метки служит для ссылок на адрес данной команды, если такие ссылки потребуются. В этом поле употребляются символические имена, а не числовые адреса. Обычно эти имена должны удовлетворять следующим ограничениям. Общее число литер в имени не должно превышать некоторого значения, первая литера должна быть обязательно буквой, а не цифрой, нельзя употреблять в поле метки некоторые зарезервированные слова (например, мнемонические коды операций).
Таблица 5.9
Программа на языке ассемблера, соответствующая программе табл. 5.3
Метка |
Операция |
Операнды |
Комментарий |
|
LRI |
1, H(NUM) ; |
УСТ. НА Н, L АДРЕС ПЕРВОГО |
|
LRI |
2, L(NUM) ; |
ЧИСЛА |
|
LRI |
3, 10D ; |
НАЧАЛЬН. ЗНАЧ. СЧЕТЧИКА |
|
LRI |
4, 0D ; |
УСТ. В 0 ЧАСТИ. СУММУ |
|
LR1 |
5, 1D ; |
КОНСТ 1 ДЛЯ УМЕНЬШ. СЧЕТЧИКА |
LOOP: |
MOV |
0, 4 ; |
СЛОЖЕНИЕ ОЧЕРЕДИ. ЧИСЛА |
|
ADD |
F |
|
|
MOV |
4, 0 |
|
|
IHL |
; |
УВЕЛИЧЕНИЕ Н И L |
|
MOV |
0, 3 ; |
УМЕНЬШЕНИЕ СЧЕТЧИКА |
|
SUB |
5 |
|
|
MOV |
3, 0 |
|
|
JAN |
LOOP ; |
ТЕСТИРОВАНИЕ СЧЕТЧИКА |
|
HLT |
|
|
NUM: |
RES |
10D ; |
РЕЗЕРВИР. МЕСТА ДЛЯ ЧИСЕЛ |
|
END |
|
|
Итак, метка — это символический адрес, который можно выбрать таким образом, чтобы программа легче читалась и чтобы можно было при необходимости сослаться на команду. Поскольку в программе приходится ссылаться далеко не на каждую команду, поле метки может оставаться пустым. В программе в табл. 5.9 метка LOOP отмечает начало цикла, т. е. точку, на которую ссылается команда JAN (переход при ненулевом аккумуляторе). Конец поля метки на языке ассемблера, как правило, отмечается разделителем, например двоеточием.
Следующее поле в предложении на языке ассемблера — поле операции. Оно содержит мнемонический код операции, следовательно, определяет операцию, выполняемую данной командой. Очевидно, что программисту легче запомнить и употреблять мнемонические, а не числовые операции.
Третье поле — поле операндов. В этом поле содержится вся информация, которая нужна, чтобы полностью определить выполняемую команду. Например, оно может содержать символический адрес памяти, обозначение общего регистра или непосредственно данные. Многие ассемблеры позволяют задавать в поле операндов процедуру вычисления. Например, можно записывать арифметические формулы для вычисления адреса операнда или для команд переходов — число команд, через которое нужно «перепрыгнуть» вверх или вниз.
Если поле операндов состоит из нескольких частей, они обычно разделяются запятыми. В качестве символических адресов в поле операндов употребляются имена, которые встречаются в поле метки. Данные в поле операндов обычно могут быть заданы в двоичной, восьмеричной, десятичной или шестнадцатеричной системе. Чтобы ассемблер мог определить, в какой системе счисления представлены данные, в конце чисел может быть указан однобуквенный код системы счисления (например, В, О, D или Н). Для разделения полей операции и операндов между ними должен быть по крайней мере один пробел.
За иллюстрациями обратимся снова к программе в табл. 5.9. Первые два предложения показывают, что в поле операндов может встречаться процедура вычисления. В данном случае Н ( ) определяет процедуру, в которой выделяются старшие 8 битов величины, заключенной в скобки. В частности, Н (NUM) интерпретируется как старшие 8 разрядов числового адреса, присвоенного имени NUM.
В нашей программе NUM представляет собой символический адрес первого элемента суммируемых данных. В сочетании с кодом операции LRI эти 8 разрядов образуют непосредственные данные в команде. Таким образом, предложение на языке ассемблера LRI 1, H(NUM) вызывает загрузку в общий регистр 1 старших 8 битов адреса первого элемента данных. Аналогично L ( ) задает операцию выделения младших 8 битов, и, следовательно, L (NUM) означает младшие 8 битов адреса NUM. Эти 8 битов будут интерпретированы ассемблером в качестве второго байта машинной команды, соответствующей предложению LRI 2, L(NUM).
В связи с табл. 5.9 отметим еще три момента. Во-первых, числовые значения задаются в поле операндов вместе с указателем системы счисления. Например, в третьем предложении конструкция 10D означает, что константу 10 нужно считать десятичным числом. Ассемблер при трансляции переведет эту константу в двоичную систему. Во-вторых, все общие регистры задаются своими шестнадцатеричными номерами. И наконец, в-третьих, запятая между операндами в предложении MOV всегда интерпретируется как слово «from», т. е. «из». Таким образом, предложение MOV 0, 4 означает загрузку в общий регистр 0 (аккумулятор) содержимого из (from) общего регистра 4. Напомним, что в предложении MOV по крайней мере один из регистров должен иметь номер О, 1 или 2. Если программист нарушит это ограничение, ассемблер обнаружит ошибку и выдаст соответствующее сообщение. Это одна из типичных обнаруживаемых ассемблером ошибок.
Последнее поле в предложении на языке ассемблера — это поле комментария. Оно дает возможность программисту снабдить предложение любыми пояснениями, облегчающими чтение и понимание программы. Это поле игнорируется ассемблером в процессе трансляции исходной программы в объектную. Обычно единственное требование к этому полю состоит в том, чтобы ему предшествовал ограничитель (например, точка с запятой).