Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Программный счетчик ассемблера.
Для определения относительной позиции в сегменте данных или кода ассемблер использует адресный счетчик. Рассмотрим сегмент данных со следующими определениями:
Начальное значение адресного счетчика - 00. Так как поле flda занимает два байта, то для получения адреса следующего элемента адресный счетчик увеличивается до значения 02. Поле fldb занимает один байт, значит значение адресного счетчика увеличивается до значения 03 и т.д.. Для изменения значения адресного счетчика и соответственно адреса следующего определяемого элемента используется директива org.
Формат директивы: ORG выражение Выражение может быть абсолютным числом, но не символическим именем, и должно формировать двухбайтовое абсолютное число.
(слайд №8) Рассмотрим следующие элементы данных, определенные непосредственно после поля fldd:
Первая директива org возвращает адресный счетчик в нулевое значение. Поля fldx, fldy и fldz определяют те же области памяти, что и поля flda, fldb и fldc:
Смещение: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | | | | | flda fldb fldc fldd | | | fldx fldy fldz Операнд, содержащий символ доллара ($), как во второй директиве org, имеет текущее значение адресного счетчика. Таким образом, операнд $+5 устанавливает адресный счетчик равным 04 + 5 = 09, что представляет собой то же значение, что и после определения поля fldd. Метка fldc указывает на поле длиной в одно слово, находящееся по смещению 03, а метка fldz указывает на однобайтовое поле по тому же смещению: mov ax,floc ;Одно слово mov al,fldz ;oдин байт Директиву org можно использовать для переопределения областей памяти. При этом следует правильно устанавливать адресный счетчик и учитывать все переопределяемые адреса памяти. Кроме того, новые переменные не должны определять константы, так как при этом будут перекрыты константы, определенные ранее. Директиву org нельзя использовать внутри определения struct.
(слайд №9)
Работа с макросами.
Для каждой закодированной команды ассемблер генерирует одну команду на машинном языке. Но для каждого закодированного оператора компиляторного языка pascal или c генерируется один или более (чаще много) команд машинного языка. В этом отношении можно считать, что компиляторный язык состоит из макрооператоров. Использование макрокоманд позволяет:
Примерами макрокоманд могут быть операции ввода-вывода, связанные с инициализацией регистров и выполнения прерываний преобразования ASCII и двоичного форматов данных, арифметические операции над длинными полями, обработка строковых данных, деление с помощью вычитания. Таким образом, макрос – это символьное имя, заменяемое при обработке препроцессором (компьютерная программа, принимающая данные на входе и выдающая данные, предназначенные для входа другой программы (например, компилятора)) на последовательность программных инструкций.
(слайд №10) Простое макроопределение.
Макрокоманда – имя макроса, указываемое в коде программы на языке ассемблер и предназначенная для вызова соответствующего программный алгоритм действий с фактическими параметрами. Макроопределение – это программный алгоритм действий макроса, описанный с использованием формальных параметров. Макрорасширение – это тело макроопределения, сгенерированное компилятором со значениями фактических параметров и подставленное в сегмент кода вместо одноименной макрокоманды. Макроопределение должно находиться до определения сегмента. Директива macro указывает ассемблеру, что следующие команды до директивы endm являются частью макроопределения. Директива endm завершает макроопределение. Команды между директивами macro и endm составляют тело макроопределения. Имена, на которые имеются ссылки в макроопределении должны быть определены где-нибудь в другом месте программы. Описанная макрокоманда может использоваться в кодовом сегменте там, где необходимо. Когда ассемблер анализирует команду <имя_макроса>, он сначала просматривает таблицу мнемокодов и, не обнаружив там соответствующего элемента, проверяет макрокоманды. Так как программа содержит определение макрокоманды с нужным именем, по которому она вызывается в сегменте кода, ассемблер подставляет тело макроопределения, генерируя необходимые команды - макрорасширение.
Программа может использовать макрокоманду любое число раз, и каждый раз для таких макрокоманд ассемблер генерирует одинаковые макрорасширения.
Пример1: init1 macro assume cs:cseg,ds:dseg,ss:stack;es:dseg push ds sub ax,ax push ax mov ax,dseg mov ds,ax mov es,ax endm
(слайд №11)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2022-09-03; просмотров: 63; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.139.87 (0.01 с.) |