какая команда содержит только код операции
Состав машинных команд
Структура и виды команд
Решение задач на компьютере реализуется программным способом, путем выполнения последовательно во времени отдельных операций над данными, предусмотренных алгоритмом решения задачи.
Алгоритм – это точно определенная конечная последовательность действий, которые нужно выполнить над исходными данными, чтобы получить решение задачи.
Машинная программа – это алгоритм, заданный в виде последовательности машинных команд.
Машинная команда – это элементарная инструкция компьютеру, выполняемая им автоматически без дополнительных указаний и пояснений.
Машинная команда состоит из двух частей: операционной и адресной.
Операционная часть команды – это группа разрядов в команде, предназначенная для указания кода операции.
Адресная часть команды – это группа разрядов в команде, в которых записываются коды адреса (адресов) ячеек памяти компьютера, предназначенных для оперативного хранения данных, задействованных при выполнении команды. Часто эти адреса называют адресами операндов, т.е. чисел, участвующих в операции.
По количеству адресов, записываемых в команде, команды делятся на безадресные, одно-, двух- и трехадресные.
| Трехадресная команда: | КОП | а1 | а2 | а3 |
а1 и а2 – адреса ячеек (регистров), где расположены данные, участвующие в операции;
а3 – адрес ячейки (регистра), куда нужно поместить результат операции.
| Двухадресная команда: | КОП | а1 | а2 |
а1 – адрес ячейки (регистра), где расположено первое из данных, участвующее в операции, и куда нужно поместить результат операции
а2 – адрес ячейки (регистра), где расположено второе из данных, участвующее в операции.
| Одноадресная команда: | КОП | а1 |
а1 – в зависимости от модификации команды либо адрес ячейки (регистра), где расположено одно из данных, участвующее в операции, либо адрес ячейки (регистра) куда нужно поместить результат операции.
Безадресная команда содержит только код операции, а данные для нее должны быть заранее помещены в определенные регистры машины.
Стандартный набор современных ПК содержит около 240 машинных команд. Их можно разделить на группы по видам выполняемых операций:
– операции пересылки данных внутри компьютера;
– арифметические операции над данными;
– логические операции над данными;
– операции обращения к внешним устройствам компьютера;
– операции передачи управления;
– обслуживающие и вспомогательные операции.
Операции передачи управления служат для изменения естественного порядка выполнения команд. Их два вида. Операции безусловной передачи управления требуют выполнения данной команды не следующую по порядку, а той, адрес которой в явном или неявном виде указан в адресной части. Операции условной передачи управления тоже требуют передачи управления по адресу указанному в адресной части команды, но только в том случае, если выполняется некоторое заранее оговоренное для этой команды условие. Условие задается в коде операции в явном или неявном виде.
Структура и система команд ЭВМ
Решение задач на ЭВМ реализуется программным способом, то есть путем выполнения последовательно во времени отдельных операций,предусмотренных алгоритмом решения задачи, над данными.
Программа содержит совокупность различных команд, обеспечивающих требуемую обработку входных данных.
Команда машинной программы – это элементарная инструкция машине, выполняемая ею автоматически без каких-либо дополнительных указаний и пояснений.
Структура команды в общем виде приведена на рисунке 3.
| КОП | Адресная часть |
Рисунок 3 – Структура команды ЭВМ
По количеству адресов, записанных в команде, команды делятся на безадресные, одно-, двух- и трехадресные:
– типовая структура трехадресной команды:
а1 и а2 — адреса ячеек (регистров), где расположены соответственно первое и второе числа, участвующие в операции, а3 — адрес ячейки (регистра), куда следует поместить число, полученное в результате выполнения операции;
– типовая структура двухадресной команды:
а1 — это обычно адрес ячейки (регистра), где хранится первое из чисел, участвующих в операции, и куда после завершения операции должен быть записан результат операции, а2 — обычно адрес ячейки (регистра), где хранится второе участвующее в операции число;
– типовая структура одноадресной команды :
а1 в зависимости от модификации команды может обозначать либо адрес ячейки (регистра), где хранится одно из чисел, участвующих в операции, либо адрес ячейки (регистра ), куда следует поместить число — результат операции.
Безадресная команда содержит только код операции, а информация для нее должна быть заранее помещена в определенные регистры машины (безадресные команды могут использоваться только совместно с командами другой адресности).
Наибольшее применение в ПК нашли двухадресные команды.
Множество команд, реализованных в конкретной ЭВМ, образует ее систему команд.
Современные ПЭВМ автоматически выполняют несколько сотен различных команд. Например, стандартный набор современных компьютеров содержит более 240 машинных команд.
Все машинные команды можно разделить на группы по видам выполняемых операций:
– операции пересылки данных внутри компьютера;
– арифметические операции над данными;
– логические операции над данными;
– операции над строками (текстовой информацией);
– операции обращения к внешним устройствам компьютера;
– операции передачи управления;
– обслуживающие и вспомогательные операции.
Пояснения требуют операции передачи управления (или, иначе, — ветвления программы), которые служат для изменения естественного порядка выполнения команд.
Существуют операции безусловной передачи управления и операции условной передачи управления.
Операции безусловной передачи управления всегда обусловливают выполнение после данной команды не следующей по порядку, а той, адрес которой в явном или неявном виде указан в адресной части команды.
Операции условной передачи управления вызывают тоже передачу управления по адресу, указанному в адресной части команды, но только в том случае, если выполняется некоторое заранее оговоренное для этой команды условие. Это условие в явном или неявном виде указано в коде операции команды. Команд условной передачи управления насчитывается обычно до нескольких десятков — по числу используемых условий.
Команд безусловных передач управления обычно только три:
– команда передачи управления, которая просто передает управление по заданному адресу и больше никаких действий не выполняет;
– команда передачи управления (ее часто называют командой вызова процедуры или подпрограммы), которая кроме передачи управления процедуре еще и запоминает в специальной стековой памяти адрес следующей команды (адрес возврата из процедуры);
– безадресная команда передачи управления (команда возврата из процедуры), возвращающая управление по запомненному адресу возврата.
Вторая и третья из названных команд безусловных передач управления работают «на пару» — одна передает управление процедуре, другая возвращает из нее. Важную роль в выполнении этих команд передачи управления (да и при многих других ситуациях, отрабатываемых компьютером) играет специальным образом организованная область оперативной памяти — стековая память. Обращение к ячейкам этой памяти выполняется по принципу «последний записанный операнд первым считывается» или, иначе, «первым вошел — последним вышел» (FILO — first input, last output). Стековая память позволяет удобно реализовать процессы иерархического обращения ко многим процедурам (количество уровней иерархии практически не ограничено), последовательно записывая и выдавая по принципу FILO адреса возврата каждой из них.
Дата добавления: 2014-12-09 ; просмотров: 954 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
Формат команды
Система команд
Машинная команда представляет собой закодированное по определенным правилам указание микропроцессору на выполнение некоторой операции или действия. Под каждую команду в системной памяти процессора прошиты подпрограммы их выполнения. Ассемблер, анализируя исходник проекта, в сегменте кода, заменяет предложения исходника на эти подпрограммы.
Каждая команда содержит элементы, определяющие:
· Код операции (КОП) описывает, что делать. Значение в поле КОП определяет в блоке микропрограммного управления подпрограмму, реализующую действия для данной команды.
· Операнды описывают объекты, с которыми нужно что-то делать. Операнды в команде могут и не задаваться, а подразумеваться по умолчанию.
· Типы операндов описывают, как делать, обычно задаются неявно.
Правила кодирования команд называются форматом команд. Команды процессоров архитектуры 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” недопустимо. Однако есть единичные случаи, когда подобные сочетания возможны; тогда они специально оговариваются.
Код операции
Это единственный из обязательных элементовкоманды (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.





