Курс лекций по вычислительной технике

       

Структура команды (форматы команд) IA-


Команды могут состоять из следующих элементов (полей):

 

 

Кол.байт

Назначение

0-1

Префикс

1

Код операции

0-1

Дополнительны код операции MODR/M

0-1

SIB

0,1,2,4

Смещение(Dis)

0,1,2,4

Непосредственный(Im)

операнд

 

1.Префикс – (0-1) байт: уточняет или модифицирует выполнение команды. По существу это тоже дополнительный код операции. Типы префиксов:

- префикс размера операнда - переключает разрядность операнда с 16 на 32 (и наоборот); 386+

- префикс размера адреса - переключает разрядность адреса с 16 на 32 (и наоборот); 386+

- префикс замены  сегмента - подключает  альтернативный,  вместо заданного по умолчанию (26-ES;36-SS;2E-CS;3E-DS).

- префикс блокировки локальной шины на время операции. LOCK (F0)

- префикс повторения -  используется  в  командах обработки строк (F2,F3)

2. Код операции – 1  байт.

3. Дополнительны код операции и режим адресации MODR/M (0-1)байт.

4. SIB – масштаб – индекс - база. Его наличие определяется кодом операции. Используется для расширения возможности адресации. 386+

5. Смещение (Dis) – (0,1,2,4) байта. Целое число со знаком.

6. Непосредственный операнд (Im) - (0,1,2,4) байта.

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

Однобайтовый код операции (без операндов или с одним операндом).

 

 

7…    0

7… 1  0

7…4 3 210

  Коп

Коп   w

Коп w REG

 

 

    

 

 

Обычно занимает один байт (первичный код операции), но может  занимать и  последующие байты (вторичный код операции).

 

Как правило "w" определяет размер операнда

    w=0  - 8бит;

    w=1 - 16бит (в 80386+ может быть и 32 бита, что определяется полем «Dd» в дескрипторе сегмента), а с помощью префикса размера операнда размер операнда может быть заменён на альтернативный.

 

     Поле "REG" определяет номер регистра            

REG(R/M)

W=0

W = 1

16

32

0

AL

AX

EAX

1

CL

CX

ECX

2

DL

DX

EDX

3

BL

BX

EBX

4

AH

SP

ESP

5

СН

EBP

6

DH

SI

ESI

7

BH

DI

EDI

<
 

Для непосредственной адресации.

 

 

7… 2 1 0

Коп  s w

 

 

  В командах в командах типа сложения с непосредственным адресом.

     sw = 00 - 8-битные операнды

     sw = 01 - 16-и (32-х) битные с 16-и (32-х)битным непосредственным адресом.

     sw = 11 - 16  (32-х) битные с  8- и битным непосредственным адресом, который расширяется знаком до 16-и (32).

 

Двухбайтный код операции.

 

2-й байт  (MODR/M).                    1-й байт

 

7      6      5     4       3       2  1   0

7…   1 0

 MOD  ¦  REG/КОП   ¦   R/M  

Коп  d w

 

 

 

d = 0  - место результата определяется полем MOD и R/M в следующем байте (описателе регистра); называемом MODR/M.

d = 1 - место результата определяется полем REG  описателя регистра.      

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

                                  

Поле МOD  определяет -

 11 - R/M: второй операнд тоже регистр.

Все остальные значения означают, а) что второй операнд берётся из памяти со смещением или без.

 01 - смещение занимает 1 байт и модифицируется.

 10 - смещение занимает 2 (4)байта и модифицируется.

 Поле REG может быть как номером регистра, так и вторичным (дополнительным) кодом операции. Это зависит от значения основного КОП.

Поле R/M определяет правила формирования адреса (при MOD?11).             

Замечания.

1)* - по умолчанию регистр сегмента DS. 

2)Незаданный адрес считается нулевым.

3)Адрес, заданный байтом (D8), расширяется знаком до слова.

4)D8, D16 - смещение, последующие байты

 

Байт  SIB  (Scale-Index-Base) – масштаб – индекс - база  следует  3-м байтом  - описатель адреса

 

     SIB  присутствует,  если  MOD?11 а  R/M=100

 

Формат SIB

                  

Scale

Index

Base

7   6 

5 4 3

2 1 0

 

         Компоненты адреса, определяемые полями SIB.

Значение S/I/B  

Множитель(S)

Индекс (I)

База (B)

0

1

ЕАХ

ЕАХ

1

2

ЕСХ

ЕСХ

2

4

EDX

EDX

3

8

ЕВХ

ЕВХ

4     

-

нет,SS=0

ESP

5     

-

ЕВР

D32*    

6      

-

ЕSI

ESI

7     

-

EDI

EDI

<


 

* если MOD=0,иначе ЕВР. Адресация абсолютная.

 

     Если  режим  адресации  предусматривает  использование  смещения,  то  оно  занимает  последующие байты.

     Если режим адресации предусматривает использование непосредственного операнда, то он занимает последующие байты.

 

  Форматы команд с двумя операндами.

 

1.       Формат "регистр-регистр"

 





1 байт



1-й байт



11



rеg1



reg2



Коп



d



w



76



5 4 3



2 1 0



7 6 5 4 3 2



1



0

 

       reg2*reg1> reg2

       reg1*reg2 >reg1

 

w  - размер операндов: "1" - слова   w=0  - байты

 d -  регистр результата и первого операнда

 

2.       Формат "регистр-память"

                      





0– 2 байта



1 байт



1 байт



   Dis



MOD



REG



R/M



Коп



D



W



 



7 6



5 3



2 1 0



7 6 5 4 3 2



1



0

 

      d=0 (REG)*(EA) > REG

      d=1 (EA)*REG> (EA)

 

      MOD

      0   Dis - 0 байтов

      1   Dis - 1 байт

      2   Dis - 2 байта

  

     3. Формат "регистр - непосредственный операнд".

         





1 – 2 байта



  1 байт



1 байт



I



 3



Коп



R/M



Коп



S



W



7 6 5 4 3 2 1 0



7 6



5 4 3



2 1 0



7 6 5 4 3 2



1



0

 

W=0: Im  - 1байт; W=1: Im  - 2байта.

S – признак расширения байта знаком до слова.

 

     4. Формат "память - непосредственный операнд".

 





1 – 2 байта



0 – 2 байта



 1 байт



1 байт



  Im



Dis



3



Код



 R/M



Коп



S



W



 



 



7 6



5 4 3



2 1 0



765432



1



0

 

        (EA)*Im > EA

4.9.  Методы формирования адреса.

 

     Цель различных методов адресации заключается в том, чтобы  с  помощью ограниченного объёма информации получить доступ к большим массивам информации: данных, констант, команд. Различают следующие виды адресации:

     а) прямая



     б) непосредственная

     г) сокращенная

     д) косвенная

     е) индексированная

     ж) относительная

 

1)             При прямой адресации адрес операнда записывается в адресном полекоманды. Число адресуемых ячеек памяти определяется  разрядностью  адресного поля (полей) команды. Способ мало экономичен, поскольку в каждом участке программы используется  ограниченное  число  обычно  рядом расположенных операндов или команд. Эффективен для одноадресных команд  или для команд с операциями над регистрами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2) При непосредственной адресации в значение операнда  является  одним из полей команды. Этот метод очень удобен для адресации  констант.

Недостатком его - трудность хранения операндов большой длины.  Частный случай - операнд располагается в памяти  вслед  за  командой.  При  использовании многословных команд этот недостаток можно считать преодолимым.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3) При косвенной адресации адресное поле содержит  адрес  ячейки,  в которой хранится адрес операнда. Частный случай регистровая  косвенная адресация.

Счётчик команд
 
        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                  

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

 

 

 

 

 

 

 

 

 

 

 

 

 



">

 

 



 

 

 

Операнд
 
                                                                           ЕА=А±(РИ)

                                                                           РИ±1 в РИ

 

 

  5) При относительной или базовой адресации в команде  вместо  собственно  адреса указывается его смещение относительно некоторого базового адреса  (или индекса). При этом базовый  адрес  определяет  местонахождение  начала массива, а  индекс  местонахождение  ячейки  внутри  массива.  Относительная адресация имеет много общего с адресацией с индексированием, но, как правило, смещение складывается с содержимым разных  регистров и, в частности с содержимым счётчика команд, что  позволяет  создавать относительные (перемещаемые) программы, т.е. программы, не зависящие  от  местоположения в памяти.

     6) Страничная адресация (метод контактенации) подразумевает, что в адресном поле  команды помещаются только младшие разряды адреса операнда. Остальные разряды находятся в специальном регистре. Вообще говоря, их может быть несколько; тогда в команде должен быть указатель (номер, адрес) регистра, в котором хранятся старшие разряды адреса. В этом случае  память  как бы разбивается на куски (страницы). Т.о. в этом регистре хранится  номер страницы. Частным случаем регистра страницы являются старшие  разряды регистра, в котором хранится адрес команды (счётчика команд).

 

                   

                      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

              

 

Один из вариантов сокращенной адресации -  метод  банков,  когда каждой задаче выделяется свой банк.

Обобщающим методом сокращённой адресации является метод  виртуальной памяти, делающий доступной всю имеющуюся память. В этом случае  в ОЗУ хранится произвольный набор страниц, который аппаратно  обновляется за счёт обмена с  внешней  памятью.  Перечень  действующих  страниц обычно хранится в АЗУ.


Если размер страницы - переменный и для  каждой страницы указывается её размер, то такая организация  называется  сегментной.


 

     г) частота использования различных видов адресации в компьютерах типа СИСК.

     - регистровая - 41%

     - с индексацией - 25%

     - непосредственная - 16%

     - прямая - 2,5%

     - косвенная - 9%

     - косвенная с индексацией - 3%

4.10. Режимы адресации IA-32 при обращении к памяти.

 

    Адресация может быть 32-х или  16-разрядной.

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

    При 16-разрядной  адресации  в  качестве  компонентов адреса  используются младшие разряды соответствующих регистров.

 

16- разрядный режим.

 

LА(20)= ЕА +RS*16 , где

LA -   линейный адрес

ЕA = (B)+(I)+D.

ЕА – эффективный (исполнительный) адрес

(B) – содержимое базового регистра:  ВХ или ВР

(I) – содержимое индексного регистра: SI или DI

D – смещение (8 или 16 разрядов)

RS  – регистр сегмента: CS, DS, SS, ЕS, FS или GS.

Отдельные компоненты могут отсутствовать.    

32-разрядный защищённый режим

  В общем случае эффективный адрес вычисляется по формуле:

               ЕА = (B) + (I) * SС + D

   (B)- Base: содержимое базового регистра (начало массива)- любой РОН.

    (I)- Index: содержимое индексного регистра (указание элемента массива)

     SC – Scale: размер элемента массива (1,2,4,8), указывается в команде.

     D –Displacement:  смещение (0,8,16 или 32 разряда), указывается в команде.

     Масштабирование индекса возможно только при 32-битной адресации.

  Различия видов адресации для 16-и и 32-х разрядных режимах.

 

 

Компонент адреса

«16»

«32»

Регистр базы

ВХ или ВР

любой РОН

Регистр индекса

SI или DI

любой, кроме ESP.

Масштаб (шаг)

1

1/2/4/8

Смещение

0/8/16 бит

0/8/32 бит

 

 

 



 

 

    

 

  Использование сегментных регистров при обращении к памяти.

 

 Тип обращения

 (назначение адреса)       

По

 умолчанию

           

Альтернативный.

(по префиксу)

 Выборка команд

CS       

     - 

 Операции со стеком

SS

      -

 Строка-приёмник

ES

      -

 Обмен данными (регистр базы  BP, SP, EBP, ESP)

DS

CS, ES, SS, FS, GS

 Прочие ссылки

SS

CS, DS, ES, FS, GS

 

Таким образом  при обращении к памяти имеется   семь режимов адресации.

Хотя основных  режимов два: прямая и косвенная (регистровая).

 

1.       EA = D - прямая адресация. Имеет две разновидности: прямая, относительная (смещение относительно указателя команд IP – для передач управления) и прямая абсолютная.

2.       EA = (B) - косвенная базовая адресация; где (В) – содержимое любого регистра, кроме SP/ESP или БР/ЕВР.

3.       EA = (B) + D – косвенная базовая со смещением.

4.       EA = (I)*S  – косвенная индексная масштабированная адресация, где I – SI или DI, S – множитель, определяемый SIB.

5.       EA = (I)*S + D – косвенная индексная  масштабированная адресация со смещением.

6. EA = (B) + (I)*S  - базово индексная масштабированная                                              адресация.

7. EA = (B) + (I)*S + D - базово индексная масштабированная        адресация со смещением.

 

Во всех случаях линейный адрес формируется с учётом значения  сегмента.

 


Содержание раздела