Главная страница
Навигация по странице:

  • Операция Операнд

  • Десятичное значение Двоичное Значение Шестнадцатеричное значение

  • Конспекты лекций. Конспект лекций. Микропроцессорные устройства систем управления


    Скачать 0.73 Mb.
    НазваниеМикропроцессорные устройства систем управления
    АнкорКонспекты лекций
    Дата25.01.2023
    Размер0.73 Mb.
    Формат файлаdoc
    Имя файлаКонспект лекций.doc
    ТипЗадача
    #904197
    страница10 из 18
    1   ...   6   7   8   9   10   11   12   13   ...   18

    3.2. Программирование на языке ассемблера.


    Исходная программа (исходный модуль), написанная на языке ассемблера состоит из последовательности строк или операторов. Как правило, оператор исходного модуля содержит четыре поля, обозначаемые: "метка", "операция", "операнд", "комментарии".

    В поле "операция" записывают мнемоническое обозначение выполняемой команды. Например: ADD, МОV, LXI и т.д.

    При написании программы на языке ассемблера программист не следит за адресами команд, поэтому для того, чтобы выделить команду, к которой необходимо осуществить переход из другого места программы, ей присваивается символический адрес, называемый меткой. В процессе трансляции исходной программы в объектную программа-транслятор определит адреса всех команд и заменит символические адреса (метки) конкретными адресами.

    Метка проставляется в поле "метка" перед мнемоникой команды. Непосредственно после метки ставится двоеточие. Меткой может служить последовательность из цифр и латинских букв, причем первым символом должна быть буква. На длину метки ограничений не накладывается, но большинство программ-трансляторов с языка ассемблера в процессе трансляции контролирует только восемь первых символов. В качестве меток нельзя использовать мнемонические обозначения команд, названия регистров и регистровых пар. Рассмотрим пример (как мы договорились ранее, при составлении примеров будем использовать гипотетические регистры А, В и С):

    Метка


    Операция

    Операнд

    LAB:

    MOV

    A,B




























    JMP

    LAB


    В рассмотренном примере по команде безусловного перехода JMP LAB будет осуществлен переход к команде, имеющей метку LАВ, т.е. к команде MOV А,В, которая содержимое из регистра В пересылает в аккумулятор. В ходе трансляции программы в объектную программа-транслятор определит действительный адрес команды MOV А,В и поставит его в команду JMP LАВ вместо метки LАВ.

    Как правило, допускается наличие у одной команды нескольких меток, которые должны размещаться в разных строках, например:

    Метка


    Операция

    META:




    METB:

    RAR


    В рассмотренном примере к команде RAR можно перейти, используя любую из меток МЕТА и МЕТB.

    В зависимости от типа команды поле "операнд" в общем случае может или ничего не содержать или содержать:

    1. Название регистра (регистровой пары).

    2. Адрес.

    3. Операнд.

    4. Названия двух регистров (регистровых пар).

    5. Название регистра (регистровой пары) и операнд.

    Операнды и адреса представляются в поле "операнд" символическими именами (метками), числами и выражениями. В рассмотренном выше примере при записи команды безусловного перехода 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   ...   6   7   8   9   10   11   12   13   ...   18


    написать администратору сайта