Формат и кодирование команды.




Приложение П.2

 

АТРИБУТЫРАЗМЕРОВ ОПЕРАНДА И АДРЕСА, А ТАКЖЕ ФОРМАТ КОМАНДЫВ ПРОЦЕССОРАХ СЕМЕЙСТВА Х86

 

Атрибуты размеров операнда и адреса.

Процессоры семейства iX86 могут работать как с 16-, так и с 32-битовыми адресами. При работе в реальном режиме, размер адресов и операндов, по умолчанию составляет 16 бит. Для программ, работающих в защищенном режиме, размер адреса и операнда определяется битом D из дескриптора кодового сегмента. При D=0, размер адреса и операнда составляет 16 бит, при D=1 – равен 32 битам. Однако, как размер операнда, так и размер адреса может быть изменен при помощи специального префикса команды. При этом, код префикса размера операнда равен 66H, а код префикса размера адреса – 67Н.

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

 

Таблица П.2.1

Установленный бит D дескриптора                
Использование префикса размера операнда - - + + - - + +
Использование префикса размера адреса - + - + - + - +
                 
Размер операнда, бит                
Размер адреса, бит                

 

Заметим, что в R и V режиме дескрипторы не определены и, в этих случаях, процессор автоматически полагает, что бит D=0. Т.е. размеры операндов и адресов по умолчанию принимаются равным 16 битам. Однако, и в R и в V-режиме разрешаются операции с 32 разрядными операндами, для чего необходимо использовать соответствующие префиксы.

 

 

Формат и кодирование команды.

 

На рис. П.2.1 приведен полный формат команды, используемый в процессорах семейства iAPX86.

 

 

Поле префиксов команды Основное поле команды

Префикс повторе-ния или блокиро-вания Префикс переопре-деления разрядно-сти адреса Префикс переопре-деления разрядно- сти операндов Префикс переопре-деления сегмента   Код опера- ции (КОП) Mod R/M SIB Относитель-ный адрес (смещение в команде) Непосред-ственные данные (операнд)
0 или 1 байт 0 или 1 байт 0 или 1 байт 0 или 1 байт   1 или 2 байта 0 или 1 байт 0 или 1 байт 0,1,2 или 4 байта 0,1,2 или 4 байта

 

Рис. П.2.1. Формат команды процессоров i386+

 

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

Назначение и коды префиксов переопределения размеров адреса и данных, а также префиксов повторения, блокировки и перекрытия сегментов, представлены в табл. П.2.1.

Таблица П.2.2

Кодирование префиксов команд в процессорах семейства iAPX86

№ п/п Наименование и назначение префикса Код префикса
1. Префикс повторения REP F3h
2. Префикс повторения REPE/REPZ (синоним REP) F3h
3. Префикс повторения REPNE/REPNZ F2E
4. Префикс блокировки LOCK F0h
5. Префикс переопределения сегмента на CS 2Fh
6. Префикс переопределения сегмента на SS 36h
7. Префикс переопределения сегмента на DS 3Eh
8. Префикс переопределения сегмента на ES 26h
9. Префикс переопределения сегмента на FS 64h
10. Префикс переопределения сегмента на GS 65h
11. Переопределение разрядности операнда 66h
12. Переопределение разрядности адреса 67h

Заметим, что в R- и V-режимах процессоров i386+, как и в базовом процессоре i8086 не используются префиксы переопределения разрядности операндов, а также префиксы переопределения сегмента на FS и GS из-за отсутствия таковых.

 

При этом кодирование сегментных регистров приведено в табл. П.2.3.

 

Использование и возможности переопределения сегментных регистров сведены в табл. П.2.4.

 

 

Таблица П.2.3

Кодирование сегментных регистров в процессорах семейства iAPX

 

Тип сегментного регистра Код сегментного регистра при R- и V-режимах работы процессора Код сегментного регистра при Р-режиме работы процессора
ES    
CS    
SS    
DS    
FS --  
GS --  

 

 

Таблица П.2.4

Возможности переопределения сегментных регистров

  Тип обращения к памяти Базовый адрес сегмента Сегментное смещение
По умолчанию Возможность переопределения  
Выборка команды CS Нет IP(EIP)
Обращение к стеку SS Нет SP(ESP)
Адресация операнда DS CS, SS, ES, FS, GS EA
Адресация операнда с использованием BP(EBP) или SP(ESP) как базового регистра SS CS, DS, ES, FS, GS EA
Адресация элемента цепочки-источника DS CS, SS, ES, FS, GS SI(ESI)
Адресация элемента цепочки-получателя (приемника) ES Нет DI(EDI)

 

 

Формат байта “mod R/M” в формате команды приведены на рис. П.2.2

7 6 5 4 3 2 1 0

mod reg/op reg/mem

Указание на регистровую адресацию, или код типа смещения DISP при вычислении эффективного адреса.
Код регистра или способ вычисления эффективного адреса ЕА (при mode # 11). Определяет месторасполо- жение второго операнда совместно с байтом SIB (если он присутствует)
Код регистра, определяющего месторасположение первого операнда или расширение кода операции

 

 

Рис. П.2.2 Формат байта “mod R/M” кода команды.

 

Кодирование поля “mode” в байте “mod R/M” кода команды приведено в табл. П.2.5.

Таблица П.2.5

Кодирование поля mode

Код Функциональное значение кода
  DISP = 0
  DISP = знак disp 8
  DISP = disp 16
  Признак регистровой адресации

 

где disp 8, disp 16 – восьмиразрядное и шестнадцатиразрядное смещение в команде. Кодирование поля “reg” в байте “mod R/M” кода команды приведено в табл. П.2.6.

Таблица П.2.6

Кодирование поля reg

Поле reg Поля W в команде нет Поле W в команде имеется
  16-битовый операнд 32-битовый операнд 16-битовый операнд 32-битовый операнд
      W = 0 W = 1 W = 0 W = 1
  AX EAX AL AX AL EAX
  CX ECX CL CX CL ECX
  DX EDX DL DX DL EDX
  BX EBX BL BX BL EBX
  SP ESP AH SP AH ESP
  BP EBP CH BP CH EBP
  SI ESI DH SI DH ESI
  DI EDI BH DI BH EDI

 

Признаком размерности операнда в коде команды служит состояние младшего (нулевого) бита D0 (бита W) в поле байта кода операции (КОП) команды. При W = 0 используются 8 разрядные операнды, а при W = 1 – 32 разрядные.

То есть, если бит W = 0, то операндом является 8-ми битовый код, который берется из AL, BL и т.д. Если же бит W = 1, то операнд берется в зависимости от того, каким он установлен битом D дескриптора и префиксами переопределения размеров операндов, либо из AX, BX и т.д. (при 16 разрядных операндах) либо из EAX, EBX и т.д. (при установлении 32 разрядных операндов).

Состояние второго справа бита (d) в поле байта кода операции (КОП) команды, определяет направление передачи данных в двухоперандных командах. При d = 0 происходит передача данных из регистра (reg) в регистр/память (reg/mem), а при d = 1 происходит передача данных из регистра/памяти (reg/mem) в регистр (reg). В командах сдвига и вращения, бит D1 КОП (бит d) определяет сдвиг на 1 разряд (V = 0) или на число разрядов, указанных в CL.

Формирование эффективного адреса памяти второго операнда, осуществляемое при поле mode ¹11, вычисляется при 16 битовой адресации (при R-режиме процессоров i386+) в соответствии с табл. П.2.7. При 32 битовой адресации (в Р-режиме процессоров i386+) – в соответствии с табл. П.2.7 (при поле r/m ¹100), и табл. П.2.8 (при поле r/m = 100).

 

Таблица П.2.7

Формирование эффективного адреса памяти при 16 битовой адресации

Поле r/m Адрес памяти второго операнда
  mode = 00 mode = 01 mode = 10
  BX + SI BX + SI + d8 BX + SI + d16
  BX + DI BX + DI + d8 BX + DI + d16
  SS:[BP + SI] SS:[BP + SI + d8] SS:[BP + SI + d16]
  SS:[BP + DI] SS:[BP + DI + d8] SS:[BP + DI + d16]
  SI SI + d8 SI + d16
  DI DI + d8 DI + d16
  d16 SS:[BP + d8] SS:[BP + d16]
  BX BX + d8 BX + d16

 

Таблица П.2.8

Формирование эффективного адреса памяти при ЕА при 32 битовой адресации

(r/m ¹ 100)

Поле r/m Адрес памяти второго операнда
  mode = 00 mode = 01 mode = 10
  EAX EAX + d8 EAX + d32
  ECX EC + d8 ECX + d32
  EDX EDX + d8 EDX + d32
  EBX EBX + d8 EBX + d32
  имеется SIB имеется SIB имеется SIB
  d32 SS:[EBP + d8] SS:[EBP + d32]
  ESI ESI + d8 ESI + d32
  EDI EDI + d8 EDI + d32

 

Таким образом, присутствие в команде байта SIB обусловлено в самой кодировке байта “mod R/M”, а именно кодом поля r/m этого байта.

 

 

Таблица П.2.9

Формирование эффективного адреса памяти ЕА при 32 битовой адресации

(r/m = 100)

 

Поле base Адрес памяти второго операнда
  mode = 00 mode = 01 mode = 10
  EAX + SS × ind EAX + SS × ind + d8 EAX + SS × ind + d32
  ECX + SS × ind ECX + SS × ind + d8 ECX + SS × ind + d32
  EDX + SS × ind EDX + SS × ind + d8 EDX + SS × ind + d32
  EBX + SS × ind EBX + SS × ind + d8 EBX + SS × ind + d32
  SS:[ESP+SS × ind] SS:[ESP + SS × ind + d8] SS:[ESP + SS × ind + d32]
  d32 + SS × ind SS:[EBP + SS × ind + d8] SS:[EBP + SS × ind + d32]
  ESI + SS × ind ESI + SS × ind + d8 ESI + SS × ind + d32
  EDI + SS × ind EDI + SS × ind + d8 EDI + SS × ind + d32

 

Отметим также, что при 16 битовой адресации (R-режима) используются только регистры BX, SI, DI и BP (в стековых ситуациях неявно привлекается регистр SP). При 32 битовой адресации (Р-режиме) для адресации можно использовать любой регистр общего назначения и, кроме того, может быть задействован байт SIB (Scale, Index, Base – масштаб, индекс, база), формат которого приведен на рис. П.2.3, а кодирование – в табл. П.2.10.

 

 

7 6 5 4 3 2 1 0

SS Index Base

 

Рис.П.2.3. Формат байта SIB при 32 битовой адресации.

 

 

SS - масштабный множитель (коэффициент) для режима масштабирования индексной адресации.

Index - код регистра общего назначения, используемый как индексный регистр.

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

 

Таблица П.2.10

Кодирование полей Index и SS в байте SIB

 

Код поля Index Регистр, используемый как индексный Код поля SS Множитель для содержимого индексного регистра  
  EAX   × 1
  ECX   × 2
  EDX   × 4
  EBX   × 8
  Отсутствует    
  EBP    
  ESI    
  EDI    

Примечание: Когда поле Index содержит 100, показывая отсутствие индексного регистра, поле SS должно содержать 00; в противном случае эффективный адрес не определен.

 


 

Приложение П.3
СИСТЕМА КОМАНД


Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: