Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Структура машинной команды. Префикс замены сегмента в памяти.



Структура команды процессора

Машинная команда должна содержать следующую информацию:

- код операции – помещается в первом байте команды, предполагает работу без операндов, с одним или двумя операндами;

- способ адресации и собственный адрес – в команде д.б. закодировано, содержатся ли в регистрах операнды, являются непосредственными данными или находятся в памяти. Форматы команд МП в языке Ассемблера строятся в соответствии с двоичной внутренней машинной формой представления, по кот-ой

обобщенный формат использует базовую двухбайтную структуру для построения основной части команды


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

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

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

Префиксы замены сегмента имеют следующие значения:

2eh – замена сегмента CS;

36h – замена сегмента SS;

3eh – замена сегмента DS;

26h – замена сегмента ES;

64h – замена сегмента FS;

65h – замена сегмента GS.

Если режим адресации использует регистр BP для формирования ФА, по умолчанию используется содержимое сегментного регистра SS, в других режимах адресации – DS. Если в команде используется префикс замены сегмента, то длина основной команды увеличивается на один байт префикса переключения сегментов, а время выполнения – на два цикла.

Аналогичная замена невозможна при вычислении адреса текущей команды, в этом случае всегда используется регистр CS. При выполнении основных манипуляций записи-чтения со стеком с использованием регистра

SP всегда подключается сегментный регистр SS, а для адресации операнда-приемника в командах обработки строк используется только сегментный регистр ES.

2. Префикс разрядности адреса уточняет разрядность адреса (32- или

16-разрядный). Каждой команде, в кот-ой использ-ся адресный операнд, ставится в соответствие разрядность адреса этого операнда. Этот адрес может иметь разрядность 16 или 32 бит. Если разрядность адреса для данной11 команды 16 бит, это означает, что команда содержит 16-разрядное смещение, которое соответствует 16-разрядному смещению адресного операнда относительно начала некоторого сегмента. Если разрядность адреса 32 бит, это означает, что команда содержит 32-разрядное смещение, которое соответствует 32-разрядному смещению адресного операнда относительно начала сегмента, а по его значению формируется 32-битное смещение в сегменте. С помощью префикса разрядности адреса можно изменить

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

3. Префикс разрядности операнда аналогичен префиксу разрядности адреса, но указывает на разрядность операндов (32- или 16-разрядные), с

кот-ми работает команда. В реальном режиме и режиме виртуального i8086 процессора значения атрибутов – 16 бит. В защищенном режиме значения атрибутов зависят от состояния бита D в дескрипторах исполняемых сегментов. Если D = 0, то значения атрибутов, действующие по умолчанию, равны 16 бит; если D = 1, то 32 бит. Значения префиксов разрядности операнда – 66h и разрядности адреса – 67h.

4. Префикс повторения используется с цепочечными командами (командами обработки строк). Этот префикс «зацикливает» команду для обработки всех элементов цепочки. Система команд поддерживает два типа

префиксов повторения:

− безусловные (rep – 0f3h), заставляющие повторяться цепочечную команду некоторое количество раз;

− условные (repe/repz – 0f3h, repne/repnz – 0f2h), кот-ые при «зацикливании» проверяют некот-ые флаги, и по рез-там проверки допускают досрочный выход из цикла.

КОП – это обязательный элемент, описывающий операцию, выполняемую командой. Многим командам соответствует несколько кодов операций, каждый из которых определяет нюансы выполнения операции.12

Последующие поля машинной команды определяют местоположение операндов, участвующих в операции, и особенности их использования. Само поле кода занимает 8 бит и имеет определенный формат (рис. 2).

Поле размера равно нулю, если операнды имеют размер 1 байт. Единичное значение указывает на слово.

Формат поля КОП

 

 


Направл-е обозначает операнд-приемник. При нулевом значении рез-т присваивается правому операнду, при единичном – левому.

Размер данных и кол-во следующих байтов команды определяется конкретным кодом операции и наличием в команде фиксированных байтов префиксов переключения разрядности данных и адресации.

Байт режима адресации modR/M (постбайт). Значение этого байта определяет используемую форму адреса операндов. Операнды могут находиться в памяти, в одном или двух регистрах. Если операнд находится в памяти, то байт modR/M определяет компоненты (смещение, базовый и индексный регистры), используемые для вычисления его эффективного адреса. В защищенном режиме для определения местоположения операнда в памяти может дополнительно использоваться байт SIB (Scale-Index-Base – масштаб-индекс-база). Байт modR/M состоит из трех полей.

1. Поле Mod определяет количество байт, занимаемых в команде адресом операнда. Поле Mod используется совместно с полем R/M, которое указывает способ модификации адреса операнда «Смещение» в команде.13

Например, если Mod = 00, то поле «Смещение» в команде отсутствует и адрес операнда определяется содержимым базового и (или) индексного регистра. Какие именно регистры будут использоваться для вычисления эффективного адреса, определяется значением этого байта.

Если Mod = 01, то поле «Смещение» в команде присутствует, занимает один байт и модифицируется содержимым базового и (или) индексного регистра.

Если Mod = 10, то поле «Смещение» в команде присутствует, занимает 2 или 4 байта (в зависимости от действующего по умолчанию или определяемого префиксом размера адреса) и модифицируется содержимым базового и (или) индексного регистра.

Если Mod = 11, то операндов в памяти нет: они находятся в регистрах. Это же значение байта Mod используется в случае, когда в команде

применяется непосредственный операнд;

2. Поле Reg/КОП определяет регистр, находящийся в команде на месте первого операнда, либо возможное расширение кода операции;

3. Поле R/M используется совместно с полем Mod и определяет регистр, находящийся в команде на месте первого операнда (если Mod = 11), или используемые для вычисления эффективного адреса (совместно с полем смещение в команде) базовые и индексные регистры.

Допустимые варианты 16-битових адресов процессоров ix86 с явным указанием сегментных регистров, используемых по умолчанию, и количества дополнительных циклов, затрачиваемых на адресацию в процессоре 8086, приведены в табл. 1.

16-битовые адреса процессоров ix86



В табл. 1 [регистр] обозначает, что содержимое указанного регистра, добавляемое при формировании исполнительного адреса в пределах 64 Кбайтов используемого сегмента. Имя сегментного регистра определяет использование сегментного регистра по умолчанию. Дополнительные циклы обращения (дц) приведены для процессоров Intel-8086/88. В 32-битовых

процессорах при задании префикса 32-битовых данных вместо двухбайтных регистров используются четырехбайтные с дополнительной начальной буквой Е.

Байт масштаб-индекс-база (байт SIB) исп-ся для расшир-я возможностей адресации операндов.

На наличие байта SIB в машинной команде указывает сочетание одного из значений 01 или 10 поля Mod и значения поля R/M= 100. Байт SIB состоит

из трех полей.

1. Поле масштаба Scale. В этом поле размещается масштабный множитель для индексного компонента Index, занимающего следующие три

бита байта SIB. В поле Scale может содержаться одно из следующих значений: 1, 2, 4, 8. При вычислении эффективного адреса на это значение будет умножаться содержимое индексного регистра.

2. Поле Index используется для хранения номера индексного регистра, кот-ый прим-ся для вычис-я эффективного адреса операнда.

3. Поле Base используется для хранения номера базового регистра, кот-ый также применяется для вычисления эффективного адреса операнда. В качестве базового и индексного регистров могут использоваться практически все регистры общего назначения. В машинной форме после основной части команды с указателями модификаций адреса в памяти может располагаться: двухбайтный адрес для прямой адресации, однобайтное или двухбайтное смещение; одно- или двухбайтные непосредственные данные или двухбайтное смещение, а также двухбайтный сегментный адрес для прямой межсегментной адресации. Длина команд ЦП без префиксов может достигать шести байтов. Некоторые группы команд имеют дополнительные сокращенные форматы, кот-ые обрабатываются несколько быстрее.


 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 282; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.017 с.)
Главная | Случайная страница | Обратная связь