2.5.1. Форматы команд и способы адресации в CISC-процессорах

К оглавлению1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 
34 35 36 37 38 39 40 41 42 43 44 45 

В качестве примера рассмотрим набор команд и способы адресации, ис­пользуемые в процессорах интеловской архитектуры. Для этих процессоров в табл. 2.1 приведены данные о развитии их системы команд.

Таблица 2.1

Развитие системы команд процессоров архитектуры Intel

Год появле­ния набора команд

 

Тип процессора, где набор был реа­лизован впервые

 

Общее число команд

 

Смысл расширения

 

1979

 

i8086

 

170

 

Исходный набор команд х 86

 

1985

 

i386

 

220

 

50 новых команд, необходимых для перехода к 32-разрядной ар­хитектуре

 

1997

 

Pentium/MMX

 

277

 

57 ММХ-команд для параллель­ной обработки видео- и аудио­информации

 

1999

 

Katmai (Pentium III)

 

347

 

70 команд: SIMD-FP, дополнена ММХ, управление потоковым обменом данными с памятью

 

 

В базовый набор команд 8086 входили операции с плавающей запятой (FP), но до i386 включительно они выполнялись отдельным сопроцессором, которого могло в компьютере и не быть. Блок FP-функций был включен в со­став основного процессора в i486, однако в варианте 486SX обращение к этому блоку было заблокировано. Эти команды стали обязательной частью процессора, только начиная с Pentium.

Базовый набор команд 32-разрядного интеловского процессора обеспе­чивает выполнение операций над операндами, которые находятся в регистре, памяти или непосредственно в команде. В набор входят безадресные, одно-, двух- и трехадресные команды. Процессор реализует следующие шесть ти­пов двухадресных команд:

- регистр—регистр;

- память — регистр;

- непосредственный операнд — регистр;

- регистр — память;

- память — память;

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

Операнды могут содержать 8, 16 или 32 разряда. Для реализации раз­личных типов команд определены форматы, задающие порядок размещения информации о выполняемой операции и способах выбора операндов.

Общий формат команд

Обобщенный вид формата команды показан на рис. 2.10. Он допускает наличие следующих полей: кода операции (1 или 2 байта); байтов адресации (О, 1 или 2 байта); байтов смещения (0, 1,2 или 4 байта); байтов непосредст­венных данных — операндов (0,1,2 или 4 байта).

КОП

 

Байты адресации

 

Смещение

 

Операнд

 

MODR/M

 

SIB

 

1 или 2 байта

 

0 или 1 байт

 

0 или 1 байт

 

0,1,2 или 4 байта

 

0,1,2 или 4 байта

 

 

Рис. 2.10. Общий формат команд

Команды содержат от 1 до 11 байт. Проведенные оценки показывают, что в среднем длина команды составляет 4 — 5 байт.

. Рассмотрим назначение основных полей кода команды (рис.2.10). Код операции (КОП) определяет тип выполняемой операции, а также в некоторых командах в первом байте может содержаться бит W, задающий разрядность операндов:

W=0 — операция с байтами;

W = 1 — операция со словами (16 или 32 разряда).

В ряде команд первый байт КОП содержит поля reg или sreg, опреде­ляющие адрес используемых регистров. Трехбитовое поле reg задает выби­раемый регистр в соответствии с разрядностью обрабатываемых операндов. Поле sreg (двух или трехбитовое) определяет адрес сегментных регистров.

Байт адресации MOD R/M содержит три поля (рис. 2.11). Поля: MOD и R/M задают адрес одного из операндов, который может храниться в регистре или ячейке памяти. Кодировка этих полей определяет выбираемый способ адресации.

Рис. 2.11. Форматы байтов MOD R/M и SIB

В одноадресных командах поле REG/КОП содержит дополнительные биты кода операции. В двухадресных командах поле REG содержит адрес ре­гистра, в котором хранится второй из операндов. Тип команды (одно- или двухадресная) определяется первым битом КОП. Поле MOD указывает, ка­кой разрядности смещение используется для формирования адреса. Если оно имеет значение 00 (при некоторых значениях R/M) или 01, 10, то использует­ся 8-, 16- или 32-разрядное смещение. Это смещение задается соответствую­щими байтами в коде команды, которые располагаются после байтов адреса­ции.

Для реализации некоторых способов относительной адресации исполь­зуется байт SIB. Он содержит 3-битовые поля INDEX и BASE, определяю­щие выбор регистров, используемых в качестве индексного и базового реги­стров, и поле SS, задающее масштабный коэффициент для модификации зна­чения индекса.

При выполнении операций с непосредственной адресацией один из опе­рандов задается в последних байтах команды (рис. 2.10). В этом случае КОП ряда команд содержит бит S, определяющий способ использования непосред­ственно задаваемых данных.

Способы адресации

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

Базовый адрес определяется содержимым 16-разрядного сегментного ре­гистра и зависит от режима работы процессора. Если он работает в режиме обработки 16-разрядных данных (режим реальных адресов), то 20-разрядный базовый адрес формируется путем сдвига содержимого сегментного регистра на 4 разряда влево. Если процессор работает в режиме обработки 32-разрядных данных (защищенный режим), то 32-разрядный базовый адрес со­держится в дескрипторе, выбор которого из таблицы дескрипторов осущест­вляется с помощью селектора — содержимого соответствующего сегментно­го регистра.

В качестве относительного адреса используется содержимое регистров общего назначения или эффективный адрес (ЕА), который формируется в со­ответствии с заданным способом адресации. ЕА является 16- или 32- разряд­ным и формируется в зависимости от значения полей MOD и R/M и содер­жимого байта SIB (для 32-разрядных адресов). В общем случае ЕА образу­ется путем арифметического сложения трех компонентов:      

- содержимого базового регистра;

- содержимого индексного регистра;

- 8, 16, 32-разрядного смещения, заданного в одном, двух или четырех

байтах команды.

В зависимости от значений полей MOD и R/M для формирования ЕА используются все или часть этих слагаемых.

В процессоре осуществляются следующие способы адресации операн­дов:

   - непосредственная адресация;

   - регистровая адресация;

- косвенно-регистровая адресация;

- прямая адресация;

- базовая адресация;

- индексная адресация;

- базово-индексная адресация;

- базово-индексная адресация со смещением.

В качестве примера рассмотрим набор команд и способы адресации, ис­пользуемые в процессорах интеловской архитектуры. Для этих процессоров в табл. 2.1 приведены данные о развитии их системы команд.

Таблица 2.1

Развитие системы команд процессоров архитектуры Intel

Год появле­ния набора команд

 

Тип процессора, где набор был реа­лизован впервые

 

Общее число команд

 

Смысл расширения

 

1979

 

i8086

 

170

 

Исходный набор команд х 86

 

1985

 

i386

 

220

 

50 новых команд, необходимых для перехода к 32-разрядной ар­хитектуре

 

1997

 

Pentium/MMX

 

277

 

57 ММХ-команд для параллель­ной обработки видео- и аудио­информации

 

1999

 

Katmai (Pentium III)

 

347

 

70 команд: SIMD-FP, дополнена ММХ, управление потоковым обменом данными с памятью

 

 

В базовый набор команд 8086 входили операции с плавающей запятой (FP), но до i386 включительно они выполнялись отдельным сопроцессором, которого могло в компьютере и не быть. Блок FP-функций был включен в со­став основного процессора в i486, однако в варианте 486SX обращение к этому блоку было заблокировано. Эти команды стали обязательной частью процессора, только начиная с Pentium.

Базовый набор команд 32-разрядного интеловского процессора обеспе­чивает выполнение операций над операндами, которые находятся в регистре, памяти или непосредственно в команде. В набор входят безадресные, одно-, двух- и трехадресные команды. Процессор реализует следующие шесть ти­пов двухадресных команд:

- регистр—регистр;

- память — регистр;

- непосредственный операнд — регистр;

- регистр — память;

- память — память;

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

Операнды могут содержать 8, 16 или 32 разряда. Для реализации раз­личных типов команд определены форматы, задающие порядок размещения информации о выполняемой операции и способах выбора операндов.

Общий формат команд

Обобщенный вид формата команды показан на рис. 2.10. Он допускает наличие следующих полей: кода операции (1 или 2 байта); байтов адресации (О, 1 или 2 байта); байтов смещения (0, 1,2 или 4 байта); байтов непосредст­венных данных — операндов (0,1,2 или 4 байта).

КОП

 

Байты адресации

 

Смещение

 

Операнд

 

MODR/M

 

SIB

 

1 или 2 байта

 

0 или 1 байт

 

0 или 1 байт

 

0,1,2 или 4 байта

 

0,1,2 или 4 байта

 

 

Рис. 2.10. Общий формат команд

Команды содержат от 1 до 11 байт. Проведенные оценки показывают, что в среднем длина команды составляет 4 — 5 байт.

. Рассмотрим назначение основных полей кода команды (рис.2.10). Код операции (КОП) определяет тип выполняемой операции, а также в некоторых командах в первом байте может содержаться бит W, задающий разрядность операндов:

W=0 — операция с байтами;

W = 1 — операция со словами (16 или 32 разряда).

В ряде команд первый байт КОП содержит поля reg или sreg, опреде­ляющие адрес используемых регистров. Трехбитовое поле reg задает выби­раемый регистр в соответствии с разрядностью обрабатываемых операндов. Поле sreg (двух или трехбитовое) определяет адрес сегментных регистров.

Байт адресации MOD R/M содержит три поля (рис. 2.11). Поля: MOD и R/M задают адрес одного из операндов, который может храниться в регистре или ячейке памяти. Кодировка этих полей определяет выбираемый способ адресации.

Рис. 2.11. Форматы байтов MOD R/M и SIB

В одноадресных командах поле REG/КОП содержит дополнительные биты кода операции. В двухадресных командах поле REG содержит адрес ре­гистра, в котором хранится второй из операндов. Тип команды (одно- или двухадресная) определяется первым битом КОП. Поле MOD указывает, ка­кой разрядности смещение используется для формирования адреса. Если оно имеет значение 00 (при некоторых значениях R/M) или 01, 10, то использует­ся 8-, 16- или 32-разрядное смещение. Это смещение задается соответствую­щими байтами в коде команды, которые располагаются после байтов адреса­ции.

Для реализации некоторых способов относительной адресации исполь­зуется байт SIB. Он содержит 3-битовые поля INDEX и BASE, определяю­щие выбор регистров, используемых в качестве индексного и базового реги­стров, и поле SS, задающее масштабный коэффициент для модификации зна­чения индекса.

При выполнении операций с непосредственной адресацией один из опе­рандов задается в последних байтах команды (рис. 2.10). В этом случае КОП ряда команд содержит бит S, определяющий способ использования непосред­ственно задаваемых данных.

Способы адресации

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

Базовый адрес определяется содержимым 16-разрядного сегментного ре­гистра и зависит от режима работы процессора. Если он работает в режиме обработки 16-разрядных данных (режим реальных адресов), то 20-разрядный базовый адрес формируется путем сдвига содержимого сегментного регистра на 4 разряда влево. Если процессор работает в режиме обработки 32-разрядных данных (защищенный режим), то 32-разрядный базовый адрес со­держится в дескрипторе, выбор которого из таблицы дескрипторов осущест­вляется с помощью селектора — содержимого соответствующего сегментно­го регистра.

В качестве относительного адреса используется содержимое регистров общего назначения или эффективный адрес (ЕА), который формируется в со­ответствии с заданным способом адресации. ЕА является 16- или 32- разряд­ным и формируется в зависимости от значения полей MOD и R/M и содер­жимого байта SIB (для 32-разрядных адресов). В общем случае ЕА образу­ется путем арифметического сложения трех компонентов:      

- содержимого базового регистра;

- содержимого индексного регистра;

- 8, 16, 32-разрядного смещения, заданного в одном, двух или четырех

байтах команды.

В зависимости от значений полей MOD и R/M для формирования ЕА используются все или часть этих слагаемых.

В процессоре осуществляются следующие способы адресации операн­дов:

   - непосредственная адресация;

   - регистровая адресация;

- косвенно-регистровая адресация;

- прямая адресация;

- базовая адресация;

- индексная адресация;

- базово-индексная адресация;

- базово-индексная адресация со смещением.