Примеры использования директивы org avr ассемблера. Основные директивы ассемблера. DB - определить байт(ы) в программной памяти или в EEPROM

Примеры использования директивы org avr ассемблера. Основные директивы ассемблера. DB - определить байт(ы) в программной памяти или в EEPROM

05.04.2019

Очень часто в современной сети можно встретить сленговое выражение «линк». Использоваться оно может в любом контексте, например, «дай линк» или «линк битый». О том, что такое линк и пойдет речь в статье.

Происхождение слова и его определение

Слово произошло от английского link — "связывать", "соединять". В самом простом случае оно означает обыкновенную ссылку, которая содержит в себе адрес сайта или раздела веб-страницы. Более точное определение для линка в Интернете — гиперссылка.

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

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

Из чего состоит линк?

В данном примере первая часть — это протокол доступа. Здесь используется http, что означает метод передачи гипертекста. Этот протокол является основным для обмена данными между браузером и сервером. Его расширение - https - означает, что соединение по нему защищено шифрованием.

Для передачи данных на сервер может использоваться и тип Он именно для этого и был создан. Применяется он, в основном, для заливки файлов на удалённый сервер. Ссылка может выглядеть примерно так: ftp://www.site.ru/catalog/index.html.

После ftp:// идёт имя сайта. Например, mail.ru, google.ru. Далее следует раздел сайта, который, по сути, может представлять реально существующий каталог на сервере. Последним пунктом может быть конкретный адрес страницы. В данном случае — index.html. Именно на ней и размещён весь необходимый код для отображения, который понятен браузеру. На многих сайтах ссылки могут генерироваться автоматически системами управления контентом. Поэтому последняя часть может не отображаться.

Что такое линк на одном сайте

Линки или ссылки могут быть внутренними. К примеру, для навигации по разделам используются именно они. Как правило, такой линк относительный и может не иметь части с протоколом и именем. Например: /catalog/index.html. Это означает, что браузеру нужно искать файл index.html в каталоге catalog, корневой папки сайта.

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

Что такое линки почты?

Почтовый линк создан таким образом, чтобы при нажатии по нему, автоматически открывалась специальная программа для работы с сообщениями. После её запуска, адрес, указанный в ссылке, сам подставится в поле «кому». Выглядит она, в большинстве случаев так: [email protected]. То есть, по сути просто адрес электронной почты. Преобразование линка, сервисы производят автоматически, добавляя к коду слово «mailto:».

Или же это можно сделать вручную в html странице: <a href="mailto:[email protected]">. Здесь можно добавить любую фразуa >. Таким образом, получится, что под выражением будет размещена почтовая ссылка. Это сделано скорей для эстетики. Например можно написать на свое сайте «Отправьте мне письмо» и под этот текст вставить свой адрес электронной почты.

Заключение

В статье было рассмотрено, что такое линк и приведено несколько его примеров. Однако нередко линк используется и в других смежных с Интернетом сферах. Его также могут задействовать сетевики, придавая ему значение существования соединения. К примеру: «линк есть», что значит, подключение доступно.

Поэтому, это, скорее, жаргонное слово, и более уместно использовать вместо него термин «ссылка».

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

Когда появляется неизвестный стук в задней или в передней части автомобиля при пересечении неровностей на дорожном покрытии, то можно, однозначно, говорить о наличии неисправностей в стойках стабилизаторов. Автомобилисты дали стойкам другое название: «косточки», «линьки» и «яйца». Несвоевременная замена стоек стабилизатора приведет, в конечном итоге, к превышению допустимого значения крена транспортного средства, плохого сцепления колес с дорожным полотном, увеличивая тормозной путь до трех метров, при скорости восемьдесят километров в час, а также отсутствие полного контроля над управляемостью автомашиной и, как правило, опрокидывания автомобиля на очередном повороте.

Стабильную плавность хода в автомобиле Тайота обеспечивает независимая ходовая часть, состоящая из установленных в передней и задней части стоек стабилизаторов семейства авто « Tayota Corolla». Стабильность работы подвесок требует немалого финансирования, ибо через сорок тысяч пробега необходимо будет менять втулки передних стабилизаторов. Задние стойки стабилизаторов обеспечивают пробег шестьдесят тысяч километров пробега.

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

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

Замена линьки в автомобиле.

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

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

Просматривая историческую справку о стабильной работе компании «Toyota» на международном рынке, узнаем, что уверенное восхождение на олимп автомобильной славы компании следует отсчитывать с 1933 года. Именно в этом году на предприятии «Toyoda Automatic Loom Works», специализирующееся в сфере текстильной промышленности, произошло образование крупного автомобильного департамента. Будущего гиганта автомобильной промышленности.

Основателем компании считается сын владельца компании Киитиро Тойода, который сделал, чтобы знаменитый бренд «Тайота» лидировал в списке автомобильных компаний на международном рынке. Надо отметить, насколько было динамичное развитие автомобильной компании. Уже в 1935 появился первенец «Model A1». Серийное производство автомобилей было запущено в 1936 году. Первая партия насчитывала всего четыре автомобиля. Спустя год, закончилось окончательное преобразование автомобильного департамента в отдельную гильдию, получившую название Тойота Моторз Co Ltd.

Война внесла свои коррективы в развитие компании, но по окончаниии которой возобновилась деятельность компании «Toyota». Так, наступление 1947 года было ознаменовано выпуском первой послевоенной модели под названием «Toyota Model SA». Тяжело переживался экономический кризис начала пятидесятых годов, в конечном итоге, компанией он был преодолен с минимальными потерями для своей экономической деятельности.

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

В эти годы компания осуществляет знаменитую на весь мир модель «Тайота Каролла». С той поры эта модель претерпела не одну модернизацию.

В семидесятые годы увеличилось строительство новых заводов в различных странах мира. Появляются новые модели, такие, как «Toyota Sprinter», «Toyota Tercel», «Toyota Carina» и Toyota Celica. Модель автомобиля «Toyota Tercel» стала японским первенцем, имеющим передний привод. Количество выпущенных автомобилей приближалось к десяти миллионам. Компани удалось усовершенствовать выхлопную систему авто, тем самым дав толчок все мировым производителям к совершенствованию своих автомобильных моделей, защищая окружающую природу. Началась новая эра создания высокотехнологичных моделей авто.

С наступлением двадцать первого столетия компания осуществляет продажу автомобилей под своим брендом по всему миру до 50000 экземпляров автомобилей модели «Приус». В 2001 году были выпущены первые автомобили модели «RAV4».

Сегодня компания «Тойота» сохраняет свои лидирующие позиции в автомобилестроении. На всех заводах в течение года осуществляется выпуск пяти миллионов автомобилей.

Метки
Метка в языке ассемблера может содержать следующие символы:


Буквы: от A до Z и от a до z
Цифры: от 0 до 9
Спецсимволы: знак вопроса (?)
точка (.) (только первый символ)
знак "коммерческое эт" (@)
подчеркивание (_)
доллар ($)

Первым символом в метке должна быть буква или спецсимвол. Цифра не может быть первым символом метки, а символы $ и? иногда имеют специальные значения и обычно не рекомендуются к использованию. Большие и маленькие буквы по умолчанию не различаются, но различие можно включить, задав ту или иную опцию в командной строке ассемблера. Максимальная длина метки - 31 символ. Примеры меток: COUNT, PAGE25, $E10. Рекомендуется использовать описательные и смысловые метки. Имена регистров, например, AX, DI или AL являются зарезервированными и используются только для указания соответствующих регистров.
Если метка располагается перед командой процессора, сразу после нее всегда ставится символ «:» (двоеточие), который указывает ассемблеру, что надо создать переменную с этим именем, содержащую адрес текущей команды:
some_loop:

loopne some_loop
Когда метка стоит перед директивой ассемблера, она обычно оказывается одним из операндов этой директивы и двоеточие не ставится:

codesg segment
lodsw ; cчитать слово из строки,
cmp ax,7 ; если это 7 - выйти из цикла
codesg ends
Рассмотрим директивы, работающие напрямую с метками и их значениями: LABEL, EQU и =.

Директива LABEL

Метка label тип Директива LABEL определяет метку и задает ее тип. Тип может быть одним из: BYTE (байт), WORD (слово), DWORD (двойное слово), FWORD (6 байт), QWORD (учетверенное слово), TBYTE (10 байт), NEAR (ближняя метка), FAR (дальняя метка). Метка получает значение, равное адресу следующей команды или следующих данных, и тип, указанный явно. В зависимости от типа команда
mov метка,0 запишет в память байт (слово, двойное слово и т.д.), заполненный нулями, а команда
call метка выполнит ближний или дальний вызов подпрограммы.

С помощью директивы LABEL удобно организовывать доступ к одним и тем же данным, как к байтам, так и к словам, определив перед данными две метки с разными типами.

Директива EQU

Директива EQU присваивает метке значение, которое определяется как результат целочисленного выражения в правой части. Результатом этого выражения может быть целое число, адрес или любая строка символов:
метка equ выражение

truth equ 1
message1 equ "Try again$"
var2 equ 4
cmp ax,truth ; cmp ax,1
db message1 ; db "Try again$"
mov ax,var2 ; mov ax, 4 Директива EQU чаще всего используется с целью введения параметров, общих для всей программы, аналогично команде #define препроцессора языка С.

Директива =

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

Каждый ассемблер предлагает целый набор специальных предопределенных меток — это может быть текущая дата (@date или??date), тип процессора (@cpu) или имя того или иного сегмента программы, но единственная предопределенная метка, поддерживаемая всеми рассматриваемыми нами ассемблерами, — $ . Она всегда соответствует текущему адресу. Например, команда

Jmp $

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

Чтобы получше уяснить все это дело я написал небольшую программку. Все тот же “Hello World”, но на новый лад:) Текст ниже:

Програ ассемблируется TASM и MASM, но EXE файлик, ассемблированный MASM на один байт больше. Замечаем что команду mov dx,offset msg, заменили на команду lea dx,msgb. LEA помещает адрес смещения указанных данных в DX, т.е. делает то же самое что и команда mov с offset. Рекомендую это посмотреть под отладчиком.



Смотрим внимательно листинги ассемблирования и находим разницу.



Интересно, что TASM ассемблировал команду LEA в данном случае как команду MOV (код операции BA), а MASM ассемблировал команду LEA в другой код операции - 8D16, что и увеличило размер программы на 1 байт. Почему он решил так сделать пока не знаю, но интересно было бы выяснить.

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

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

Список директив приведён в следующей таблице.

Директива Описание
BYTE Зарезервировать байты в ОЗУ
CSEG Программный сегмент
DB Определить байты во флэш или EEPROM
DEF Назначить регистру символическое имя
DEVICE Определить устройство для которого компилируется программа
DSEG Сегмент данных
DW Определить слова во флэш или EEPROM
ENDM, ENDMACRO Конец макроса
EQU Установить постоянное выражение
ESEG Сегмент EEPROM
EXIT Выйти из файла
INCLUDE Вложить другой файл
LIST Включить генерацию листинга
LISTMAC Включить разворачивание макросов в листинге
MACRO Начало макроса
NOLIST Выключить генерацию листинга
ORG Установить положение в сегменте
SET Установить переменный символический эквивалент выражения

BYTE - зарезервировать байты в ОЗУ. Директива BYTE резервирует байты в ОЗУ. В случае если вы хотите иметь возможность ссылаться на выделœенную область памяти, то директива BYTE должна быть предварена меткой. Директива принимает один обязательный параметр, который указывает количество выделяемых байт. Эта директива может использоваться только в сегменте данных(смотреть директивы CSEG и DSEG). Выделœенные байты не инициализируются.

Синтаксис:

МЕТКА: .BYTE выражение

DSEG var1: .BYTE 1 ; резервирует 1 байт для var1

table: .BYTE tab_size ; резервирует tab_size байт

Ldi r30,low(var1) ; Загружает младший байт регистра Z

Ldi r31,high(var1) ; Загружает старший байт регистра Z

Ld r1,Z ; Загружает var1 в регистр 1

DB - определить байты во флэш или EEPROM. Директива DB резервирует крайне важно е количество байт в памяти программ или в EEPROM. В случае если вы хотите иметь возможность ссылаться на выделœенную область памяти, то директива DB должна быть предварена меткой. Директива DB должна иметь хотя бы один параметр.
Размещено на реф.рф

Параметры, передаваемые директиве - это последовательность выражений разделённых запятыми. Каждое выражение должно быть или числом в диапазоне (-128..255), или в результате вычисления должно давать результат в данном же диапазоне, в противном случае число усекается до байта͵ причём БЕЗ выдачи предупреждений.

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

Синтаксис:

МЕТКА: .DB список_выражений

CSEG consts: .DB 0, 255, 0b01010101, -128, 0xaa

const2: .DB 1,2,3

DW - определить слова во флэш или EEPROM. Директива DW резервирует крайне важно е количество слов в памяти программ или в EEPROM. В случае если вы хотите иметь возможность ссылаться на выделœенную область памяти, то директива DW должна быть предварена меткой. Директива DW должна иметь хотя бы один параметр.
Размещено на реф.рф
Данная директива должна быть размещена только в сегменте программ (CSEG) или в сегменте EEPROM (ESEG).

Параметры, передаваемые директиве, - это последовательность выражений разделённых запятыми. Каждое выражение должно быть или числом в диапазоне (-32768..65535), или в результате вычисления должно давать результат в данном же диапазоне, в противном случае число усекается до слова, причем БЕЗ выдачи предупреждений.

Синтаксис:

МЕТКА: .DW expressionlist

varlist:═ .DW 0, 0xffff, 0b1001110001010101, -32768, 65535

eevarlst: .DW 0,0xffff,10

· Сегменты

DSEG - сегмент данных. Директива DSEG определяет начало сегмента данных. Исходный файл может состоять из нескольких сегментов данных, которые объединяются в один сегмент при компиляции. Сегмент данных обычно состоит только из директив BYTE и меток. Сегменты данных имеют свои собственные побайтные счётчики положения. Директива ORG должна быть использована для размещения переменных в крайне важно м месте ОЗУ. Директива не имеет параметров.

Синтаксис:

ldi r30,low(var1) ; Загрузить младший байт регистра Z

ldi r31,high(var1) ; Загрузить старший байт регистра Z

ld r1,Z ; Загрузить var1 в регистр r1

CSEG - программный сегмент. Директива CSEG определяет начало программного сегмента. Исходный файл может состоять из нескольких программных сегментов, которые объединяются в один программный сегмент при компиляции. Программный сегмент является сегментом по умолчанию. Программные сегменты имеют свои собственные счётчики положения, которые считают не побайтно, а по словно. Директива ORG должна быть использована для размещения кода и констант в крайне важно м месте сегмента. Директива CSEG не имеет параметров.

Синтаксис:

DSEG ; Начало сегмента данных

vartab: .BYTE 4 ; Резервирует 4 байта в ОЗУ

CSEG ; Начало кодового сегмента

const: .DW 2 ; Разместить константу 0x0002 в памяти программ

mov r1,r0 ; Выполнить действия

ESEG - сегмент EEPROM. Директива ESEG определяет начало сегмента EEPROM. Исходный файл может состоять из нескольких сегментов EEPROM, которые объединяются в один сегмент при компиляции. Сегмент EEPROM обычно состоит только из директив DB, DW и меток. Сегменты EEPROM имеют свои собственные побайтные счётчики положения. Директива ORG должна быть использована для размещения переменных в крайне важно м месте EEPROM. Директива не имеет параметров.

Синтаксис:

DSEG ; Начало сегмента данных

var1: .BYTE 1 ; зарезервировать 1 байт для var1

table: .BYTE tab_size ; зарезервировать tab_size байт.

eevar1: .DW 0xffff ; проинициализировать 1 слово в EEPROM

ORG - Установить положение в сегменте. Директива ORG устанавливает счётчик положения равным заданной величинœе, которая передаётся как параметр.
Размещено на реф.рф
Важно заметить, что для сегмента данных она устанавливает счётчик положения в SRAM (ОЗУ), для сегмента программ это программный счётчик, а для сегмента EEPROM это положение в EEPROM. В случае если директиве предшествует метка (в той же строке) то метка размещается по адресу указанному в параметре директивы. Перед началом компиляции программный счётчик и счётчик EEPROM равны нулю, а счётчик ОЗУ равен 32 (поскольку адреса 0-31 заняты регистрами). Обратите внимание что для ОЗУ и EEPROM используются побайтные счётчики а для программного сегмента - пословный.

Синтаксис:

ORG выражение

DSEG ; Начало сегмента данных

ORG 0x37 ; Установить адрес SRAM равным 0x37

variable: .BYTE 1 ; Зарезервировать байт по адресу 0x37H

CSEG .ORG 0x10 ; Установить программный счётчик равным 0x10

mov r0,r1 ; Данная команда будет размещена по адресу 0x10

Синтаксис:

· Макросы

MACRO - начало макроса. С директивы MACRO начинается определœение макроса. В качестве параметра директиве передаётся имя макроса. При встрече имени макроса позднее в тексте программы компилятор заменяет это имя на тело макроса. Макрос может иметь до 10 параметров, к которым в его телœе обращаются через @0-@9. При вызове параметры перечисляются через запятые. Определœение макроса заканчивается директивой ENDMACRO.

По умолчанию в листинг включается только вызов макроса, для разворачивания макроса крайне важно использовать директиву LISTMAC. Макрос в листинге показывается знаком +.

Синтаксис:

MACRO макроимя

MACRO SUBI16 ; Начало макроопределœения

subi @1,low(@0) ; Вычесть младший байт параметра 0 из параметра 1

sbci @2,high(@0) ; Вычесть старший байт параметра 0 из параметра 2

CSEG ; Начало программного сегмента

SUBI16 0x1234,r16,r17 ; Вычесть 0x1234 из пары r17:r16

ENDMACRO - конец макроса. Директива определяет конец макроопределœения, и не принимает никаких параметров. Для информации по определœению макросов смотрите директиву MACRO.

Синтаксис:

MACRO SUBI16 ; Начало определœения макроса

subi r16,low(@0) ; Вычесть младший байт первого параметра

sbci r17,high(@0) ; Вычесть старший байт первого параметра

LISTMAC - включить разворачивание макросов в листинге. После директивы LISTMAC компилятор будет показывать в листинге содержимое макроса. По умолчанию в листинге показывается только вызов макроса и передаваемые параметры.

Синтаксис:

MACRO MACX ; Определœение макроса

add r0,@0 ; Тело макроса

ENDMACRO ; Конец макроопределœения

LISTMAC ; Включить разворачивание макросов

MACX r2,r1 ; Вызов макроса (в листинге будет показано тело макроса)

· Выражения

EQU - установить постоянное выражение. Директива EQU присваивает метке значение. Эта метка может позднее использоваться в выражениях. Метка которой присвоено значение данной директивой не должна быть переназначена и её значение не должна быть изменено.

Синтаксис:

EQU метка = выражение

EQU io_offset = 0x23

EQU porta = io_offset + 2

CSEG ; Начало сегмента данных

clr r2 ; Очистить регистр r2

SET - Установить переменный символический эквивалент выражения. Директива SET присваивает имени неĸᴏᴛᴏᴩᴏᴇ значение. Это имя позднее должна быть использовано в выражениях. Причем в отличие от директивы EQU значение имени должна быть изменено другой директивой SET.

Синтаксис:

SET имя = выражение

SET io_offset = 0x23

SET porta = io_offset + 2

CSE ; Начало кодового сегмента

clr r2 ; Очистить регистр 2

out porta,r2 ; Записать в порт A

DEF - назначить регистру символическое имя. Директива DEF позволяет ссылаться на регистр через неĸᴏᴛᴏᴩᴏᴇ символическое имя. Назначенное имя может использоваться во всœей нижеследующей части программы для обращений к данному регистру. Регистр может иметь несколько различных имен. Символическое имя должна быть переназначено позднее в программе.

Синтаксис:

DEF Символическое_имя = Регистр

ldi temp,0xf0 ; Загрузить 0xf0 в регистр temp (R16)

eor temp,ior ; Регистры temp и ior складываются по исключающему или

DEVICE - определить устройство. Директива DEVICE позволяет указать, для какого устройства компилируется программа. При использовании данной директивы компилятор выдаст предупреждение, в случае если будет найдена инструкция, которую не поддерживает данный микроконтроллер.
Размещено на реф.рф
Также будет выдано предупреждение, в случае если программный сегмент, либо сегмент EEPROM превысят размер, допускаемый устройством. В случае если же директива не используется, то всœе инструкции считаются допустимыми, и отсутствуют ограничения на размер сегментов.

Синтаксис:

DEVICE AT90S1200 | AT90S2313 | AT90S2323 | AT90S2333 | AT90S2343 | AT90S4414 | AT90S4433 | AT90S4434 | AT90S8515 | AT90S8534 | AT90S8535 | ATtiny11 | ATtiny12 | ATtiny22 | ATmega603 | ATmega103

DEVICE AT90S1200 ; Используется AT90S1200

push r30 ; инструкция вызовет предупреждение, AT90S1200 её не имеет

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

Синтаксис:

EXIT ; Выйти из данного файла

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

Синтаксис:

INCLUDE "имя_файла"

; файл iodefs.asm:

EQU sreg = 0x3f ; Регистр статуса

EQU sphigh = 0x3e ; Старший байт указателя стека

EQU splow = 0x3d ; Младший байт указателя стека

; файл incdemo.asm

INCLUDE iodefs.asm ; Вложить определœения портов

· Листинги

LIST - включить генерацию листинга. Директива LIST указывает компилятору на крайне важно сть создания листинга. Листинг представляет из себя комбинацию ассемблерного кода, адресов и кодов операций. По умолчанию генерация листинга включена, однако данная директива используется совместно с директивой NOLIST для получения листингов отдельных частей исходных файлов.

Синтаксис: .LIST

NOLIST - выключить генерацию листинга. Директива NOLIST указывает компилятору на крайне важно сть прекращения генерации листинга. Листинг представляет из себя комбинацию ассемблерного кода, адресов и кодов операций. По умолчанию генерация листинга включена, однако должна быть отключена данной директивой. Кроме того данная директива должна быть использована совместно с директивой LIST для получения листингов отдельных частей исходных файлов

Синтаксис: .NOLIST

Пример: .NOLIST ; Отключить генерацию листинга

INCLUDE "macro.inc" ; Вложенные файлы не будут

INCLUDE "const.def" ; отображены в листинге

LIST ; Включить генерацию листинга

Директивы ассемблера - понятие и виды. Классификация и особенности категории "Директивы ассемблера" 2017, 2018.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows