Процессор

Кодирование команд в процессоре х86

Кодирование команд в процессоре х86

Организация памяти

Адресуемая память (адресное пространство) представляет собой область из 1М байт. Физический адрес памяти имеет длину 20 бит (см. рисунок ниже). Для формирования физических адресов используется механизм сегментации памяти. Пространство памяти 1М доступно процессору через 4 "окна" (сегмента), каждый размером 64 Кбайт. Начальный адрес каждого сегмента содержится в одном из четырех сегментных регистров. Команды обращаются к байтам и словам в пределах сегментов, используя относительный (внутрисегментный) адрес.

 

Схема трансляции адреса в процессоре i8086

Для того, чтобы не увеличивать чрезмерно длину команды, большая часть команд в системе команд х86 описывает не более двух операндов. Ниже представлены основные форматы команд (см. следующий рисунок).

 

Форматы команд

Кодирование двухоперандной команды

В этой сложной структуре КОП может занимать один или два байта. Адресная часть команды может либо вообще отсутствовать, либо включать в свой состав от одного (ModR/M) до 12 байтов.

Адресная информация, закодированная в такой сложной команде, может содержать следующие сведения:

  • сколько операндов использует команда (два, один или ни одного);
  • расположен ли операнд в регистре или в памяти;
  • если в регистре, то в каком;
  • если операнд в команде, сколько для него там отведено места (immеdiate);
  • если операнд в памяти, то по какой схеме следует определять его адрес;
  • при многокомпонентной адресации, в адресной части может находиться поле для части адреса (displacement);
  • и др.

Префикс

Длина префикса 1 байт. Имеется всего 5 префиксов для Х86

 

Префиксы X86

Код операции

КОП - код операции. Длина 1 байт. 0-й бит КОП во многих (но не во всех) командах показывает, производится ли операция со словом (=1) или с байтом (=0). 1-й бит КОП в двухадресных командах указывает, какой из операндов является приемником.

Постбайт адресации

Длина 1 байт. Постбайт адресации показывает, где находятся операнды. Один из операндов (первый) может быть расположен в регистре (регистровая адресация) или в произвольной ячейке ОЗУ (все способы адресации кроме непосредственной). Второй операнд может находиться в теле команды (непосредственная адресация) или в регистре (регистровая адресация). Каждый из операндов может быть как источником, так и приемником (за исключением непосредственной адресации: непосредственный операнд может быть только источником). Структура системы адресации несимметрична.

 

Поля mod и r/m задают место расположения первого операнда. Поле reg задает положение второго операнда.

Значения поля mod:

11 - операнд в регистре (при остальных mod операнд в ОЗУ, а регистры, на которые указывают поля mod и r/m, содержат компоненты адреса операнда);
10 - смещение два байта (без знака);
01 - смещение один байт (со знаком);
00 - смещение в команде отсутствует.

Смещение

Длина 1 байт (при mod-01) или 2 байта(при mod=10).

Непосредственный операнд

Длина 1 или 2 байта.

Рисунок иллюстрирует различные способы адресации.

 

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

  • Поле ss, которое занимает 2 старших бита байта, определяет масштабный коэффициент.
  • Поле index, которое занимает следующие 3 бита за полем ss, задает для индексного регистра номер регистра.
  • Поле base, которое занимает младшие три бита байта, задает номер базового регистра.

 

Яндекс.Метрика