<<
>>

Операнды

Операнды — это объекты, над которыми или при помощи которых выполняются действия, задаваемые инструкциями или директивами. Машинные команды мо- гут либо совсем не иметь операндов, либо иметь один или два операнда.
Большин- ство команд требует двух операндов, один из которых является источником, а дру- гой — приемником (операндом назначения). В двухоперандной машинной команде возможны следующие сочетания операндов: в регистр — регистр; * регистр — память; в память — регистр;
*
непосредственный операнд
регистр;

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

Непосредственный операнд может быть только источ- ником. Для приведенных ранее правил сочетания типов операндов есть исключения, которые касаются: » команд работы с цепочками, которые могут перемещать данные из памяти в память; . ii команд работы со стеком, которые могут переносить данные из памяти в стек, также находящийся в памяти; * команд типа умножения, которые, кроме операнда, указанного в команде, неяв- но используют еще и второй операнд. Операндами могут быть числа, регистры, ячейки памяти, символьные иденти- фикаторы. При необходимости для расчета некоторого значения или определения ячейки памяти, на которую будет воздействовать данная команда или директива, используются выражения, то есть комбинации чисел, регистров, ячеек памяти, идентификаторов с арифметическими, логическими, побитовыми и атрибутивны- ми операторами.
Рассмотрим классификацию операндов, поддерживаемых транслятором ассем- блера. в Операнд задается неявно на микропрограммном уровне. В этом случае команда явно не содержит операндов. Алгоритм выполнения команды использует не- которые объекты по умолчанию (регистры, флаги в EFLAGS и т. д.). Например, команды CLI и STI неявно работают с флагом прерывания IF в регистре EFLAGS, а команда XLAT неявно обращается к регистру AL и строке в памяти по адресу, определяемому парой регистров DS:ВХ.

к Операнд задается в самой команде (непосредственный операнд). Это может быть число, строка, имя или выражение, имеющее некоторое фиксированное (кон- стантное) значение. Физически непосредственный операнд находится в коде команды, то есть является ее частью. Для его хранения в команде выделяется поле длиной до 32 битов (см. главу 3). Непосредственный операнд может быть только вторым операндом (источником). Операнд-приемник может находить- ся либо в памяти, либо в регистре. Например, команда mоv ах,Оffffhпересылает в регистр АХ шестнадцатеричную константу Оffffh . Команда add sum,2 складыва- ет содержимое поля по адресу sum с целым числом 2 и записывает результат по месту первого операнда, то есть в память. Если непосредственный операнд — имя, то оно не должно быть перемещаемым, то есть зависеть от адреса за- грузки программы в память. Такое имя можно определить оператором EQU или =. Пример: Глава 5. Синтаксис ассемблера add [si],imd; сложение [si']:= [si]+3, ; здесь imd - непосредственный операнд mоv аl,5; аl:=5, здесь 5 - непосредственный операнд В данном фрагменте определяются две константы, которые затем используют- ся в качестве непосредственных операндов в командах пересылки MOV и сложе- ния ADD. Адресные операнды задают физическое расположение операнда в памяти путем указания двух составляющих адреса: сегмента и смещения (рис.

5.4). К примеру: mоv ах,θθθθh mоv ds,ах mоv ах,ds:θθθθh ; записать слово в ах из области памяти ; по физическому адресу 0000:0000

Здесь третья команда MOV имеет адресный операнд. і⅜: Перемещаемые операнды — любые символьные имена, представляющие неко- торые адреса памяти. Эти адреса могут обозначать местоположение в памяти некоторой инструкции (если операнд — метка) или данных (если операнд — имя области памяти в сегменте данных). Перемещаемые операнды отличаются от адресных тем, что∙они не привязаны к конкретному адресу физической па- мяти. Сегментная составляющая адреса перемещаемого операнда неизвестна и определяется после загрузки программы в память для выполнения. К при- меру: В этом фрагменте mаs_w — символьное имя, значением которого является ад- рес первого байта области памяти размером 25 слов. Полный физический адрес этой области памяти будет известен только после загрузки программы в па- мять для выполнения. ⅞ Счетчик адреса — специфический вид операнда. Он обозначается знаком $. Специфика этого операнда в том, что когда транслятор ассемблера встречает Синтаксис ассемблера 93 в исходной программе этот символ, то он подставляет вместо него текущее зна- чение счетчика адреса. Значение счетчика адреса, или, как его иногда называют счетчика размещения, представляет собой смещение текущей машинной коман- ды относительно начала сегмента кода. При обработке транслятором очеред- ной команды ассемблера счетчик адреса увеличивается на длину сформирован- ной машинной команды. Важно правильно это понимать. К примеру, обработка директив ассемблера не влечет за собой изменения счетчика, так как директи- вы ассемблера, в отличие от его команд, — это лишь указания транслятору на выполнение определенных действий по формированию машинного представ- ления программы, и для них транслятором не генерируется никаких конструк- ций в памяти.

В качестве примера использования в команде значения счетчика адреса можно привести следующий фрагмент: При формировании выражения для перехода, подобного $+3, нужно помнить о длине самой команды, в которой это выражение используется, так как значе- ние счетчика адреса соответствует смещению в сегменте команд данной, а не следующей за ней команды. В нашем примере команда JМР занимает два байта. Нужно быть осторожным, длина этой и других команд зависит от того, какие в ней используются операнды. Команда с регистровыми операндами будет ко- роче команды, один из операндов которой расположен в памяти. В большин- стве случаев эту информацию можно получить, зная формат машинной коман- ды (см. главу 3 и приложение) и анализируя колонку файла листинга с объектным кодом команды. ⅛ Регистровый операнд — это просто имя регистра. В программе на ассемблере можно использовать имена всех регистров общего назначения и некоторых си- стемных регистров: D 32-разрядные регистры ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ESP, EBP; ? 16-paзpядныe регистры АХ, ВХ, СХ, DХ, SI, DI, SР, ВР; ? 8-разрядные регистры АН, AL, BH, BL, CH, CL, DH, DL; П сегментные регистры СS, DS, SS, ES, FS, GS; D системные регистры СRО, СR2,СRЗ, СR4, DRО, DR1, DR2, DRЗ, DR6, DR7 (см. описа- ние команды M O V в прил ожении). Например, команда add ax,bx складывает содержимое регистров АХ и ВХ и запи- сывает результат в ВХ. Команда dec si уменьшает содержимое SI на 1. И еще пример: ш Операнд — порт ввода-вывода. Помимо адресного пространства оперативной памяти процессор поддерживает адресное пространство ввода-вывода, которое используется для доступа к устройствам ввода-вывода. Объем адресного про- странства ввода-вывода составляет 64 Кбайт. Для любого устройства компью- тера в этом пространстве выделяются адреса. Конкретное значение адреса в пре- делах этого пространства называется портом ввода-вывода. Физически порту Глава 5. Синтаксис ассемблера ввода-вывода соответствует аппаратный регистр (не путать с регистром про- цессора), доступ к которому осуществляется с помощью специальных команд ассемблера IN и OUT. Например, in аl,6θh: ввести байт из порта 60h Регистры, адресуемые с помощью порта ввода-вывода, могут иметь разрядность 8,16 или 32 бита, но для конкретного порта разрядность регистра фиксирована. Команды IN и OUT работают с фиксированной номенклатурой объектов. В каче- стве источника информации или получателя применяются так называемые ре- гистры -аккумуляторы ЕАХ, АХ, AL. Выбор регистра определяется разрядностью порта. Номер порта может задаваться непосредственным операндом в коман- дах IN и OUT или значением в регистре DX. Последний способ позволяетдинами- чески определить номер порта в программе. Например, ⅜l Структурные операнды используются для доступа к конкретному элементу сложного типа данных, называемого структурой. Мы подробно разберемся со структурами в главе 13. * Записи (аналогично структурному типу) используются для доступа к битово- му полю некоторой записи (глава 13). II Операнд находится в стеке, ж Операнд располагается в памяти. Это наиболее сложный и в то же время наи- более гибкий способ задания операндов. Он позволяет реализовать прямой и кос- венный варианты адресации, являющиеся основными видами адресации. Последний вариант расположения операндов, ввиду его важности и большого объема, рассмотрим более подробно. Обсуждение будет сопровождаться примера- ми команд ассемблера, цель которых — демонстрация того, как изменяется фор- мат команды ассемблера при применении того или иного вида адресации. В связи с этим вернемся еще раз к рис. 2.8 (см. главу 2), который иллюстрирует принцип формирования физического адреса на адресной шине процессора. Видно, что ад- рес операнда формируется как сумма двух составляющих — сдвинутого на 4 бита содержимого сегментного регистра и 16-разрядного эффективного адреса, кото- рый в общем случае вычисляется как сумма трех компонентов: базы, смещения и индекса.
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Операнды:

  1. Модус операнди
  2. Хроника преступлений
  3. Хроника преступлений
  4. Модели поведенческих индикаторов
  5. Библиографический список к разделу I
  6. Библиографический список к разделу I
  7. Работа профилеров
  8. Работа профилеров
  9. Характеристика организованного несоциального преступника
  10. Л.О. Доліненко, В.О. Доліненко, С.О. Сарновська. Цивільне право України, 2006
  11. ЦИВІЛЬНЕ ПРАВО УКРАЇНИ
  12. ПЕРЕДМОВА
  13. Частина І ПРОГРАМА КУРСУ «ЦИВІЛЬНЕ ПРАВО УКРАЇНИ»
  14. Розділ І. Загальні положення цивільного права
  15. Тема 1. Поняття цивільного права. Предмет та метод, система цивільного права. Функції та принципи цивільного права
  16. Тема 2. Цивільне законодавство України
  17. Тема 3. Поняття, елементи та види цивільних правовідносин
  18. Тема 4. Здійснення цивільних прав і виконання обов’язків
  19. Тема 5. Захист цивільних прав та інтересів
  20. Тема 6. Об’єкти цивільних прав