2.5.1. Форматы команд и способы адресации в CISC-процессорах
К оглавлению1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1617 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 для формирования ЕА используются все или часть этих слагаемых.
В процессоре осуществляются следующие способы адресации операндов:
- непосредственная адресация;
- регистровая адресация;
- косвенно-регистровая адресация;
- прямая адресация;
- базовая адресация;
- индексная адресация;
- базово-индексная адресация;
- базово-индексная адресация со смещением.