Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Met_Lab2.pdf
Скачиваний:
159
Добавлен:
11.05.2015
Размер:
1.1 Mб
Скачать

4.6. Приложение к лабораторной работе № 2. Адресация

4.6.1. Форматы машинных команд и их кодирование

Общий формат команд процессора (начиная с модели i80386) приведён на рис 11.1. Команды состоят из необязательных префиксов, одного или двух байт кода операции, спецификаторов адреса (постбайт и байт sib), внутрикомандного смещения (Displacement) и непосредственных данных. Английские аббревиатуры означают следующее: Base – база, MoDe – режим, Register/Memory – регистр/память, Scale – масштаб, Index – индекс. Из всех полей команды обязательным является только один или два байта кода операции.

Префикс – это байт, который модифицирует операцию следующей за ним команды. Два префикса замены операнда и размера адреса (коды 66h и 67h соответственно) позволяют в реальном режиме изменить принимаемые по умолчанию 16-битные размеры операнда и эффективного адреса ЕА (Effective address) на 32-битные. Здесь необходимо заметить, что при ассемблировании машинной команды Tasm самостоятельно вставляет соответствующий префикс, если обнаруживает в мнемокоде команды 32-битный операнд или 32-битную ссылку на память.

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

В реальном режиме может быть использован как 16-битный режим адресации памяти (единственно возможный в базовом процессоре i8086), так и 32-битный. Однако, учитывая,

что в реальном режиме размер любого сегмента ограничен величиной 216 = 64 Кбайта, значение адреса в 32-битном слове не должно превышать величины FFFFh.

4.6.2. 16-битный режим адресации операндов в памяти

По функциональному признаку система команд разбивается на 6 групп: пересылка данных, арифметические операции, логические операции и сдвиги, передача управления, обработка цепочек и управления микропроцессором. В этом разделе будет рассмотрено формирование машинных кодов команд процессора, которые могут адресовать один или два операнда и структурно принадлежат к одному из трёх типовых форматов, приведённых на рис.11.2.

Машинные форматы команд в зависимости от типа команды и способа адресации содержат от 1 до 6 байтов, из которых ключевыми являются первый (код операции) и второй (способ адресации). Штриховыми линиями на рис. 1.6 показаны необязательные байты

67

команд. Принципы кодирования полей отдельных байтов команд рассмотрим на примере наиболее общей формы двухоперандной команды.

Рис. 2.13. Типичные форматы команд: двухоперандные команды (а) и (б) и однооперандная (в)

w (Word) – однобитовое поле, идентифицирующее тип операнда: при w=1 команда оперирует словами, а при w = 0 – байтом;

d (Direction) – однобитовое поле, определяющее направление передачи операнда или результата. При d = 1 осуществляется передача операнда в регистр, определённый полем reg во втором байте, при d = 0 – передача из указанного регистра;

reg (Register) 3-битовое поле регистра, условно определяющее назначение второго операнда;

r/m (Register/Memory) – 3-битовое поле операнда, который может находиться в памяти или в регистре и условно считается первым;

md (Mode) – 2-битовое поле, показывающее (табл. 11.1.), как интерпретировать поле r/m при нахождении эффективного адреса EA первого операнда: если md = 11, то операнд содержится в регистре, в остальных случаях – в памяти.

Т а б л и ц а 2 . 1 .

Определение эффективного адреса

 

 

 

 

Поле md

 

 

 

 

 

 

 

 

 

Поле r/m

1 1

 

0 0

0 1

1 0

 

 

 

 

 

 

 

 

W=0

 

W=1

 

 

 

 

 

 

 

 

 

 

0 0 0

AL

 

AX

BX+SI

BX+SI+D8

BX+SI+D16

 

 

 

 

 

 

 

0 0 1

CL

 

CX

BX+DI

BX+DI+D8

BX+DI+D16

 

 

 

 

 

 

 

0 1 0

DL

 

DX

BP+SI

BP+SI+D8

BP+SI+D16

 

 

 

 

 

 

 

0 1 1

BL

 

BX

BP+DI

BP+DI+D8

BP+DI+D16

 

 

 

 

 

 

 

1 0 0

AH

 

SP

SI

SI+D8

SI+D16

 

 

 

 

 

 

 

1 0 1

CH

 

BP

DI

DI+D8

DI+D16

 

 

 

 

 

 

 

1 1 0

DH

 

SI

BP

BP+D8

BP+D16

 

 

 

 

 

 

 

1 1 1

BH

 

DI

BX

BX+D8

BX+D16

 

 

 

 

 

 

 

Когда операнд находится в памяти, то поле md определяет вариант использования внутрикомандного смещения disp (Displacement), находящегося в 3-м и в 4-м байтах:

md=00, disp=0;

md=01, disp =disp 1-знаковое 8-битовое смещение (D8), расширяющееся со знаком до 16 бит при вычислении эффективного адреса ЕА;

md=10, disp =disp 11, disp 2-знаковое 16-битовое смещение (D16).

При этом кодировка поля reg второго операнда или поля r/m первого операнда при md = 11 определяет тип регистра в зависимости от значения параметра w. При md=11

68

реализуются косвенные виды адресации памяти, что и отражено в табл. 11.2. (исключение составляет случай прямой адресации при

r/m = 110 и md = 00). Таким образом, в процессоре i8086 реализовано 24 варианта (8*3) вычисления эффективного адреса ЕА.

 

 

Т а б л и ц а 2 . 2 .

Косвенные виды адресации

 

 

 

 

 

Тип адресации

Способ вычисления EA

Число тактов

 

 

 

Косвенная

[BX], [BP], [SI], [DI]

5

Базовая, или индексная

[BX+ , BP+ , SI+ , DI+disp]

6

Базовая индексная без смещения

[BP+DI], [BX+SI]

7

 

[BP+SI], [BX+DI]

8

 

[BP+DI+disp]

11

Базовая индексная со смещением

[BX+SI+disp]

11

 

[BP+SI+disp]

12

 

[BX+DI+disp]

13

Замечание. Подчеркнём смысловое различие двух случаев употребления термина смещение. Смещение disp, содержащееся в команде, интерпретируется как знаковое число, которое участвует в вычислении эффективного адреса EA. С другой стороны, из-за сегментной организации памяти эффективный адрес EA является смещением OFFSET относительно базового адреса сегмента и интерпретируется как беззнаковое число при вычислении физического адреса.

При вычислении физического адреса эффективный адрес (или смещение Offset) сегментируется регистром DS (сегмент данных) во всех случаях кроме тех, когда в формировании EA участвует сегментный регистр BP. Использование регистра BP в формировании EA предопределяет сегментирование адреса по регистру SS (сегмент стека). Чтобы изменить, указанное по умолчанию сегментирование адресов, предусмотрена специальная однобайтная команда-префикс замены сегмента:

001 Sreg 110 – формат команды префикса замены.

Если команде предшествует префикс замены, то при обращении к данным в процессе исполнения команды участвует сегментный регистр из префикса. Кодировка поля Sreg в префиксе: 00 – ES, 01 – CS, 00 – SS, 11 – DS.

На рис. 11.2 б представлен формат двухоперандной команды с непосредственным операндом. В этом формате отсутствует необходимость в адресации второго операнда и поле reg отдано для расширения поля COP. Отсутствует также бит направления d, т.к. результат операции размещается на месте первого операнда. Место бита d занял бит s, функции которого определяются следующим образом:

sw = X0, data = data L -один байт данных;

sw = 01, data = dataH,dataL – два байта данных;

sw = 11, data = dataL – один байт данных, который расширяется со знаком до двух

байт.

Постбайтовая адресация является универсальной адресацией и позволяет адресовать как общие регистры, так и ячейки памяти. Однако при адресации только регистров или аккумулятора Acc постбайт оказывается излишним, если поле reg разместить в первом байте команды или использовать неявную адресацию. Эта возможность реализуется в специальных

69

укороченных форматах, которые содержат минимальное число байтов и, выбираются Turbo Assembler в процессе ассемблирования.

Двоичное кодирование ассемблерных команд, рекомендуется выполнять в следующей последовательности:

находим обобщённое представление команды, соответствующее одной из альтернативных записей команды в справочном списке команд (Приложение П.1.1);

для выбранного обобщённого представления команды выписываем из таблицы её формат;

принимая во внимание формат данных, способ кодирования регистров и тип адресного выражения для операнда, находящегося в памяти (табл. 1.2) , определяем двоичный код для обозначенных в команде полей;

записываем структурированный по байтам машинный код команды с использованием 16-теричных символов. Полученный код должен совпадать с машинным кодом соответствующей команды из окна CPU Turbo Debugger для рассматриваемого файла.

70

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