19 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Что такое операнды. Операнды. Выражения, операнды и операторы

Выражения, операнды и операторы

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

Итак, начнём с выражений.

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

Это выражение, которое записывает в переменную х число 100.

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

Операнд — это значение, переменная или выражение, которое расположено слева или справа от оператора. Например

Здесь 1 и 2 — это операнды, а знак ПЛЮС (+) — это оператор.

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

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

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

Основные виды операторов: арифметические, операторы присваивания, сравнения, логические и поразрядные (побитовые).

Также разделяются операторы по количеству операндов:

  • Унарные: когда с оператором используется только один операнд
  • Бинарные: когда с оператором используется два операнда

Попробуйте догадаться, какие из приведённых ниже операторов являются унарными, а какие бинарными:

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

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

Оператор + выполняет операцию сложения
Оператор * выполняет операцию умножения

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

Операнды в языке ассемблера

Операнд – объект, над которым выполняется машинная команда.

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

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

Способы адресации операндов

Под способами адресации понимаются существующие способы задания адреса хранения операндов:

Читать еще:  Как накачать худые ноги в домашних условиях. Очень худые ноги у мужчин: причины и что делать

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

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

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

  • 32-разрядные регистры ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ESP, EBP;
  • 16-разрядные регистры АХ, ВХ, СХ, DX, SI, DI, SP, ВР;
  • 8-разрядные регистры АН, AL, BH, BL, CH, CL, DH, DL;
  • сегментные регистры CS, DS, ,SS, ES, FS, GS.
  • прямую адресацию;
  • косвенную адресацию.

Прямая адресация : эффективный адрес определяется непосредственно полем смещения машинной команды, которое может иметь размер 8, 16 или 32 бита.

Ассемблер заменяет sum на соответствующий адрес, хранящийся в сегменте данных (по умолчанию адресуется регистром ds ) и значение, хранящееся по адресу sum , помещает в регистр eax .

Косвенная адресация в свою очередь имеет следующие виды:

  • косвенная базовая (регистровая) адресация;
  • косвенная базовая (регистровая) адресация со смещением;
  • косвенная индексная адресация;
  • косвенная базовая индексная адресация.

Косвенная базовая (регистровая) адресация. При такой адресации эффективный адрес операнда может находиться в любом из регистров общего назначения, кроме sp/esp и bp/ebp (это специфические регистры для работы с сегментом стека). Синтаксически в команде этот режим адресации выражается заключением имени регистра в квадратные скобки [].

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

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

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

Значение эффективного адреса второго операнда вычисляется выражением mas+( esi *4) и представляет собой смещение относительно начала сегмента данных.

Наличие возможности масштабирования существенно помогает в решении проблемы индексации при условии, что размер элементов массива постоянен и составляет 1, 2, 4 или 8 байт.

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

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

Эффективный адрес второго операнда формируется как esi+edx . Значение по этому адресу помещается в регистр eax.

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

Читать еще:  Как отличить карпа от карася. Кулинарные страсти по сазану и карпу

Операндом является порт ввода-вывода.
Помимо адресного пространства оперативной памяти микропроцессор поддерживает адресное пространство ввода-вывода, которое используется для доступа к устройствам ввода-вывода. Объем адресного пространства ввода-вывода составляет 64 Кбайт. Для любого устройства компьютера в этом пространстве выделяются адреса. Конкретное значение адреса в пределах этого пространства называется портом ввода-вывода. Физически порту ввода-вывода соответствует аппаратный регистр (не путать с регистром микропроцессора), доступ к которому осуществляется с помощью специальных команд ассемблера in и out .

Регистры, адресуемые с помощью порта ввода-вывода, могут иметь разрядность 8, 16 или 32 бит, но для конкретного порта разрядность регистра фиксирована. В качестве источника информации или получателя применяются регистры-аккумуляторы eax , ax , al . Выбор регистра определяется разрядностью порта. Номер порта может задаваться непосредственным операндом в командах in и out или значением в регистре dx . Последний способ позволяет динамически определить номер порта в программе.

Счетчик адреса – специфический вид операнда. Он обозначается знаком $. Специфика этого операнда в том, что когда транслятор ассемблера встречает в исходной программе этот символ, он подставляет вместо него текущее значение счетчика адреса (регистр EIP ). Значение счетчика адреса представляет собой смещение текущей машин­ной команды относительно начала сегмента кода, адресуемого сегментным регистром CS . При обработке транслятором очередной команды ассемблера счетчик адреса увеличивается на длину сформированной машинной команды. Обработка директив ассемблера не вле­чет за собой изменения счетчика. В качестве примера использования в команде значения счетчика адреса можно привести следующий фрагмент:

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

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

Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой записи. Для доступа к битовому полю записи используется директива RECORD .

Операторы в языке ассемблера

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

Выражения, операнды, операции

Тема 11

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

Читать еще:  Диета ксении селезневой. Диета Ксении Селезневой: меню и отзывы

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

Операции – это действия, которые выполняются над операндами. Операции бываю унарными и бинарными. Унарная операция относится к одному операнду, и ее знак записывается перед операндом, например, — x. Бинарная операция выражает отношение между двумя операндами, и знак ее записывается между операндами, например, x + y.

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

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

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

Арифметические выражения (АВ). Результатом выполнения АВ является число, тип которого зависит от типов операндов, составляющих это выражение. В АВ можно использовать числовые типы (целочисленные и вещественные), арифметические операции и функции, возвращающие числовое значение.

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

Унарные арифметические операции + (Сохранение знака) и (Отрицание знака) относятся к знаку числа и не меняют типа числа.

Примеры. Пусть в программе есть строки:

var a, b, c, d: integer; x, y: real;

c:= a div b; d:= a mod b; //c=3, d=1

y:=sin(a) + b/exp(x) — 12.5; // y=sin a + b/ e x – 12,5

Над данными целочисленного типа можно выполнять также следующие побитовые (поразрядные) операции:

o Shl– сдвиг влево;

o Shr– сдвиг вправо;

o And– И (арифметическое умножение);

o Or– ИЛИ (арифметическое сложение);

o Xor– арифметическое исключающее ИЛИ;

o Not– Не (арифметическое отрицание).

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

Примеры. Пусть в программе есть строки:

var a, b, c, d: integer;

c:= Not a; // a= 0101, Not (0101) = 1010 =10 дес .

d:= a And b; // b=1001, 0101 And 1001 = 0001 = 1 дес .

Логические выражения (ЛВ). Результатом выполнения ЛВ является логическое значение Trueили False. Такие выражения чаще всего используются в условных операторах и операторах цикла. Логические выражения могут содержать:

o логические константы Trueи False;

o логические переменные типа Boolean;

o операции сравнения (отношения);

o логические операции;

o круглые скобки.

Для установления отношения между двумя значениями, заданными выражениями, переменными или константами, используются следующие операции сравнения: =, , =,<>. Операции сравнения выполняются после вычисления соответствующих выражений. Результатом операции сравнения является значение False, если соответствующее отношение не имеет место, и значение Trueв противном случае.

Результат выполнения логических операций при применении их к логическим выражениям (операндам логического типа) будет логического типа (Boolean). Логические операции And, Or, Xor являются бинарными, операция Not– унарной.

Источники:

http://info-master.su/programming/kurs/expressions.php
http://prog-cpp.ru/asm-operands/
http://studopedia.ru/2_125944_virazheniya-operandi-operatsii.html

Ссылка на основную публикацию
Статьи c упоминанием слов:

Adblock
detector