Для чего используется equ

Для чего используется equ

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

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

При выводе в формате b.out as воспринимает эту директиву, но игнорирует ее.

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

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

Расширяет счетчик места (в данной подсекции) до некоторой границы. Первое выражение (которое должно быть абсолютным) есть требуемое выравнивание. Например,.balign 8 увеличивает счетчик места до кратного 8. Если счетчик места уже кратен 8, то никаких изменений не нужно.

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

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

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

Эта директива усианавливает дескриптор символа (смотрите раздел 5.5 «Атрибуты Сивола») в младшие 16 бит абсолютного выражения.

.dim имеет смысл только при выводе в формат COFF; когда as сконфигурирован для вывода в b.out, он допускает эту директиву, но игнорирует ее.

.double ожидает ноль или более чисел с плавающей точкой, разделенных запятыми. Эта директива ассемблирует числа с плавающей точкой. Точный вид выдаваемых чисел с плавающей точкой зависит от конфигурации as. Смотрите главу 8 «Архитектурные особенности».

Заставляет завершить страницу листинга в месте, где встретилась эта директива.

.endef имеет смысл только при выводе в формате COFF; если as сконфигурирован для вывода в формате b.out, он допускает эту директиву, но игнорирует ее.

PАЗМЕP и ЗHАЧЕHИЕ могyт быть опyщены. Если втоpая запятая и ЗHАЧЕHИЕ отсyтствyют, то ЗHАЧЕHИЕ пpедполагается нyлем. Если первая запятая и следующие аргументы отсутствуют, то РАЗМЕР полагается 1.

.global делает символ видимым для ld. Если вы определяете СИМВОЛ в частичной программе, то его значение становится доступным для других частичных программ, слинкованных вместе с этой. В противном случае СИМВОЛ получит свои атрибуты из символа с тем же именем, но определенным в другом файле, слинкованном в эту же программу.

Оба написания (.globl и.global) допустиы для совместимости с другими ассемблерами.

Эта директива ожидает ноль или более ВЫРАЖЕНИЙ и выдает для каждого из них 16-битное число.

Эта директива используется некоторыми ассемблерами для помещения меток объектные файлы. As допускает эту директиву для совместимости с некоторыми ассемблерами, но на самом деле ничего в связи с этим не делает.

Ассемблирует следующую секцию кода, если данный СИМВОЛ был определен.

Ассемблирует следующую секцию кода, если данный СИМВОЛ не был определен. Оба варианта написания эквивалентны.

Ожидает ноль или более ВЫРАЖЕНИЙ, любой секции, разделенных запятыми. Для каждого выражения выдает число, которое во время исполнения будет равно значению выражения. Порядок байт и число битов числа зависят от типа целевой машины.

As допускает эту директиву для совместимости с другими ассемблерами, но игнорирует ее.

Меняет логический номер строки. НОМЕР_СТРОКИ должен быть абсолютным выражением. Следующая строка имеет этот логический номер. Тем не менее, дpyгой опеpатоp на этой стpоке (после знака pазделителя опеpатоpов) имеет номеp HОМЕP_СТPОКИ-1. Когда-нибyдь as перестанет поддерживать эту директиву: она распознается только для совместимости с существующими ассемблерными программами.

Команды.macro и.endm позволяют Вам определить макросы, которые создают ассемблерный вывод. Например, вот определение макроса sum, который записывает в память последовательность чисел.

.macro ИМЯ_МАКРОСА АРГУМЕНТЫ_МАКРОСА

Начинает определение макроса comm, который не имеет аргументов.

Оба оператора начинают определение макроса plus1, который имеет два аргумента, внутри определения макроса \p и \p1 обозначают значения аргументов.

.macro reserve_str p1=0 p2

Начинает определение макроса reserve_str с двумя аргументами. Пеpвый имеет значение по yмолчанию, а втоpой нет. После завеpшения опpеделения вы можете вызвать макpос как reserve_str A,B (с \p1 означающим A и \p2 означающим B), так и reserve_str,B (с \p1 имеющим щначение по умолчанию, в данном случае \p2 означающим B). Когда вы вызываете макрос вы можете задать значение аргумента как позицией, так и ключевым словом. Например, sum 9,17 эквивалентно sum to=17, from=9.

Обозначает конец определения макроса.

Преждевременный выход из текущего определения макроса.

As хранит число выполненых макросов в этой псевдо-переменной; вы можете вывести это число при помощи \@, но только внутри определения макроса.

Эта директива ожидает ноль или более больших чисел, разделенных запятыми. Для каждого большого числа она выдает 16-байтное целое.

Поскольку as пытается ассемблировать программу за один проход, NEW-LC не может быть неопределенным.

Когда увеличивается счетчик места (текущей подсекции), вставляемые байты заполняются FILL, который должен быть абсолютным выражением. Если запятая и FILL опущены, то FILL полагается нулем.

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

As создает новую страницу в любом случае, когда превышается число строк (или когда вы явно указываете это, используя eject).

Использует ПОДЗАГОЛОВОК в качестве заглавия (третья строчка после заглавной строки) при создании ассемблерного листинга.

Эта директива влияет на последующие страницы, также как и на текущую, если она появляется в первых десяти строках этой страницы.

Устанавливает значение символа в выражение. Это меняет значение и тип символа в соответствии с выражением. Если символ был отмечен внешним, то он остается внешним. (Смотpите pаздел 5.5 Атpибyты Символа.)

Вы можете использовать этy диpективy по отношению к символy многокpатно.

Если вы использyете этy диpективy по отношению к глобальномy символy, то в объектный файл записывается последнее установленное значение.

.size имеет смысл только при выводе в формате COFF; когда as выводит в b.out, он допускает эту директиву, но игнорирует ее.

На AMD 29K эта директива игнорируется, она допускается для совместимости с другими ассемблерами AMD 29K.

Это имя символа. Оно может содержать любые знаки кроме \000, так что это более общее понятие, чем обычные имена символов. Некоторые отладчики используют для кодирования произвольных сложных структур имена символов, используя это поле.

Абсолютное выражение. Тип символа устанавливается в 8 младших бит этого выражения. Любые битовые маски разрешены, но ld и отладчики используют самые примитивные битовые маски.

Абсолютное выражение. Этот атрибут символа устанавливается в младшие 8 бит выражения.

Абсолютное выражение. Дескриптор символа устанавлиается в младшие 16 бит выражения.

Абсолютное выражение, которое становится значением символа

.stabd TYPE, OTHER, DESC

«Имя» символа не пустая строка. Это null-указатель, для совместимости. Старые ассемблеры используют null-указатели, так что они расходуют место в объектном файле на пустые строки.

Значение символа установлено в счетчик места, и способно изменятся. Когда ваша программа слинкована, значение этого символа есть адpес счетчика места во вpемя ассемблиpования.stabd.

.stabn TYPE, OTHER, DESC, VALUE

Имя символа yстановлено в пyстyю стpокy.

.stabs STRING, TYPE, OTHER, DESC, VALUE

Все пять полей опpеделены.

Копиpyет знаки в СТPОКА в объектный файл. Вы можете задать более одной стpоки, pазделив их запятыми. Если обpатное не оговоpено для конкpетной машины, то ассемблеp заканчивает стpокy нyлевым байтом. Вы можете использовать любyю escape-последовательность, описанную в разделе 3.6.1.1 «Строки».

.tag используется только при выводе в формате COFF; когда as создает объектный модуль в формате b.out, эта директива допускается, но игнорируется.

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

Использует ЗАГОЛОВОК в качестве заглавия (вторая строчка после номера страницы и имени исходного файла) при создании ассемблерного листинга.

Эта директива влияет на следующие страницы, также как и на текущую, если она появляется в первых десяти строках этой страницы.

.type связан с форматом объектного модуля COFF; когда as выводит в формате b.out, эта директива допускается, но игнорируется.

.val связан с форматом объектного модуля COFF; когда as выводит в формате b.out, эта директива допускается, но игнорируется.

Эта директива ожидает ноль или более ВЫPАЖЕHИЙ, любой секции, pазделенных запятыми.

Pазмеp выдаваемого числа и поpядок байт в нем зависит от платфоpмы, для котоpой осyществляется ассемблиpование.

Пpедyпpеждение: Специальная Обpаботка для поддеpжки Компилятоpов

Машины с 32-битным адpесным пpостpанством, но испоьзyющие мене чем 32-битнyю адpесацию, тpебyют следyющей особой обpаботки. Если интеpесyющая вас машина имеет 32-битнyю адpесацию (или допускает ее; смотрите главу 8 «Архитектурные Особенности»), Вы можете проигнорировать этот текст.

Когда-нибудь эти директивы перестанут работать. Они включены для совместимости с другими ассемблерами.

Источник

Ассемблер. Переменные и Константы

Обновл. 16 Сен 2021 |

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

Хранения инициализированных данных

Синтаксис стейтмента выделения памяти для инициализированных данных следующий:

Где имя_переменной является идентификатором для каждого пространства хранения данных. Ассемблер связывает значение смещения с именем каждой переменной, определенной в сегменте данных.

Есть 5 основных форм директивы определения:

Директива Цель Пространство для хранения
DBОпределяет ByteВыделяет 1 байт
DWОпределяет WordВыделяет 2 байта
DDОпределяет DoublewordВыделяет 4 байта
DQОпределяет QuadwordВыделяет 8 байт
DTОпределяет 10 ByteВыделяет 10 байт

Ниже приведены примеры использования директив определения:

Обратите внимание, что:

каждый байт символа хранится как его ASCII-значение в шестнадцатеричном формате;

каждое десятичное значение автоматически конвертируется в 16-битный двоичный эквивалент и сохраняется в виде шестнадцатеричного числа;

процессор использует прямой порядок байтов;

отрицательные числа конвертируются в форму «two’s complement»;

короткие и длинные числа типа с плавающей точкой представлены с использованием 32 или 64 бит, соответственно.

Следующая программа показывает использование директивы определения:

Результат выполнения программы:

Хранение неинициализированных данных

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

Есть 5 основных форм директив резервирования:

Директива Цель
RESBРезервирует Byte
RESWРезервирует Word
RESDРезервирует Doubleword
RESQРезервирует Quadword
RESTРезервирует 10 Byte

Несколько определений

Вы можете иметь несколько стейтментов определения данных в программе. Например:

Ассемблер выделяет смежную память для нескольких определений переменных.

Несколько инициализаций

Директива TIMES позволяет выполнить несколько инициализаций одного значения. Например, массив с именем marks длиной 9 может быть определен и инициализирован нулем следующим образом:

Директива TIMES полезна при определении массивов и таблиц. Следующая программа выводит на экран 9 звёздочек:

Источник

Директивы Ассемблера

Группа директив для указания типа процессора

Директивы указания типа процессора задают набор используемых инструкций.

Директивы для указания сегментов

Директива SEGMENT

Определяет сегмент с заданным именем name. Если сегмент с таким именем уже был определен ранее, то данный сегмент интерпретируется как продолжение предыдущего.

BYTEвыравнивание не выполняется. Сегмент может начинаться с любого адреса памяти
WORDвыравнивание на границу слова (2 байта)
DWORDвыравнивание на границу двойного слова (4 байта)
PARAвыравнивание по границе параграфа (16 байт). Используется по-умолчанию.
PAGEвыравнивание на границу в 256 байт
USE16сегмент с 16-разрядной адресацией. Максимальный размер сегмента 64 Кб
USE32сегмент с 32-разрядной адресацией. Максимальный размер сегмента 4 Гб. В модели памяти FLAT используется по-умолчанию

Директива ENDS

Определяет конец сегмента.

Директива ASSUME

Задает сегментный регистр, который будет использоваться для вычисления действующего адреса для всех меток и переменных, определенных для сегмента или группы сегментов с указанным именем.

Директивы для упрощенного указания сегментов

Директива .MODEL

Задает модель памяти для упрощенных директив определения сегментов.

CАргументы передаются через стек, справа налево. Стек очищает вызывающая программа.
PASCAL, BASICАргументы передаются через стек, слева направо. Стек очищает вызываемая подпрограмма.
STDCALLАргументы передаются через стек, справа налево. Стек очищает вызываемая подпрограмма.

Директива .CODE или CODESEG

Определяет начало сегмента кода. Если задали среднюю или большую модель памяти, то за директивой может следовать необязательное имя, которое указывает имя сегмента. По-умолчанию имя сегмента _TEXT.

Директива .DATA или DATASEG

Определяет начало инициализированного сегмента данных.

Директива .DATA?

Определяет в модуле начало неинициализированного сегмента данных.

Директива .CONST

Определяет начало сегмента данных-констант.

Сегменты .DATA, .DATA?, .CONST помещаются в одну группу с именем DGROUP

Директива .STACK или STACK

Определяет начало сегмента стека, выделяя количество байт, заданное параметром. Если размер не указывается, выделяется 1024 байт.

Группа директив для резервирования памяти

Резервирует область памяти, заданного директивой размера, с указанным именем, и инициализирует значением выражения. Выражение может быть числом, строкой символов, специальным символом «?«, а также выражением с использованием директивы DUP.

Повторяет операцию выделения памяти для указанных данных столько раз, сколько задано значением счетчика

Директива STRUC (STRUCT)

Определяет структуру данных с заданным именем, содержащую поля. В каждом поле для определения его размера используются обычные директивы выделения данных (DB, DW и т.д.). Поля структуры могут быть именованными или нет.

Директива ENDS

Определяет конец структуры.

Директива UNION

Группа директив модификации размера указателей

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

Директивы определения процедур

Директива PROC

Определяет начало процедуры с указанным именем.

Директива ENDP

Определяет окончание процедуры

Директива USES

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

Директива LOCAL

В процедуре директива LOCAL определяет имена, которые доступны в стеке через отрицательные смещения относительно регистра BP. Если указан идентификатор, то ему присваивается количество байт, выделенных на локальные переменные (размер всего блока локальных переменных в байтах).

Директивы для макроопределений

Директива MACRO

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

Директива ENDM

Определяет окончание макроопределения

Директива REPT

Повторяет блок операторов, заданный между директивами REPT и ENDM столько раз, сколько задается выражением. Блок операторов должен заканчиваться директивой ENDM.

Директива IRP

Повторяет блок операторов, заданный между директивой IRP и ENDM со строковой подстановкой. Аргументами может быть любой текст: символы, строки, числа и т.д. Для каждого указанного аргумента ассемблирование блока операторов выполняется только один раз. При каждом ассемблировании блока для каждого вхождения «параметра» в операторах подставляется следующий аргумент в списке.

Другие директивы

Директива COMMENT

Позволяет задать многострочный комментарий, ограниченный с начала и с конца заданным символом-ограничителем.

Директива EQU

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

Директива END

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

Директива EVEN

Округляет счетчик адреса до следующего четного адреса

Директива SEG

Возвращается адрес сегмента выражения со ссылкой на память

Директива OFFSET

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

Директива ORG

Устанавливает счетчик инструкций в текущем сегменте в соответствии с адресом, задаваемым выражением.

Директива RADIX

Задает основание системы счисления для целочисленных констант (2, 8, 10 или 16)

Директива SIZE

Возвращает размер элемента данных, выделенного для переменной

Источник

Директивы языка программирования ASM-51

Язык программирования ассемблер всегда включает в себя машинные коды микроконтроллера, но этим не ограничивается набор команд этого языка. Дело в том, что нужно уметь управлять самим процессом трансляции программы. Полный список директив приведён в описании языка, а здесь будут подробно рассмотрены некоторые из них.

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

Директива equ позволяет назначать имена переменных и констант. Теперь можно назначить переменной адрес в одном месте и пользоваться идентификатором переменной во всей программе. Правда за использование идентификатора именно в качестве переменной отвечает программист, тем не менее, если в процессе написания программы потребуется изменить адрес переменной, это можно сделать в одном месте программы, а не просматривать всю программу, разбираясь является ли в данной конкретной команде число 10 константой, адресом ячейки ли количеством повторов в цикле. Все необходимые изменения сделает сам транслятор. Пример назначения переменных приведён на примере, показанном в листинге 1.

Для чего используется equ. Смотреть фото Для чего используется equ. Смотреть картинку Для чего используется equ. Картинка про Для чего используется equ. Фото Для чего используется equ
Листинг 1. Назначение переменных при помощи директивы equ

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

При помощи директивы equ можно назначать не только переменные, но и константы. Как уже говорилось ранее, будет ли использован идентификатор как переменная или как константа зависит от команд и видов адресации, которые использует программист.

Один раз назначенный идентификатор уже не может быть изменён в дальнейшем и при повторной попытке назначения точно такого же имени идентификатора будет выдано сообщение об ошибке.

Директива set. Если требуется в различных местах программы назначать одному и тому же идентификатору различные числа, то нужно пользоваться директивой set. Использование этой директивы полностью идентично использованию директивы equ, поэтому иллюстрироваться примером не будет.

Константы, назначаемые директивой equ, могут быть использованы только в одной команде. Достаточно часто требуется работа с таблицей констант, такой как таблица перекодировки, таблицы элементарных функций или синдромы помехоустойчивых кодов. Такие константы используются не на этапе трансляции, а хранятся в памяти программ микроконтроллера. Для занесения констант в память программ микроконтроллера используются директивы db и dw.

Директива db используется для занесения в память программ однобайтных констант. Пример использования директивы db приведён в листинге 2.

Для чего используется equ. Смотреть фото Для чего используется equ. Смотреть картинку Для чего используется equ. Картинка про Для чего используется equ. Фото Для чего используется equ
Листинг 2. Назначение констант при помощи директивы db

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

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

Эта же директива позволяет легко записывать надписи, которые в дальнейшем потребуется высвечивать на встроенном дисплее или экране дисплея универсального компьютера, подключённого к разрабатываемому устройству через какой либо интерфейс. Пример использования директивы db для занесения надписей в память программ микроконтроллера приведён на рисунке 3.

Для чего используется equ. Смотреть фото Для чего используется equ. Смотреть картинку Для чего используется equ. Картинка про Для чего используется equ. Фото Для чего используется equ

Рисунок 3. Применение директивы db для занесения надписей в память программ микроконтроллера.

Директива dw позволяет заносить в память программ двухбайтные числа. В этой директиве, как и в директиве db числа можно заносить через запятую. Пример листинга фрагмента программы приведён на рисунке 4.

Для чего используется equ. Смотреть фото Для чего используется equ. Смотреть картинку Для чего используется equ. Картинка про Для чего используется equ. Фото Для чего используется equ

Рисунок 4. Применение директивы dw.

На рисунке 4 приведён фрагмент листинга программы для того, чтобы можно было проследить какие байты заносятся в память программ микроконтроллера. В самой правой колонке листинга приведены адреса в которые будут занесены числа, являющиеся операндами директивы dw. В следующей колонке приведены двухбайтовые числа, которые будут заноситься в память программ микроконтроллера. Обратите внимание, что несмотря на то, что первые два операнда состоят только из одной цифры, в память микроконтроллера заносятся четыре шестнадцатеричных цифры (двухбайтовое число).

При трансляции исходного текста программ предполагается, что первая команда расположена по нулевому адресу. Адрес последующих команд зависит от длины и количества предыдущих команд. Пример листинга начального участка программы приведён на рисунке 5.

Для чего используется equ. Смотреть фото Для чего используется equ. Смотреть картинку Для чего используется equ. Картинка про Для чего используется equ. Фото Для чего используется equ

Рисунок 5. Пример листинга программы.

Иногда требуется расположить команду по определённому адресу. Наиболее часто это требуется при использовании прерываний, когда первая команда программы-обработчика прерываний должна быть расположена точно на векторе прерывания. Это можно сделать используя команду nop для заполнения промежутков между векторами прерывания, но лучше воспользоваться директивой ORG.

Директива org предназначена для записи в счетчик адреса сегмента значения своего операнда. То есть при помощи этой директивы можно разместить команду (или данные) в памяти микроконтроллера по любому адресу. Пример использования директивы ORG для размещения подпрограмм обработки прерываний на векторах прерываний показан на рисунке 6.

Для чего используется equ. Смотреть фото Для чего используется equ. Смотреть картинку Для чего используется equ. Картинка про Для чего используется equ. Фото Для чего используется equ

Рисунок 6. Пример использования директивы ORG.

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

Директива using При использовании прерываний критичным является время, занимаемое программой, обработчиком прерываний. Это время можно значительно сократить, выделив для обработки прерываний отдельный банк регистров. Выделить отдельный банк регистров можно при помощи директивы USING. Номер банка используемых регистров указывается в директиве в качестве операнда. Пример использования директивы USING для подпрограммы обслуживания прерываний от таймера 0 приведён на рисунке 7.

Для чего используется equ. Смотреть фото Для чего используется equ. Смотреть картинку Для чего используется equ. Картинка про Для чего используется equ. Фото Для чего используется equ

Рисунок 7. Пример использования директивы USING.

Директива CALL. В системе команд микроконтроллера MCS-51 используется три команды безусловного перехода. Выбор конкретной команды зависит от расположения ее в памяти программ, однако программист обычно этого не знает. В результате во избежание ошибок приходится использовать самую длинную команду LJMP. Это приводит к более длинным программам и к дополнительной нагрузке на редактор связей. Транслятор сам может подобрать наилучший вариант команды безусловного перехода. Для этого вместо команды микроконтроллера следует использовать директиву call.

Остальные директивы предназначены для управления сегментами, и поэтому будут рассмотрены позднее при обсуждении работы с многомодульными программами.

Понравился материал? Поделись с друзьями!

Вместе со статьей «Директивы языка программирования ASM-51» читают:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *