Материалы

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

Рейтинг:   / 0
ПлохоОтлично 

В этой сложной структуре КОП может занимать один или два байта. Адресная часть команды может либо вообще отсутствовать, либо включать в свой состав от одного (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, которое занимает младшие три бита байта, задает номер базового регистра.

 

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