какая команда содержит только код операции
Код операции
Код операции, операционный код, опкод — часть машинного языка, называемая инструкцией и определяющая операцию, которая должна быть выполнена.
Определение и формат кодов инструкций зависит от системы команд данного процессора (который может быть как главным процессором, так и более специализированным для работы в какой-либо конкретной области). В отличие от самого опкода, инструкция обычно имеет одно или больше определений для операндов (то есть данных) над которыми должна выполняться операция, хотя некоторые операции могут иметь явные операнды или совсем их не иметь. Существуют наборы инструкций со схожими полями постоянного размера для опкода и определений операндов, в то время как другие (архитектура x86, к примеру) имеют более сложную структуру с переменной длиной. [1]
В зависимости от архитектуры, операнды могут быть значениями регистров, значениями стека, прочими значениями в памяти, портами ввода-вывода, и прочими, определение и доступ к которым осуществляется при помощи различных методов адресации. Типы операций включают в себя арифметические действия, копирование данных, логические операции, прочие программные конструкции, в отличие от специальных инструкций (таких как cpuid и другие).
Язык ассемблера
Язык ассемблера, или просто ассемблер — низкоуровневый язык программирования, использующий мнемоники, инструкции и операнды для представления машинного кода. Это улучшает читаемость при сохранении полного контроля над машинными инструкциями. Большая часть этого программируется на языках высокого уровня, на которых проще писать объёмный код. Такие языки необходимо компилировать для перевода на язык, который понимает машина, или запускать при помощи других программ, скомпилированных на языке машины. [2]
Программные наборы инструкций
Опкод можно найти и в так называемом байт-коде и прочих представлениях, разработанных скорее для программных интерпретаторов, чем для аппаратного обеспечения. Эти программные наборы инструкций часто задействуют несколько более высокоуровневые типы данных и операции, чем большинство аппаратных аналогов, но, тем не менее, они основаны на тех же принципах. Примерами может послужить Java Virtual Machine (JVM) языка программирования Java, байт-код, используемый в Emacs для скомпилированного кода Лисп и многие другие. [3]
Примечания
Полезное
Смотреть что такое «Код операции» в других словарях:
код операции — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN op code … Справочник технического переводчика
Код операции (информатика) — Эта статья об инструкциях; о системе команд в целом см.: Машинный код. В комьютерной отрасли под кодом операции (также операционный код, опкод англ. operation code) понимают часть машинного языка, называемую инструкцией, определяющую операцию,… … Википедия
Код Рида — Соломона — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия
Код коррекции ошибок Рида-Соломона — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия
Код Рида-Соломона — Коды Рида Соломона недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона, работающие с байтами (октетами). Код… … Википедия
Код Рида — Коды Рида Соломона (англ. Reed–Solomon codes) недвоичные циклические коды, позволяющие исправлять ошибки в блоках данных. Элементами кодового вектора являются не биты, а группы битов (блоки). Очень распространены коды Рида Соломона,… … Википедия
Код 200 — SSL Заголовки (список) Cookie · ETag · Referer · User Agent Коды состояния Код состояния англ. HTTP status code) является частью первой строки ответа сервера. Он представляет собой целое число из трех арабских цифр. Первая цифра указывает на… … Википедия
Код состояния HTTP — SSL Заголовки (список) Cookie · ETag · Referer · User Agent Коды состояния Код состояния англ. HTTP status code) является частью первой строки ответа сервера. Он представляет собой целое число из трех арабских цифр. Первая цифра указывает на… … Википедия
Код Грея — 2 битный код Грея 00 01 11 10 3 битный код Грея 000 001 011 010 110 111 101 100 4 битный код Грея 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000 Код Грея система счисления, в которой два соседних значения… … Википедия
Код Хаффмана — Алгоритм Хаффмана адаптивный жадный алгоритм оптимального префиксного кодирования алфавита с минимальной избыточностью. Был разработан в 1952 году аспирантом Массачусетского технологического института Дэвидом Хаффманом при написании им … Википедия
Формат команды
Система команд
Машинная команда представляет собой закодированное по определенным правилам указание микропроцессору на выполнение некоторой операции или действия. Под каждую команду в системной памяти процессора прошиты подпрограммы их выполнения. Ассемблер, анализируя исходник проекта, в сегменте кода, заменяет предложения исходника на эти подпрограммы.
Каждая команда содержит элементы, определяющие:
· Код операции (КОП) описывает, что делать. Значение в поле КОП определяет в блоке микропрограммного управления подпрограмму, реализующую действия для данной команды.
· Операнды описывают объекты, с которыми нужно что-то делать. Операнды в команде могут и не задаваться, а подразумеваться по умолчанию.
· Типы операндов описывают, как делать, обычно задаются неявно.
Правила кодирования команд называются форматом команд. Команды процессоров архитектуры IA-32 считаются сложными. Максимальная длина машинной команды IA-32 составляет 15 байт. Реальная команда может содержать гораздо меньшее количество полей, вплоть до одного — только КОП. Приведенный на рисунке формат машинной команды является самым общим.
Опишем назначения полей машинной команды.
Префиксы. Необязательные элементы машинной команды, каждый из которых состоит из одного байта или может отсутствовать. В памяти префиксы предшествуют команде. Назначение префиксов — модифицировать операцию, выполняемую командой. Прикладная программа может использовать следующие типы префиксов:
· Префикс замены сегмента. В явной форме указывает, какой сегментный регистр используется в данной команде для адресации стека или данных. Префикс отменяет выбор сегментного регистра по умолчанию. Префиксы замены сегмента имеют следующие значения:
Ø 2eh –замена сегмента CS.
Ø 36h –замена сегмента SS.
Ø 3eh –замена сегмента DS.
Ø 26h –замена сегмента ES.
Ø 64h –замена сегмента FS.
Ø 65h –замена сегмента GS.
· Префикс разрядности адреса уточняет разрядность адреса (32 или 16-разрядный). Каждой команде, в которой используется адресный операнд, ставится в соответствие разрядность адреса этого операнда. Этот адрес может иметь разрядность 16 или 32 бит. Это смещение называется эффективный адрес. Если разрядность адреса 32 бит, это означает, что команда содержит 32-разрядное смещение, оно соответствует 32-разрядному смещению адресного операнда относительно начала сегмента и по его значению формируется 32-битное смещение в сегменте. С помощью префикса разрядности адреса можно изменить действующее по умолчанию значение разрядности адреса. Это изменение будет касаться только той команды, которой предшествует префикс.
· Префикс разрядности операнда аналогичен префиксу разрядности адреса, но указывает на разрядность операндов (32 или 16-разрядные), с которыми работает команда. В соответствии с какими правилами устанавливаются значения атрибутов разрядности адреса и операндов по умолчанию?
· Префикс повторения используется с цепочечными командами (командами обработки строк). Этот префикс “зацикливает” команду для обработки всех элементов цепочки. Система команд поддерживает два типа таких префиксов: безусловные (rep — 0f3h), заставляющие повторяться цепочечную команду некоторое количество раз; условные (repe/repz — 0f3h, repne/repnz — 0f2h), которые при зацикливании проверяют некоторые флаги, и в результате проверки возможен досрочный выход из цикла
Код операции. Обязательный элемент, описывающий операцию, выполняемую командой. Многим командам соответствует несколько кодов операций, каждый из которых определяет нюансы выполнения операции.
Поле кода операции не имеет однозначной структуры. В зависимости от конкретных команд оно может иметь в своем составе от 1 до 3 элементов. Один из этих трех элементов является непосредственно кодом операции или ее частью, остальные уточняют детали операции. Дополнительные биты поля КОП:
· Поле reg (3-бита) определяют регистр, используемый в команде.
· Бит d задает направление передачи данных: при 0 из регистра reg, при 1 в регистр reg,
· Бит s задает необходимость расширения 8-битового непосредственного операнда ло 16 или 32 бита
· Бит w определяет размер данных, которыми оперирует команда: байт, слово, двойное слово: при 0 — 8 битов; при 1 — 16 битов для 16-разрядного размера операндов или 32 бита для 32-разрядного размера операндов.
Последующие поля машинной команды определяют местоположение операндов, участвующих в операции, и особенности их использования. Рассмотрение этих полей связано со способами задания операндов в машинной команде и потому будет выполнено позже.
Байт режима адресации modr/m. Иногда называется постбайтом, Значения этого байта определяет используемую форму адреса операндов. Операнды могут находиться в памяти в одном или двух регистрах. Если операнд находится в памяти, то байт modr/m определяет компоненты (смещение, базовый и индексный регистры), используемые для вычисления его эффективного адреса. Байт modr/m состоит из трех полей:
· Поле mod определяет количество байт, занимаемых в команде адресом операнда, поле смещение в команде).Поле mod используется совместно с полем r/m, которое указывает способ модификации адреса операнда смещение в команде.
К примеру, если mod = 00, это означает, что поле смещение в команде отсутствует, и адрес операнда определяется содержимым базового и (или) индексного регистра. Какие именно регистры будут использоваться для вычисления эффективного адреса, определяется значением этого байта. Если mod = 01, это означает, что поле смещение в команде присутствует, занимает один байт и модифицируется содержимым базового и (или) индексного регистра. Если mod = 10, это означает, что поле смещение в команде присутствует, занимает два или четыре байта (в зависимости от действующего по умолчанию или определяемого префиксом размера адреса) и модифицируется содержимым базового и (или) индексного регистра. Если mod = 11, это означает, что операндов в памяти нет: они находятся в регистрах. Это же значение байта mod используется в случае, когда в команде применяется непосредственный операнд.
· Поле reg/КОП определяет либо регистр, находящийся в команде на месте первого операнда, либо возможное расширение кода операции;
· Поле r/m используется совместно с полем mod и определяет либо регистр, находящийся в команде на месте первого операнда (если mod = 11), либо используемые для вычисления эффективного адреса (совместно с полем смещение в команде) базовые и индексные регистры.
Байт масштаб-индекс-база sib (Scale-Index-Base) используется для расширения возможностей адресации операндов. На наличие байта sib в машинной команде указывает сочетание одного из значений 01 или 10 поля mod и значения поля r/m= 100. Байт sib состоит из трех полей:
· Поле масштаба ss. В этом поле размещается масштабный множитель для индексного компонента index, занимающего следующие три бита байта sib. В поле ss может содержаться одно из следующих значений: 1, 2, 4, 8. При вычислении эффективного адреса на это значение будет умножаться содержимое индексного регистра.
· Поле index — используется для хранения номера индексного регистра, который применяется для вычисления эффективного адреса операнда;
· Поле base — используется для хранения номера базового регистра, который также применяется для вычисления эффективного адреса операнда. Напомню, что в качестве базового и индексного регистров могут использоваться практически все регистры общего назначения.
Поле смещения в команде. 8, 16 или 32-разрядное целое число со знаком, представляющее собой, полностью или частично (с учетом вышеприведенных рассуждений), значение эффективного адреса операнда.
Поле непосредственного операнда. Необязательное поле, представляющее собой 8, 16 или 32-разрядный непосредственный операнд. Наличие этого поля, конечно, отражается на значении байта modr/m.
Для описания команд приняты обозначения:
· Структура регистра флагов eflags:
В нижней строке этой таблицы приводятся значения флагов после выполнения команды:
Ø 1 — после выполнения команды флаг устанавливается (равен 1);
Ø 0 — после выполнения команды флаг сбрасывается (равен 0);
Ø r — значение флага зависит от результата работы команды;
Ø пробел — после выполнения команды флаг не изменяется;
· Для представления операндов в синтаксических диаграммах используются следующие обозначения:
Ø r8, r16, r32 — операнд в одном из регистров размером байт, слово или двойное слово;
Ø m8, m16, m32, m48 — операнд в памяти размером байт, слово, двойное слово или 48 бит;
Ø i8, i16, i32 — непосредственный операнд размером байт, слово или двойное слово;
Ø a8, a16, a32 — относительный адрес (смещение) в сегменте кода.
· На многих диаграммах в целях компактности возможные сочетания операндов показаны в виде следующей конструкции:
Конструируя команду на основе подобной синтаксической диаграммы, вы должны помнить о соответствии типов. В подобной диаграмме допустимы только следующие сочетания: «r8, m8», «r16, m16», «r32, m32». Например, сочетание «r8, m16» недопустимо. Однако есть единичные случаи, когда подобные сочетания возможны; тогда они специально оговариваются.
Структура и система команд ЭВМ
Решение задач на ЭВМ реализуется программным способом, то есть путем выполнения последовательно во времени отдельных операций,предусмотренных алгоритмом решения задачи, над данными.
Программа содержит совокупность различных команд, обеспечивающих требуемую обработку входных данных.
Команда машинной программы – это элементарная инструкция машине, выполняемая ею автоматически без каких-либо дополнительных указаний и пояснений.
Структура команды в общем виде приведена на рисунке 3.
КОП | Адресная часть |
Рисунок 3 – Структура команды ЭВМ
По количеству адресов, записанных в команде, команды делятся на безадресные, одно-, двух- и трехадресные:
— типовая структура трехадресной команды:
а1 и а2 — адреса ячеек (регистров), где расположены соответственно первое и второе числа, участвующие в операции, а3 — адрес ячейки (регистра), куда следует поместить число, полученное в результате выполнения операции;
— типовая структура двухадресной команды:
а1 — это обычно адрес ячейки (регистра), где хранится первое из чисел, участвующих в операции, и куда после завершения операции должен быть записан результат операции, а2 — обычно адрес ячейки (регистра), где хранится второе участвующее в операции число;
— типовая структура одноадресной команды :
а1 в зависимости от модификации команды может обозначать либо адрес ячейки (регистра), где хранится одно из чисел, участвующих в операции, либо адрес ячейки (регистра ), куда следует поместить число — результат операции.
Безадресная команда содержит только код операции, а информация для нее должна быть заранее помещена в определенные регистры машины (безадресные команды могут использоваться только совместно с командами другой адресности).
Наибольшее применение в ПК нашли двухадресные команды.
Множество команд, реализованных в конкретной ЭВМ, образует ее систему команд.
Современные ПЭВМ автоматически выполняют несколько сотен различных команд. Например, стандартный набор современных компьютеров содержит более 240 машинных команд.
Все машинные команды можно разделить на группы по видам выполняемых операций:
— операции пересылки данных внутри компьютера;
— арифметические операции над данными;
— логические операции над данными;
— операции над строками (текстовой информацией);
— операции обращения к внешним устройствам компьютера;
— операции передачи управления;
— обслуживающие и вспомогательные операции.
Пояснения требуют операции передачи управления (или, иначе, — ветвления программы), которые служат для изменения естественного порядка выполнения команд.
Существуют операции безусловной передачи управления и операции условной передачи управления.
Операции безусловной передачи управления всегда обусловливают выполнение после данной команды не следующей по порядку, а той, адрес которой в явном или неявном виде указан в адресной части команды.
Операции условной передачи управления вызывают тоже передачу управления по адресу, указанному в адресной части команды, но только в том случае, если выполняется некоторое заранее оговоренное для этой команды условие. Это условие в явном или неявном виде указано в коде операции команды. Команд условной передачи управления насчитывается обычно до нескольких десятков — по числу используемых условий.
Команд безусловных передач управления обычно только три:
— команда передачи управления, которая просто передает управление по заданному адресу и больше никаких действий не выполняет;
— команда передачи управления (ее часто называют командой вызова процедуры или подпрограммы), которая кроме передачи управления процедуре еще и запоминает в специальной стековой памяти адрес следующей команды (адрес возврата из процедуры);
— безадресная команда передачи управления (команда возврата из процедуры), возвращающая управление по запомненному адресу возврата.
Вторая и третья из названных команд безусловных передач управления работают «на пару» — одна передает управление процедуре, другая возвращает из нее. Важную роль в выполнении этих команд передачи управления (да и при многих других ситуациях, отрабатываемых компьютером) играет специальным образом организованная область оперативной памяти — стековая память. Обращение к ячейкам этой памяти выполняется по принципу «последний записанный операнд первым считывается» или, иначе, «первым вошел — последним вышел» (FILO — first input, last output). Стековая память позволяет удобно реализовать процессы иерархического обращения ко многим процедурам (количество уровней иерархии практически не ограничено), последовательно записывая и выдавая по принципу FILO адреса возврата каждой из них.
Дата добавления: 2014-12-09 ; просмотров: 944 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
Код операции
Это единственный из обязательных элементовкоманды (1 байт), задающий операцию. Возможны операции, заданные одним кодом операции. Это одноадресные команды, операнд для которых задается или выставляется по умолчанию. Поле кода операции может содержать собственно код операции и от одного до 3 специальных битов:
· w – размера операнда (7-й бит), при w = 0, размер операнда – байт, при w = 1, размер операнда – слово.
· направления передачи результата для двухместной команды (d – 6-й бит);
1. при d = 1 – адресом приемника является РОН, заданный полем reg постбайт,
2. при d = 0 – адресом приемника является адрес памяти;
3. в одноместной команде используется только источник и 6-й бит байта кода операции (s=1) определяет автоматическое расширение байта данных до размера слова.
Возможен однобайтовой вариант одноместной команды, в котором адрес данных (номер РОНа) размещается в трех младших разрядах кода операции.
Постбайт.
Это необязательный элемент команды. Задает один (для одноадресной команды) или два адреса операндов, один из которых используется и как адрес результата.
md | r/r | r/m |
Рис. 2.6. Структура постбайта |
Постбайт (рис. 2.6) содержит 3 поля:
· md – поле режима адресации,
· r/r – поле адреса регистра,
· r/m – поле адреса второго регистра или кода алгоритма вычисления адреса памяти.
Поле md. Это поле режима адресации.
Задает тип команды:
· регистр/регистр(r/r);
· регистр/память(r/m).
Для команд регистр/память задает процедуру вычисления адреса операнда в памяти:
· md =00 – режим адресации r/m без использования смещения,
· md =01 – режим адресации r/m с использованием смещения 1 байт),
· md =10 – режим адресации r/m с использованием смещения 2 байт),
· md =11 – режим адресации r/r.
Задании md ¹ 11 определяет команду типа регистр память. В этом случае поле r/r содержит номер РОНа, в котором находится один из операндов, а поле r/m, – номер алгоритма вычисления адреса памяти, по которому хранится второго операнда.
Значения поля r/m от 000 до 011, задают формулы вычисления адреса памяти второго операнда по 3 компонентам: B, X и disp.
Значения поля r/m от 100 до 111, задают формулы вычисления адреса памяти второго операнда по двум компонентам: B и disp.
Количество выбираемых смещений disp, расположенных после постбайта, определяется по полю постбайта – md.
Исключение: В адресации операндов, в качестве исключения, имеется возможность задавать адрес операнда в памяти прямым 16-ти разрядным адресом. Признаком прямой адресации является комбинация значений md = 00 и r/m=110 (в таблице 1 выделен жирным шрифтом).
Количество выбираемых смещений disp, расположенных после постбайта, определяется по полю постбайта – md.
В таблице 1. представлены все формулы вычисления адресов РОН и ячеек памяти в зависимости от значений полей постбайта: md, r/r, r/m.
На рис. 2.7 представлена структура команд МП Intel в реальном режиме и схемы вычисления адресов операндов.
Таблица 1.Постбайтовые режимы адресации МП IA-16 | ||||
Поле r/m | Поле md | |||
w = 0 | w = 1 | |||
DS:[bx + si] | DS:[bx + si + disp(1 байт)] | DS:[bx + si + disp(2 байт)] | al | ax |
DS:[bx + di] | DS:[bx + di + disp(1 байт)] | DS:[bx + di + disp(2 байт)] | cl | cx |
SS:[bp + si] | SS:[bp + si + disp(1 байт)] | SS:[bp + si + disp(2 байт)] | dl | dx |
SS:[bp + di] | SS:[bp + di + disp(1 байт)] | SS:[bp + di + disp(2 байт)] | bl | bx |
DS:[si] | DS:[si + disp(1 байт)] | DS:[si + disp(2 байт)] | ah | si |
DS:[di] | DS [di + disp(1 байт)] | DS [di + disp(2 байт)] | ch | di |
DS:[disp-2 ба-та] | SS:[bp + disp(1 байт)] | SS:[bp + disp(2 байт)] | dh | bp |
DS:[bx] | DS [bx + disp(1 байт)] | DS [bx + disp(2 байт)] | bh | bx |
Структура команд МП Intel в реальном режиме. | ||||
0,1 байт | 1 байт | 0,1 байт | 0,1,2 байта | 0,1,2 байта |
Префикс | Код операции. | Постбайт | Disp | # d |
md | r | r/M | ||
2 бита | 3 бита | 3 бита | ||
если | r/M ≤ 11, | то – команда типа r/M; базовая индексная адресация; 1-й операнд находится в регистре, указанном полем r, адрес M вычисляется как: (B)+(X)+ #d16,где В и Х задаются кодом поля r/M. | ||
при: | 00 ü | Disp – отсутствует | ||
01 ý | Disp = 1 байт | |||
10 þ | Disp = 2 байта | |||
При | Команда типа r/r, операнды находятся в регистрах, указанными полями r и r/M. | |||
Вариант относительно-индексной адресации памяти | ||||
если | r/M ≥ 100, | то команда типа r/M, первый операнд находится в регистре, указанном полем r, адрес M вычисляется как: (B)+ Disp,где: B– задается кодом поля r/Mпостбайта. | ||
при | 00 ü | Disp – отсутствует | ||
01 ý | Disp = 1 байт | |||
10 þ | Disp = 2 байта | |||
Исключение: при md=00 и r/M = 110,адрес задается прямым 16-ти битным смещением (#d16). | ||||
Выбор сегмента: при указании в качестве компоненты адреса – (bp), используется сегмент стека (SS), иначе – сегмент данных (DS) | ||||
Рис.2.7. Структура команд МП Intel в реальном режиме и схемы вычисления адресов операндов. |
Вопросы для самопроверки:
1. Структура команд в МП IA-16,
2. Назначение префикса в командах МП IA-16,
3. Назначение постбайта в командах МП IA-16,
4. Поля постбайта в командах МП IA-16,
5. Поля постбайта в командах МП IA-16,
6. Тип сегмента используемого по умолчанию при выборке команд в МП IA-16,
7. Тип сегмента используемого по умолчанию при выборке операнда в МП IA-16,
8. Тип сегмента используемого по умолчанию при работе со стеком в МП IA-16,
9. Тип сегмента используемого по умолчанию при работе с командами обработки строк в МП IA-16,
10. Способы замены сегментов, используемых по умолчанию.
11. Назначение постбайта в МП IA-16,
12. Основные поля постбайта в МП IA-16,
13. Назначение поля md постбайта в МП IA-16,
14. Назначение поля r/r постбайта в МП IA-16.