Снос зданий:
ecosnos.ru
Главная  Микроустройства: номенклатура изделий электронной промышленности 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 [ 63 ] 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

6.4. Символы спецификаций

Тип операнда

М

R S X

Аккумуляторные регистры АХ или AL Код - меточное выражение

Данные - число используемое как непосредственное значение

Эффективный адрес-или М (адрес памяти) или В (регистр)

Адрес памяти - может быть переменная или регистровое выражение в скобках Только основной регистр регистр сегмента Прямая ссылка к памяти

6.5. Модифицирующие символы

Переменные

Числа

Тип

Значение

От -256 до 255

Слово

Другие значения

Двойное слово

Байт со знаком

Допустимые форматы для указания диапазона следующие;

(число Ь) (число Ь, регистр)

(регистр) (регистр, число Ь)

(число Ь, число Ь) (регистр, регистр)

Число b - это 8-битовое число, но не адрес. Пример:

Code Macro IN dst: Aw, port: Rw (DX) Code Macro ESC opcode: Db (0,63), adds: Eb

В приведенных заголовках определений кодовых макро указано: в первом, что входной порт идентифицируется DX регистром; во втором, что opcode - это непосредственные данные в диапазоне от О до 63. Определение кодового макро заверщается директивой: End М. Тело кодового макро может содержать только следующие директивы:

SEGFIX RELB DW NOSEGFIX RELW DD MODRM DB DBIT

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



Директива SEGFIX (формальное имя) - указывает ассемблеру, что необходимо выполнить проверку необходимости генерации префиксного байта в инструкции для обеспечения доступа к требуемому адресу памяти..

Директива NOSEGFIX segreg (формальное имя), где segreg сегментные регистры ES, CS, SS или DS. Директива обеспечивает контроль ошибочного -использования сегментных регистров для адресации к операндам, указанным в вызове макрокоманды.

Директива MODRM, (формальное имя), (формальное имя) или MODRM NUMBER? (формальное имя) - обеспечивает генерацию битов типа адресации. Возможно получение до 32 возможных значений: 8 регистровых и 24 индексных типа.

Директивы RELB (формальное имя) и RELW (формальное имя) позволяют вычислить смещение между инструкцией и меткой, рассматриваемой в качестве операнда.

Директивы DS (формальное имя) / NUMBERB, Dw (формальное имя) / NUMBERW, DD (формальное имя) определяют однобайтовые, двухбайтовые и четырехбайтовые значения, соответственно; NUMBERB и NUMBERW указывают однобайтовые и двухбайтовые значения.

Пример:

Code Macro XOR dst: Ew, src: Db SEGFIX dst

DB 81H

MODRM 6, dst

DW src

End M

В данном примере определена инструкция XOR, которая содержит два операнда. Первым операндом может быть ячейка памяти или регистр, вторым операндом является непосредственная константа в пределах одного байта. Код инструкции определяетси константой 81 Н. Генерируемая мода адресации для первого операнда 110.

Директива DBIT(onHcaHHe поля) [(описание поля)] определяет значения отдельных разрядов в пределах генерируемой инструкции.

Пример:

Code Macro DEC dst: Rw DBIT 5 (9 H), 3 (dst (0)) End M

Директива DBIT указывает ассемблеру, что первые 5 бит инструкции имеют значение 9Н. Если оставшиеся биты равны О, то 16-ричное значение байта - 48Н. Если в программе обрабатывается инструкция DEC DX и DX имеет значение 2Н, то окончательное значение генерируемой инструкции для выполнения: 48Н -- 2Н = = 4АН.

Макропроцессоры, независимые от входного языка

В настоящее время широкое распространение получают макропроцессоры общего назначения, неориентированные на какой-то конкретный язык программирования [24, 53]. Сферами применения таких макропроцессоров являются: расширение возможностей языка, для которого макропроцессор является препроцессором; разработка и создание инструментального изыка, например, разра-



ботка языка WICSP [21]; редактирование текстовой информации; генерация н настройка программного обеспечения.

Рассмотрим простой макропроцессор, разработанный для семейства микроэвм Электроника-60 [40]. Прототипом реализованного на микроэвм макропроцессора является известный макропроцессор Стречн GPM [21]. Макровызов выглядит следующим образом: [имя-макрокоманды, список-аргументов]. Аргументы в списке разделяются запятыми, например,

[RCVE, 305,1] [LINK1.

Вторая макрокоманда в данном примере не содержит аргументов. Вызовы макрокоманд могут встречаться как в аргументах, так и в имени макрокоманды.

Формальные параметры в теле макрокоманды обозначаются Сймволом\, за которым располагается номер параметра. Например, строка АВ\1С\2АВ содержит два формальных параметра \1 и \2.

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

1. Имя макрокоманды и аргументы вычисляются в последовательности слева направо. Этот процесс включает расширение любых макровызовов внутри параметров и имени.

2. Ищется вычисленное имя макрокоманды в списке пар имен-значений. Поиск выполняется в обратном порядке, т. е. от последнего включенного в список имени к первому (первым в списке является имя системной макрокоманды DEF). Если имя не найдено, то возникает ошибочная ситуация.

3. Символическая строка, представляющая значение, которое соответствует данному найденному имени, просматривается так же, как и исходная (т. е. все вызовы внутри также .вычисляются). Если встречены символы\г (г = О, 1, 2..,), то они будут заменены копиями соответствующих фактических параметров, которые к этому моменту уже вычислены. Если г больше числа действительных параметров, то возникает ошибочная ситуация. Во время подстановки аргументы просто копируются без вычисления, даже если внутри расположены макровызовы.

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

5. Сканирование входного потока продолжается с той литеры, которая стоит после символа J макровызова.

Для занесения новых пар имен-значений в список используется системное имя DEF и скобки (и) для того, чтобы избежать подстановки аргументов в момент обработки макрокоманды DEF, Рассмотрим пример:

. [DEF, А. {А\1А)] [DEF, В. (В[А, X\1XJB>] [DEF, АРА, (Р\1\1Р>] .

В примере в список пар имен-значений будут занесены следующие имена и значения:

Имя Значение А А\1А

В В [А, Х,\1.Х]В

АРА Р\1\1Р



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 [ 63 ] 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95