Адреса

Большинство ассемблеров позволяет программисту задавать данные и адреса самыми различными способами. Обычно способ адресации указывается с помощью специальных символов, например:

@ — КОСВЕННАЯ адресация; # — НЕПОСРЕДСТВЕННЫЙ операнд; Л или ,Х — ИНДЕКСАЦИЯ; *, $ или О — ОТНОСИТЕЛЬНАЯ адресация

Иногда метод адресации указывается путем модификации мнемонического кода операции, например:

ADDI ADD IMMEDIATE

(ПРИБАВИТЬ НЕПОСРЕДСТВЕННЫЙ)

ADDX ADD INDEXED

(ПРИБАВИТЬ ИНДЕКСИРОВАННЫЙ)

ADDA ADD ТО ACCUMULATOR А

(ПРИБАВИТЬ К АККУМУЛЯТОРУ А)

Большинство ассемблеров допускает задание адресов и чисел в следующем виде:

1. Десятичные числа:

ADD 136 — прибавить содержимое ячейки памяти адресом 136 к содержимому аккумулятора.

MULTIPLY #5 — умножить содержимое аккумулятора на б.

В большинстве ассемблеров числа предполагаются десяти<шыми, если программист не оговорил противного.

2 Восьмеричные, шестнадцатиричные или двоичные числа. Числа в указанных системах счисления идентифицируются специальным знаком в конце строки цифр (так, В означает двоичное, 0 или Q — восьмеричное, Н — шестнадцатиричное число). Ассемблер, разумеется, преобразует юг в двоичную форму. При задании шестнадцатиричных чисел, чтобы ассемблер мог отличить их от символических имен* может дополнительно потребоваться незначащий начальный разряд {например, записать OA, а не просто А).

SUBSTRACT #ОВЗН — вычесть шестнадцатиричное число ВЗ из содержимого аккумулятора.

JUMP53Q— перейти к ячейке с адресом 53в (43хо).

AND ( #00001111В - выполнить логическую операцию И над содержимым аккумул*Ич*ра я двоичным числом 00001111.

Рекомендуется записЬ/вать данные и адреса в той системе счисления, которая'обеспечивает'наибольшую ясность. Так, числовые константы удобно задавать в десятичной системе счисления, двоично-десятичные числа — в шестнадцатиричной (так как всякая двоично-коДйрованная десятичная цифра является одновременно шестнадцатиричной), маски— в двоичной (так как при этом они более наглядны, хотя для задания длинных масок более удобны шестнадцатиричные числа).

3. Символические имена. Символические имена могут использоваться вместо значений, которые они представляют. Эти имена могут представлять собой адреса и данные. Если имя желательно использовать в качестве данных, его следует задать как непосредственный операнд.

Обычно в ассемблере для регистров зарезервированы специальные символические имена, например:

А — для аккумулятора,

X — для индексного регистра.

Иногда символические имена регистров содержат букву R, например R3 или R15.

Примеры.

ADD INT

означает, что содержимое ячейки памяти, адрес которой задан именем INT, следует сложить с содержимым аккумулятора

ONE EQU 1

SUBSTRACT ONE

означает, что ^содержимое, ячейки памяти с адресом 1 (оно не обязательно равно 1) вычитается из содержимого аккумулятора.

ONE EQU 1

SUBSTRACT # ONE

означает вычитание единицы (# означает непосредственный операнд) из содержимого аккумулятора.

JUMP TRAP

означает передачу управления ячейке памяти, адрес которой задан именем TRAP.

4. Значение счетчика адреса. В большинстве ассемблер9в текущее значение счетчика адреса указывается символом $ или символом #. Эту форму задания счетчика адреса можно использовать, даже если в ЭВМ отсутствует относительная адресация; ассемблер сам, вычислит фактическое значение адреса.

Пример.

JUMP $ +8

означает переход на восемь ячеек вперед.

5. Арифметические выражения. Во многих ассемблерах можно использовать в качестве адреса арифметические выражения, составленные из имен, знаков арифметических операций и чисел. Пример ($ + 8), приведенный выше, представляет собой очень распространенный тип выражения. Способ вычисления этих выражений существенно отличается в разных ассемблерах. Поэтому программист должен пользоваться этой возможностью осмотрительно.

Примеры.

MULTIPLY ADDR+2

означает умножение содержимого сумматора на содержимое ячейки, которая находится на два номера дальше ячейки ADDR.

JUMP COUNT—1

означает переход к адресу, на единицу меньшему COUNT.

Ассемблер допускает использование таких операций, как умножение, деление без остатка и возведение в степень. В некоторых ассемблерах операции имеют такой же приоритет, как в ФОРТРАНе. Это означает, что умножение и деление выполняются раньше сложения и вычитания (операции одного приоритета вычисляются в порядке слева направо). В других ассемблерах операции не имеют приоритетов и выполняются в порядке слева направо. Заметим, что именно ассемблер осуществляет вычисление выражения; ЭВМ не может сама вычислять выражения непосредственно. Использование очень сложных выражений делает программы запутанными и затрудняет их тестирование и отладку.

6. Коды символов. Часто данные могут быть заданы кодами символов, обычно ASCII или EBCDIC. Чаще всего символьные данные заключаются в одинарные или двойные кавычки, хотя в некоторых ассемблерах символьная строка начинается или завершается специальным символом, например С, А или Ё.

Примеры.

COMPARE #'Е*

означает сравнить содержимое аккумулятора с внутренним представлением символа Е.

LOAD #','

означает послать в аккумулятор внутреннее представление символа (запятая).

7. Другие выражения. В некоторых ассемблерах при задании адресов и данных можно использовать логические операции (И, ИЛИ, НЕ, СЛОЖЕНИЕ ПО МОДУЛЮ 2), операции сдвига и другие операции. Разумеется, на практике сложные логические выражения используются редко.

Заметим, что в адресном поле псевдооперации DATA можно использовать любое из перечисленных выражений, например:

ERRM DATA 'ERROR'

PROD DATA С* D

Следует быть особенно осторожным в тех случаях, когда данные оказываются длиннее или короче адресного поля; в различных ассемблерах используются различные правила отбрасывания лишних или дописывания недостающих разрядов

 



Смотрите подробности великий новгород прием металлолома на нашем сайте. . http://tyuningchip.ru/ перепрошивка чип тюнинг тойота.