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.
Поле "комментарии" может содержать любой пояснительный текст, который используется только для удобства чтения программы и полностью игнорируется в процессе трансляции исходной программы в объектную. Перед комментариями в большинстве языков ассемблера ставится специальный символ, например, точка с запятой с тем, чтобы выделить его в структуре оператора для игнорирования его программой-транслятором. Слева и справа от текста в строке программы, а также между полями допустимо любое число пробелов.
Небольшие по объему исходные программы на языке ассемблера не сложно транслировать в объектные программы и ручным путем, используя приводимые в системе команд двоичные машинные коды. При ручной трансляции исходной программы оператор дополняется слева двумя полями: полем "адрес" и полем "код". Таким образом, порядок расположения полей в рассматриваемом случае следующий: "адрес", "код", "метка", "операция", "операнд", "комментарии".
Поле "адрес" содержит адреса ячеек памяти, в которых размещаются коды первых байтов команд. Поле "код" содержит коды команд. Оба поля заполняются числами в шестнадцатеричном представлении, причем буква Н в конце не проставляется.
В общем случае в языках ассемблера выделяют следующие группы операторов: операторы машинных команд, операторы псевдокоманд, макрокоманды, команды управления ассемблером.
Операторы машинных команд представляют собой мнемоническую запись машинных кодов МП. Каждый такой оператор в результате трансляции преобразуется в соответствующую машинную команду. Команды, образующие операторы машинных команд, содержатся в системе команд МП. Все рассмотренные раннее примеры операторов принадлежат группе операторов машинных команд.
В процессе трансляции исходной программы в объектную программа-транслятор ассемблер нуждается в некоторых уточнениях. Например, ассемблер не знает, в какую ячейку памяти должна быть помещена первая команда программы. Эта и другая информации, необходимая для работы ассемблера, вводится в виде так называемых операторов псевдокоманд. Приставка "псевдо" указывает на то, что такие команды не отображаются машинными кодами в объектной программе, а используются только в процессе трансляции. Мнемоника и состав таких команд для каждого языка ассемблера индивидуальны.
Макрокомандой можно назвать такой оператор, который при трансляции в объектную программу заменяется последовательностью других операторов. Для определения макрокоманды вводятся понятие макроопределения. Макроопределение представляет собой последовательность операторов, задаваемых макрокомандой. Макроопределение может находиться как в тексте основной программы, но чаще всего в библиотеке макроопределений.
Команды управления ассемблером не являются элементом языка программирования, а служат для организации диалогового режима между программистом и ЭВМ, на которой осуществляется ассемблирование. Операторы этой группы могут управлять режимами выдачи листинга, обеспечивать выбор внешних устройств для ввода программы и вывода результатов трансляции и прочие аналогичные функции.
- Микропроцессорные устройства систем управления
- 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. Транспьютеры