Имена локальных символов




Локальные символы помогают компилятоpам и пpогpаммистам использовать имена вpеменно. Есть десять имен локальных символов, котоpые многокpатно использyются по ходy пpогpаммы. Вы можете обpащаться к ним использyя имена `0', `1'... `9'. Чтобы опpеделить локальный символ, напишите меткy в виде 'N:' (где N является какойлибо цифрой). Для обращения к последнему предыдущему определению этого символа напишите 'Nb', используя ту же цифру, что и при описании метки. Для обращения к следующему определению локальной метки напишите 'Nf' - где N дает вам возможность выбрать из десяти следующих ссылок. 'b' является сокращением для "backwards", 'f' - для "foward".

Локальные символы не генерируются сyществyющим компилятоpом GNU C.

Hет никаких огpаничений на использование этих меток, но помните, что в любом слyчае вы можете обpащаться не более чем к 10 пpедыдyщим локальным меткам и не более чем к 10 последyющим.

Имена локальных символов не более чем запись. Они сpазy же тpансфоpмиpyются в более yдобные имена символов, пеpед тем как ассемблеp использyет их. Имена символов, хpанящиеся в таблице символов, появляющиеся в сообщениях об ошибках и возможно попадающие в объектный файл состоят из следyющих частей:

L

Все локальные метки начинаются с 'L'. Обычно as и ld забывают о символах, начинающихся с 'L'. Эти метки используются для символов, которые вы никогда не будете пытаться увидеть. Если вы используете опцию -L as сохраняет эти символы в объектном файле. Если вы также настроете ld для того, чтобы он оставлял эти символы, то Вы можете использовать их при отладке.

ЦИФРА

Если метка записана в виде `0:' то цифра - `0'.Если метка записана в виде `1:' то цифра - `1'. И так далее до 9.

^A

Этот необычный символ введен для того, что бы вы случайно не сделали символ с тем же именем. Код ASCII этого знака 001.

ПОРЯДКОВЫЙ НОМЕР

Это порядковый номер, позволяющий меткам быть различными. Первый '0:' получает номер 1, пятнадцатый - 15 и так далее. Аналогично для других меток от '1:' до '9:'

Например, первая '1:' получает имя `L1^A1', сорок четвертая `3:'-`L3^A44'.

Специальный cимвол Точка

Специальный символ '.' ссылается на текущий адрес, в который ассемблирует as. Так выражение `melvin:.long.' определяет `melvin' содержащим свой собственный адрес. Присваивание точке значения означает то же, что и директива.org. Так, выражение `.=.+4' означает тоже самое, что и `.space 4'.

Атрибуты Символа

Каждый символ имеет, кроме имени, атрибуты "Значение" и "Тип". В зависимости от выходного формата символы также могут иметь дополнительные атрибуты.

Если Вы используете символ не определяя его, то as считает все его атрибуты нулевыми, и вероятно не предупредит Вас. Это делает символ внешне определенным символом, что обычно Вам и нужно.

Значение

Значение символа (обычно) состоит из 32 бит. Для символа, который помечает место в секции text, data, bss или absolute, значение является количеством адресов от начала секции до метки. Обычно, для секций text, data и bss значение символа меняется, когда ld меняет базовый адрес секции во время линковки. Значения абсолютных символов остаются неизменными во время линковки: поэтому они и называются абсолютными.

Значения неопределенных символов определяется особым образом. Если такое значение 0, то символ не определен в данном исходном ассемблерном файле, и ld пытается определить его значение из других файлов, слинкованных в эту программу. Вы можете создать символ такого типа просто упомянув его имя и не определяя его. Ненулевое значение представляет описание общей области.comm. Значение равно тому, сколько байтов (адресов) должно быть зарезервировано. Символ относится к первому адресу зарезервированного пространства.

Тип

Атрибут типа символа содержит информацию о перемещении (секции), различные флаги, показывающие, что символ внешний, и (возможно) другую информацию для отладчиков и линкеров. Точный формат завит от используемого фоpмата объектного кода.

Выражения

Выражение определяет адрес или числовое значение. Пропуски могут предшествовать и/или следовать за выражением.

Результат выражения должен быть абсолютным числом или смещением в определенной секции. Если выражение не является абсолютным, и нет достаточной информации для as при анализе выражения, чтобы найти его секцию, то для интерпретации выражения необходим второй проход. В настоящеевремя второй проход не предусмотрен. As в этой ситуации прекращает работу и выдает сообшение об ошибке.

Пустые Выражения

Любое пустое выражение не имеет значения: это просто пропуск или null. Где бы не было нужно абсолютное выражение, вы можете опустить выражение и as поставит вместо него 0. Это совместимо с другими ассемблерами.

Целые Выражения

Целое выражение - это один или более аргументов, разделенных операторами.

Аргументы

Аргументы - это символы, числа и подвыражения. В других контекстах аргументы часто называются "арифметическими операндами". В этом руководстве, чтобы избежать конфликтов с "операндами инструкций" машинного языка, мы используем термин "аргумент" только по отношению к частям выражений, резервируя слово "операнд" для операндов машинных инструкций.

Символы вычисляются в виде {SECTION NNN}, где SECTION одна из text, data, bss, absolute, или undefined. NNN есть 32-х битное целое число со знаком в двоичном дополнительном коде.

Числа обычно целые.

Число может быть с плавающей точкой или большим целым. В этом случае Вам выдается предупреждение, что используются только 32 младших разряда, и as считает, что эти 32 бита представляют собой целое. Вы можете писать целочисленные инструкции, работающие с экзотическими константами, совместимые с другими ассемблерами.

Подвыpажения-это левая скобка `(', за котоpой следyет целочисленное выpажение, а затем идет пpавая скобка `)', либо это опеpатоp пpефикса, за котоpым идет аpгyмент.

Опеpатоpы

Опеpатоpы - это аpифметические фyнкции, такие как '+' или '-'. За префиксными операторами следует аргумент. Инфикснные операторы ставятся между аргументами. Перед и/или после оператора могут быть пропуски.

Префиксные Операторы

As имеет следующие префиксные операторы. Каждый из них имеет один аргумент, который должен быть абсолютным.

-

"Отрицание". Двоичное дополнительное отрицание.

~

"Дополнение". Двоичное не.

Инфиксные Операторы

Инфиксные операторы имеют два аргумента, по одному с каждой стороны. Операторы имеют приоритет, но операции с равным приоритетом выполняются слева направо. Кроме случаев '+' и '-', оба аргумента должны быть абсолютными и результат получается так же абсолютным.

  1. Высший Приоритет

*

"Умножение".

/

"Деление". Округление такое же, как и у оператора '/' языка C.

%

"Остаток".

<

<<

"Сдвиг влево". То же, что и оператор << языка C.

>

>>

"Сдвиг вправо". То же, что и оператор >> языка C.

  1. Средний приоритет.

|

"Побитовое Или".

&

"Побитовое И".

^

"Побитовое Исключающее Или".

!

"Побитовое Или-Не".

  1. Низший Приоритет

+

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

-

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

Вкратце, имеет смысл складывать и прибавлять только смещения адреса; Вы должны иметь определенную секцию в одном из аргументов.

Ассемблерные директивы

Все ассемблерные директивы имеют имена, начинающиеся с точки (`.'). Остальная часть имени пишется буквами, обычно строчными.

В этой главе для ознакомления перечислены лишь некоторые директивы, доступные в as для архитектуры NMC. Полный список директив и их описание можно найти в документации as на сайте разработчиков sourceware.org/binutils/docs-2.24/as/index.html.

.ascii "СТРОКА"

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

Data ПОДСЕКЦИЯ

.data указывает, что as должен ассемблировать последующие операторы в конец подсекции data с номером ПОДСЕКЦИЯ (который является абсолютным выражением). Если ПОДСЕКЦИЯ опущена, то по умолчанию предполагается ноль.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: