- •Микропроцессорные устройства систем управления
- •1. Общая характеристика микропроцессоров.
- •1.1. Структура микропроцессора и его реализация.
- •1.2. Классификация современных микропроцессоров и их характеристики.
- •1.3. Принципы управления микропроцессорами.
- •1.4. Структура и типы команд микропроцессора.
- •1.5. Способы адресации информации и прерывание работы в микропроцессоре.
- •Прямая адресация.
- •Прямая регистровая адресация.
- •Косвенная регистровая адресация.
- •Непосредственная адресация
- •Относительная адресация
- •Адресация с индексированием
- •Стековая адресация
- •1.6. Организация ввода и вывода данных в микропроцессоре.
- •1.7. Система команд микропроцессора.
- •2. Принципы организации и применения микропроцессорных систем.
- •2.1. Особенности организации структуры мп-системы.
- •2.2. Структура мп-системы с общей шиной.
- •2.3. Интерфейсы мп-систем.
- •2.4. Применение мп-системы в качестве контроллера и системы сбора данных.
- •3. Основы программирования микропроцессоров.
- •3.1. Языки программирования микропроцессоров.
- •3.2. Программирование на языке ассемблера.
- •3.3. Средства разработки и отладки прикладных программ.
- •Средства отладки и диагностирования
- •Программные средства:
- •Аппаратно-программные средства:
- •4. Типовые микропроцессоры и их применение.
- •4.1. Структура и характеристика типовых мп.
- •4.2. Система команд однокристального микропроцессора.
- •4.3. Примеры написания программ.
- •5. Мультипроцессорные системы, транспьютеры.
- •5.1. Классификация систем параллельной обработки данных
- •Конвейерная и векторная обработка.
- •Машины типа simd.
- •Машины типа mimd.
- •Многопроцессорные машины с simd-процессорами.
- •Многопроцессорные системы с общей памятью
- •5.2 Мультипроцессорная когерентность кэш-памяти.
- •5.3. Многопроцессорные системы с локальной памятью и многомашинные системы
- •5.4. Транспьютеры
3.2. Программирование на языке ассемблера.
Исходная программа (исходный модуль), написанная на языке ассемблера состоит из последовательности строк или операторов. Как правило, оператор исходного модуля содержит четыре поля, обозначаемые: "метка", "операция", "операнд", "комментарии".
В поле "операция" записывают мнемоническое обозначение выполняемой команды. Например: ADD, МОV, LXI и т.д.
При написании программы на языке ассемблера программист не следит за адресами команд, поэтому для того, чтобы выделить команду, к которой необходимо осуществить переход из другого места программы, ей присваивается символический адрес, называемый меткой. В процессе трансляции исходной программы в объектную программа-транслятор определит адреса всех команд и заменит символические адреса (метки) конкретными адресами.
Метка проставляется в поле "метка" перед мнемоникой команды. Непосредственно после метки ставится двоеточие. Меткой может служить последовательность из цифр и латинских букв, причем первым символом должна быть буква. На длину метки ограничений не накладывается, но большинство программ-трансляторов с языка ассемблера в процессе трансляции контролирует только восемь первых символов. В качестве меток нельзя использовать мнемонические обозначения команд, названия регистров и регистровых пар. Рассмотрим пример (как мы договорились ранее, при составлении примеров будем использовать гипотетические регистры А, В и С):
Метка |
Операция |
Операнд |
LAB: |
MOV |
A,B |
|
— |
|
|
— |
|
|
— |
|
|
JMP |
LAB |
В рассмотренном примере по команде безусловного перехода JMP LAB будет осуществлен переход к команде, имеющей метку LАВ, т.е. к команде MOV А,В, которая содержимое из регистра В пересылает в аккумулятор. В ходе трансляции программы в объектную программа-транслятор определит действительный адрес команды MOV А,В и поставит его в команду JMP LАВ вместо метки LАВ.
Как правило, допускается наличие у одной команды нескольких меток, которые должны размещаться в разных строках, например:
Метка |
Операция |
META: |
|
METB: |
RAR |
В рассмотренном примере к команде RAR можно перейти, используя любую из меток МЕТА и МЕТB.
В зависимости от типа команды поле "операнд" в общем случае может или ничего не содержать или содержать:
Название регистра (регистровой пары).
Адрес.
Операнд.
Названия двух регистров (регистровых пар).
Название регистра (регистровой пары) и операнд.
Операнды и адреса представляются в поле "операнд" символическими именами (метками), числами и выражениями. В рассмотренном выше примере при записи команды безусловного перехода JMP addr в качестве адреса была использована метка LAB, помечающая команду MOV А,В.
Метки, присваиваемые операндам, имеют те же правила написания, что и метки команд, например:
-
Операция
Операнд
ADI
B5C
MVI
C,FOR
Первый из операторов складывает с содержимым аккумулятора число, обозначенное меткой В5C, а второй - заносит в регистр С число, обозначенное меткой FOR. При этом в программе должно быть определено, какие именно числа соответствуют меткам В5С и FOR.
Операнды и адреса могут быть представлены десятичными, двоичными, восьмеричными, шестнадцатеричными числами.
Десятичное число не сопровождается никаким специальным признаком, например:
-
Операция
Операнд
SUI
120
STA
26805
Первый из операторов вычитает из содержимого аккумулятора десятичное число 120, а второй - пересылает содержимое аккумулятора в ячейку памяти с адресом 26805.
Двоичное число в поле "операнд" в большинстве языков ассемблера дополняется в конце латинской буквой В, например:
-
Операция
Операнд
ANI
00010000В
Записанный оператор производит операцию поразрядного логического умножения содержимого аккумулятора и числа 000100002 (индекс 2 указывает на то, что число двоичное).
Восьмеричное число в поле "операнд" дополняется буквой О или Q, например:
-
Операция
Операнд
IN
46Q
LXI
SP,10307O
Первый оператор передает в аккумулятор данные из порта, адрес которого 468, а второй - заносит в указатель стека SP число 103078.
Широкое применение при написании программ получила шестнадцатеричная форма представления чисел. В шестнадцатеричной системе счисления используется 16 символов: десять цифровых (от 0 до 9) и шесть буквенных (от А до F). Ниже приведено соответствие между десятичными, двоичными и шестнадцатеричными значениями величин.
Десятичное значение |
Двоичное Значение |
Шестнадцатеричное значение |
0 |
0000 |
0 |
1 |
0001 |
1 |
2 |
0010 |
2 |
3 |
0011 |
3 |
4 |
0100 |
4 |
5 |
0101 |
5 |
6 |
0110 |
6 |
7 |
0111 |
7 |
8 |
1000 |
8 |
9 |
1001 |
9 |
10 |
1010 |
A |
11 |
1011 |
B |
12 |
1100 |
C |
13 |
1101 |
D |
14 |
1110 |
E |
15 |
1111 |
F |
Для перевода двоичного числа в шестнадцатеричное оно разбивается на тетрады, т.е. группы по 4 разряда в каждой. При этом, если длина двоичного числа не кратна 4, оно дополняется слева нулями. После этого каждая тетрада заменяется соответствующим символом шестнадцатеричной системы.
Например, двоичное число 101100 дополняется слева двумя нулями и разбивается на тетрады 0010 и 1100. После замены каждой тетрады соответствующим символом шестнадцатеричной системы получаем шестнадцатеричное число 2С (2C16). Таким образом, для представления в шестнадцатеричной системе счисления однобайтового операнда достаточно двух разрядов, а двухбайтового операнда или адреса - четырех разрядов.
За шестнадцатеричным числом в поле "операнд" должна следовать латинская буква Н. Для того, чтобы шестнадцатеричное число можно было отличить от метки, оно должно начинаться с цифры. В случае, если первым символом является буква, перед числом проставляется незначащий нуль. Рассмотрим примеры:
Операция |
Операнд |
LDA |
6CA2H |
LXI |
В, 0Е060Н |
Первый оператор пересылает в аккумулятор содержимое ячейки памяти с адресом 6СА216, второй оператор - заносит в регистровую пару BC число E06016.
Кратко остановимся на представлении операндов и адресов с помощью выражений.
Выражение состоит из чисел и меток, связанных арифметическими и логическими выражениями. Вычисление выражений осуществляется при трансляции исходной программы в объектную. При этом программа-транслятор в ходе этих вычислений может производить, например, такие операции, как умножение и деление, хотя МП соответствующих команд может и не иметь. Рассмотрим пример:
-
Операция
Операнд
CPI
16+82/2-META
Данный оператор производит сравнение содержимого аккумулятора с числом 55 если, например, метка МЕТА имеет значение 2.
Поле "комментарии" может содержать любой пояснительный текст, который используется только для удобства чтения программы и полностью игнорируется в процессе трансляции исходной программы в объектную. Перед комментариями в большинстве языков ассемблера ставится специальный символ, например, точка с запятой с тем, чтобы выделить его в структуре оператора для игнорирования его программой-транслятором. Слева и справа от текста в строке программы, а также между полями допустимо любое число пробелов.
Небольшие по объему исходные программы на языке ассемблера не сложно транслировать в объектные программы и ручным путем, используя приводимые в системе команд двоичные машинные коды. При ручной трансляции исходной программы оператор дополняется слева двумя полями: полем "адрес" и полем "код". Таким образом, порядок расположения полей в рассматриваемом случае следующий: "адрес", "код", "метка", "операция", "операнд", "комментарии".
Поле "адрес" содержит адреса ячеек памяти, в которых размещаются коды первых байтов команд. Поле "код" содержит коды команд. Оба поля заполняются числами в шестнадцатеричном представлении, причем буква Н в конце не проставляется.
В общем случае в языках ассемблера выделяют следующие группы операторов: операторы машинных команд, операторы псевдокоманд, макрокоманды, команды управления ассемблером.
Операторы машинных команд представляют собой мнемоническую запись машинных кодов МП. Каждый такой оператор в результате трансляции преобразуется в соответствующую машинную команду. Команды, образующие операторы машинных команд, содержатся в системе команд МП. Все рассмотренные раннее примеры операторов принадлежат группе операторов машинных команд.
В процессе трансляции исходной программы в объектную программа-транслятор ассемблер нуждается в некоторых уточнениях. Например, ассемблер не знает, в какую ячейку памяти должна быть помещена первая команда программы. Эта и другая информации, необходимая для работы ассемблера, вводится в виде так называемых операторов псевдокоманд. Приставка "псевдо" указывает на то, что такие команды не отображаются машинными кодами в объектной программе, а используются только в процессе трансляции. Мнемоника и состав таких команд для каждого языка ассемблера индивидуальны.
Макрокомандой можно назвать такой оператор, который при трансляции в объектную программу заменяется последовательностью других операторов. Для определения макрокоманды вводятся понятие макроопределения. Макроопределение представляет собой последовательность операторов, задаваемых макрокомандой. Макроопределение может находиться как в тексте основной программы, но чаще всего в библиотеке макроопределений.
Команды управления ассемблером не являются элементом языка программирования, а служат для организации диалогового режима между программистом и ЭВМ, на которой осуществляется ассемблирование. Операторы этой группы могут управлять режимами выдачи листинга, обеспечивать выбор внешних устройств для ввода программы и вывода результатов трансляции и прочие аналогичные функции.