Понятие операнд и литерал — это одно и тоже? Или есть разница? Объясните, пожалуйста, коротко простым языком?
- Вопрос задан более трёх лет назад
- 1695 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 3
Слово «литерал» переводится как «буквальный». Это объект, значение которого — его буквальное значение. Например: «hello» — это строковый литерал со значением «hello». Или 42 — это целочисленный литерал со значением 42. Противоположностью литерала, в некотором смысле, является переменная. Переменная — это объект, значение которого — последнее присвоенное ему значение.
Например: char a[] = «hello world»; a — это строковая переменная, со значением «hello world». Или int answer = 40 + 2; answer — целочисленная переменная со значением 42.
Операнд — это аргумент операции. Во многих контекстах литералы и переменные могут быть операндами. Например: a[0]; операция здесь — [], взятие элемента массива, операнды — a и 0, один из них — переменная, другой — литерал.
FAST PYTHON |4| ОПЕРАТОРЫ И ОПЕРАНДЫ
Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
# «Hello world» — литерал print(«Hello world») # somevariable — не литерал print(somevariable) # сложение — бинарная операция # x и 3 — операнды # а 3, кроме того, и литерал x + 3
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
если коротко, то «Hello world» и somevariable являются операндами, но только «Hello world» является литералом
Программист
Что говорит Wikipedia:
Литерал (англ. literal ) — запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. Литералами также называют представление значения некоторого типа данных.
Опера́нд (англ. operand) в языках программирования ― аргумент операции; данные, которые обрабатываются командой; грамматическая конструкция, обозначающая выражение, задающее значение аргумента операции. Иногда операндом называют место, позицию в тексте, где должен стоять аргумент операции.
Делаем вывод — операнд и литерал — это не одно и то же.
Источник: qna.habr.com
Операнды
Операнды — это объекты, над которыми или при помощи которых выполняются действия, задаваемые инструкциями или директивами. Машинные команды могут либо совсем не иметь операндов, либо иметь один или два операнда. Большинство команд требует двух операндов, один из которых является источником, а другой — приемником (операндом назначения). В двухоперандной машинной команде возможны следующие сочетания операндов:
непосредственный операнд — регистр;
непосредственный операнд — память.
Здесь важно подчеркнуть, что один операнд может располагаться в регистре или памяти, а второй операнд обязательно должен находиться в регистре или непосредственно в команде. Непосредственный операнд может быть только источником.
Чем операнд отличается от оператора
Для приведенных ранее правил сочетания типов операндов есть исключения, которые касаются:
-команд работы с цепочками, которые могут перемещать данные из памяти в память;
-команд работы со стеком, которые могут переносить данные из памяти в стек, также находящийся в памяти;
-команд типа умножения, которые, кроме операнда, указанного в команде, неявно используют еще и второй операнд.
Операндами могут быть числа, регистры, ячейки памяти, символьные идентификаторы. При необходимости для расчета некоторого значения или определения ячейки памяти, на которую будет воздействовать данная команда или директива, используются выражения, то есть комбинации чисел, регистров, ячеек памяти, идентификаторов с арифметическими, логическими, побитовыми и атрибутивными операторами.
Рассмотрим классификацию операндов, поддерживаемых транслятором ассемблера.
Операнд задается неявно на микропрограммном уровне. В этом случае команда явно не содержит операндов. Алгоритм выполнения команды использует некоторые объекты по умолчанию (регистры, флаги в EFLAGS и т. д.). Например, команды CLI и STI неявно работают с флагом прерывания IF в регистре EFLAGS, а команда XLAT неявно обращается к регистру AL и строке в памяти по адресу, определяемому парой регистров DS:BX.
Операнд задается в самой команде (непосредственный операнд). Это может быть число, строка, имя или выражение, имеющее некоторое фиксированное (константное) значение. Физически непосредственный операнд находится в коде команды, то есть является ее частью. Для его хранения в команде выделяется поле длиной до 32 битов.
Непосредственный операнд может быть только вторым операндом (источником). Операнд-приемник может находиться либо в памяти, либо в регистре. Например, команда mov ax,0ffffh пересылает в регистр АХ шестнадцатеричную константу 0ffffh. Команда add sum,2 складывает содержимое поля по адресу sum с целым числом 2 и записывает результат по месту первого операнда, то есть в память. Если непосредственный операнд имя, то оно не должно быть перемещаемым, то есть зависеть от адреса загрузки программы в память. Такое имя можно определить оператором EQU или =. Пример:
num equ 5 ;вместо num ассемблер везде подставляет 5
imd = num-2 ;вместо num ассемблер везде подставляет 3
mov al.num ;эквивалентно mov al,5, здесь 5 — непосредственный операнд
add [sij.imd; сложение [ s i ] := [si]+3,
; здесь imd — непосредственный операнд
mov al,5; al:=5, здесь 5 — непосредственный операнд
В данном фрагменте определяются две константы, которые затем используются в качестве непосредственных операндов в командах пересылки MOV и сложения ADD.
Адресные операнды задают физическое расположение операнда в памяти путем
указания двух составляющих адреса: сегмента и смещения. К примеру:
mov ax,ds:0000h записать слово в ах из области памяти
по физическому адресу 0000:0000
Перемещаемые операнды — любые символьные имена, представляющие некоторые адреса памяти. Эти адреса могут обозначать местоположение в памяти некоторой инструкции (если операнд — метка) или данных (если операнд -имя области памяти в сегменте данных). Перемещаемые операнды отличаются от адресных тем, что’они не привязаны к конкретному адресу физической памяти. Сегментная составляющая адреса перемещаемого операнда неизвестна и определяется после загрузки программы в память для выполнения. К примеру:
mas_w dw 25 dup (0)
lea si,_mas_w; mas_w — перемещаемый операнд
В этом фрагменте mas_w — символьное имя, значением которого является адрес первого байта области памяти размером 25 слов. Полный физический адрес этой области памяти будет известен только после загрузки программы в память для выполнения.
Счетчик адреса — специфический вид операнда. Он обозначается знаком $. Специфика этого операнда в том, что когда транслятор ассемблера встречает в исходной программе этот символ, то он подставляет вместо него текущее значение счетчика адреса.
Значение счетчика адреса, или, как его иногда называют счетчика размещения, представляет собой смещение текущей машинной команды относительно начала сегмента кода. При обработке транслятором очередной команды ассемблера счетчик адреса увеличивается на длину сформированной машинной команды. Важно правильно это понимать. К примеру, обработка директив ассемблера не влечет за собой изменения счетчика, так как директивы ассемблера, в отличие от его команд, — это лишь указания транслятору на выполнение определенных действий по формированию машинного представления программы, и для них транслятором не генерируется никаких конструкций в памяти. В качестве примера использования в команде значения счетчика адреса можно привести следующий фрагмент:
jmp $+3 ; безусловный переход на команду mov
eld ; длина команды cld составляет 1 байт
При формировании выражения для перехода, подобного $+3, нужно помнить о длине самой команды, в которой это выражение используется, так как значение счетчика адреса соответствует смещению в сегменте команд данной, а не следующей за ней команды. В нашем примере команда JMP занимает два байта. Нужно быть осторожным, длина этой и других команд зависит от того, какие в ней используются операнды. Команда с регистровыми операндами будет короче команды, один из операндов которой расположен в памяти. В большинстве случаев эту информацию можно получить, зная формат машинной команды и анализируя колонку файла листинга с объектным кодом команды.
Регистровый операнд — это просто имя регистра. В программе на ассемблере можно использовать имена всех регистров общего назначения и некоторых системных регистров:
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;
системные регистры CRO, CR2, CR3, CR4, DRO, DR1, DR2, DR3, DR6, DR7 (см. описа-
ние команды MOV в приложении).
Например, команда add ax,bx складывает содержимое регистров АХ и ВХ и записывает результат в ВХ. Команда dec si уменьшает содержимое SI на 1. И еще
moval,4 ;константу 4 заносим в регистр al
movdl,pass+4 ;байт по адресу pass+4 — в регистр dl
addal.dl;команда с регистровыми операндами
Операнд — порт ввода-вывода. Помимо адресного пространства оперативной памяти процессор поддерживает адресное пространство ввода-вывода, которое используется для доступа к устройствам ввода-вывода. Объем адресного пространства ввода-вывода составляет 64 Кбайт. Для любого устройства компьютера в этом пространстве выделяются адреса.
Конкретное значение адреса в пределах этого пространства называется портом ввода-вывода. Физически порту ввода-вывода соответствует аппаратный регистр (не путать с регистром процессора), доступ к которому осуществляется с помощью специальных команд ассемблера IN и OUT. Например,
in al,60h; ввести байт из порта 60h
Регистры, адресуемые с помощью порта ввода-вывода, могут иметь разрядность 8,16 или 32 бита, но для конкретного порта разрядность регистра фиксирована. Команды IN и OUT работают с фиксированной номенклатурой объектов. В качестве источника информации или получателя применяются так называемые регистры -аккумуляторы ЕАХ, АХ, AL. Выбор регистра определяется разрядностью порта.
Номер порта может задаваться непосредственным операндом в командах IN и OUT или значением в регистре DX. Последний способ позволяет динамически определить номер порта в программе. Например,
mov dx,20h;записать номер порта 20h в регистр dx
mov al,20h;записать значение 20h в регистр al
out dx.al;вывести значение 20п в порт 20Н
Структурные операнды используются для доступа к конкретному элементу сложного типа данных, называемого структурой. Мы подробно разберемся со структурами в главе 13.
Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой записи.
Операнд находится в стеке,
Операнд располагается в памяти. Это наиболее сложный и в то же время наиболее гибкий способ задания операндов. Он позволяет реализовать прямой и косвенный варианты адресации, являющиеся основными видами адресации.
Последний вариант расположения операндов, ввиду его важности и большого объема, рассмотрим более подробно. Обсуждение будет сопровождаться примерами команд ассемблера, цель которых — демонстрация того, как изменяется формат команды ассемблера при применении того или иного вида адресации. Aдрес операнда формируется как сумма двух составляющих — сдвинутого на 4 бита содержимого сегментного регистра и 16-разрядного эффективного адреса, который в общем случае вычисляется как сумма трех компонентов: базы, смещения и индекса.
Источник: studfile.net
Выражения, операнды и операторы
Выражение — это любая единица исходного кода программы, которая может быть вычислена для получения значения, например, вызов функции, использование операторов, или просто обращение к переменной по имени. В PHP почти всё является выражением. Выражения делятся на простые и сложные. Простые выражения являются самостоятельными выражениями — они не включают в себя ещё более простых выражений. Сложные выражения состоят из простых выражений. Типичный способ конструирования сложных выражений из простых выражений заключается в использовании операторов:
Некоторые выражения оканчиваются точкой с запятой. Именно поэтому любое выражение — это то, что вычисляется для получения значения:
$a = 10;
Операнды
Операнд представляет собой некоторую величину, обрабатываемую в программе. Операнды могут относиться к любому типу данных. Примеры операндов:
$а++; // $а — операнд $sum = $val1 + $val2; // $sum. $val1 и $val2 — операнды
Источник: it-black.ru