Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A_K_2-1.doc
Скачиваний:
12
Добавлен:
18.11.2019
Размер:
500 Кб
Скачать
☆

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

При разработке системы команд процессоров 386+ пришлось решать следующие основные проблемы :

  • обеспечить совместимость по объектному коду с предшествующими процессорами, но вместе с тем ввести в команды 32-х битовые операнды и адреса;

  • расширить диапазон использования регистров общего назначения в адресных вычислениях, в частности, привлечь для этого регистры EAX, ECX и EDX, 16-ти битовые аналоги которых AX, CX и DX для адресации не применялись;

  • по возможности ввести новые команды, которые упрощают решение часто встречающихся программных задач, например, битовые команды, команды двойного сдвига и др.

Общий формат команд процессоров 386+ приведен в табл. 2.3.

Таблица 2.3 – Число байт в командах процессоров 386+

Префиксы

Число байт

Поля команды

Число байт

1. Повторения

0 или 1

1. Код операции

1 или 2

2. Размер адреса

0 или 1

2. mod , r/m

0 или 1

3. Размер операнда

0 или 1

3. s i b

0 или 1

4. Замена сегмента

0 или 1

4. Смещение

0, 1, 2, или 4

5. Блокировки шины

0 или 1

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

0, 1, 2, или 4

Команды состоят:

  • из необязательных ПРЕФИКСОВ,

  • одного или двух байт (главного) КОДА ОПЕРАЦИИ,

  • СПЕЦИФИКАТОРА АДРЕСА, представленного байтами: mod,r/m и sib ;

  • СМЕЩЕНИЯ В КОМАНДЕ (displacement) (отклонения) и

  • НЕПОСРЕДСТВЕЕНЫХ ДАННЫХ.

Из всех полей команды обязательными являются только один или два байта КОДА ОПЕРАЦИИ.

ПРЕФИКС – это байт со специальным кодированием, который модифицирует операцию одной находящейся за ним команды :

  • ПОВТОРЕНИЯ (REPeate) – применяется в цепочечных (строковых) командах для автоматической обработки всех элементов цепочки;

  • РАЗМЕРА ОПЕРАНДА (OperandSize) – переключает 16-ти и 32-х битовые операнды;

  • РАЗМЕРА АДРЕСА (AddressSize) – коммутирует формирование 16-ти и 32-х битовых адресов;

  • ЗАМЕНЫ СЕГМЕНТА (Segment override) – явно определяет сегментный регистр для конкретной команды вместо сегментного регистра, применяемого по умолчанию.

  • Перед некоторыми командами обращения к памяти разрешается также указывать префикс LOCK – БЛОКИРОВКИ ШИНЫ. Наличие этого префикса заставляет процессор сформировать активный выходной сигнал LOCK#, который через арбитр шины запрещает другим процессорам в мультипроцессорной системе доступ к памяти на время выполнения команды с блокировкой шины.

Один или два байта КОДА ОПЕРАЦИИ определяют то действие, выполнение которого инициализирует команда. Двухбайтовые коды операций введены в процессорах 386+ для новых команд, например, PUSH FS, условных переходов со смещением длиной в слово или двойное слово и др. Для таких команд ПЕРВЫЙ БАЙТ КОДА ОПЕРАЦИИ всегда содержит 0Fh. Внутри байтов кода операции определяются некоторые поля, которые содержат информацию о направлении операции, размере смещения в команде, кодировании регистров и расширении со знаком (рис. 2.5) :

  • d – в двухоперандных командах определяет направление передачи данных: из регистра – в регистр/память (d = 0) или из регистра/памяти – в регистр (d = 1);

  • w – определяет размер операнда: в байт (при w = 0) или в полный размер – 16 или 32 бита (при w = 1).

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Код операции

d

w

Код операции

mod

reg

r/m

ss

index

base

Рис. 2.5 – Формат команды процессоров 386+

ПОЛЕ «reg» – определяет операнд в одном из регистров общего назначения. Поле «reg» может находится в байте КОДА ОПЕРАЦИИ и в байте «mod, r/m». Кодирование этого поля зависит от того, имеется ли в команде поле «w», а при его наличии еще и от размера операнда (см. табл. 2.4).

Таблица 2.4 – Кодирование поля «reg»

Поле «reg»

Поля «w»

в команде нет

Поле «w» в команде имеется

16-ти бит. операнд

32-х бит.операнд

16 бит

32 бит

w = 0

w = 1

w = 0

w = 1

000

AX

EAX

AL

AX

AL

EAX

001

CX

ECX

CL

CX

CL

ECX

010

DX

EDX

DL

DX

DL

EDX

011

BX

EBX

BL

BX

BL

EBX

100

SP

ESP

AH

SP

AH

ESP

101

BP

EBP

CH

BP

CH

EBP

110

SI

ESI

DH

SI

DH

ESI

111

DI

EDI

BH

DI

BH

EDI

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]