Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
manual-l2only.pdf
Скачиваний:
42
Добавлен:
05.06.2015
Размер:
300 Кб
Скачать
☆

(a)Косвенная адресация по базе (by base) строется с использовани-

ем базовых (bx, bp) или индексных (si, di) регистров. В роли адреса выступает значение, записанное в указанном регистре.

(b)Косвенная адресация по базе со сдвигом (by base with displacement)

представляет сочетание косвенной адресации по базе и прямой адресации. Адрес образуется путём сложения значения, сохранённого в базовом (bx, bp) или индексном (si, di) регистре, и смещения, записанного непосредственно в коде команды.

(c)Косвенная адресация по базе с индексирвоанием (by base-index)

позволяет образовывать адрес как сумму значений базового (bx, bp) и индексного (si, di) регистров.

(d)Косвенная адресация по базе с индексированием и сдвигом (by baseindex with displacement) является наиболее полным вариантом. Как и в случае с косвенной адресацией по базе с индексирвоанием адрес вычисляется как сумма значений базового (bx, bp) и индексного (si, di) регистров, но к нему прибавляется смещение, записанное непосредственно в коде команды.

Адреса, записываемые при прямой адресации и формируемые при косвенной являются 16-разрядными. Имеется возможность явно указать какой сегментный регистр должен использоваться при помощи так называемого префикса команды. Если префикс не указан, то при прямой адресации используется сегмент данных. При косвенной адресации сегментные регистры выбираются на основе того какие именно регистры были использованы для формирования адреса.

2.2.5. Регистр признаков

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

За счёт таких команд строится вариативность поведения программы. На рисунке 2.4 приведена структура регистра признаков.

35

А E D C B A 9 8 7 6 5 4 3 2 1 0

1 1 1 1

Всегда 1

of df if tf sf zf 0 af 0 pf 1 cf

ПризнакПризнак

 

 

ВсегдаВсегдаВсегда

ПризнакПризнакПризнак0 Признак0 Признак1

Разрешение

 

нуля

 

 

Флаг

 

 

 

 

 

 

 

пошагового

(zero)

чётностипереноса

переполнениянаправления

 

 

вспомогательного

 

(sign)

 

 

 

 

знака

 

 

 

 

прерывания

 

 

 

 

 

 

режима

 

 

 

 

(overfull)(direction)

 

переноса

 

 

 

 

 

(interrupt)

 

 

 

 

 

 

(trace)

 

Рис. 2.4: Структура регистра признаков процессора КМ1810ВМ86

2.2.6. Система команд процессора КМ1810ВМ86

Системой команд называют совокупность всех команд процессора, способа и правил их записи в текстовом виде и памяти.

Мнемоническая запись команд

Для упрощения представления программ активно используется мнемоническая запись при которой каждой команде ставится в соответствие буквенный код, образованный от английского названия команды. Например, команде перемещения данных (move a data) ставится в соответствие мнемоника mov, команде сложения с переносом (add with carry) — мнемоника adc.

Команда может принимать от нуля до двух аргументов, определяющих где находятся данные, с которыми будет совершена операция или уточняющими как именно будет выполнена команда. Аргументы или операнды команды записываются после неё через запятую. Например, команда mov обычно записывается в форме

mov d e s t i n a t i o n , s o u r c e

где source указывает на то откуда должны быть скопированы данные, а destination — откуда.

Мнемо́ника от греч. τὰ μνημονικά — искусство запоминания.

36

Строка

mov al , byte p t r [ bx+ s i +3]

воспринимается легче, чем фактическое представление команд в памяти в виде отдельных байт — 8A 40 03 .

Аргумент команды может быть:

1.некоторым числом, заданным непосредственно (например, 123);

2.именем одного из программно доступных регистров процессора

(al);

3.некоторым конкретным адресом, записанным непосредственно

([2003h:5A36h]);

4.конструкцией косвенной адресации (byte ptr [bx+si+3]).

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

В приложении B перечислены все имеющиеся коды команд, а так же приведены некоторые более подробные сведения о командах.

Разные аргументы одной команды могут адресоваться по-разному:

1.Например, роль источника (source) в команде может выполнять непосредственное значение (непосредственная адресация), а роль приёмника (destination) адрес в памяти, образуемый при помощи косвенной адресации или регистр (регистровая адресация).

2.Источником может служить регистр (регистровая адресация), а приёмником — адрес в памяти (косвенная) или другой регистр (регистровая). Возможен и зеркальный вариант.

3.Наконец, в некоторых командах один из аргументов предопределён кодом команды (это может быть как регистр, так и непосредственные данные). В таком случае второй аргумент так же является регистром или косвенным адресом.

Физическое представление команд

В процессора КМ1810ВМ86 команды могут иметь разную длину (от 1 до 6 байт). В первом байте всегда содержится код операции. Прочитав код операции процессор «понимает» с каким вариантом какой команды он

37

7

6

5

4

3

2

1

0

MD

 

REG

 

 

R/M

 

Рис. 2.5: Структура байта MD REG M/R

имеет дело. После того как дешифратор команды проанализировал код операции он может запросить у устройства выборки команды дополнительные байты команды.

Процессор использует 298 различных кодов команд при помощи которых записываются 135 команд, представляемых при помощи 96 мнемоник.

В некоторых командах за байтом кода операции может следовать байт MD REG M/R. Структура байта показана на рисунке 2.5.

Этот байт может выполнять несколько функций:

–Для некоторых команд (например команд десятичной коррекции

—aaa, aad и т.п.) этот байт всегда имеет фиксированное значение. Можно сказать, что код таких команд состоит из двух байтов.

–Некоторые команды «хранят» продолжение кода операции в поле REG байта MD REG M/R. За счёт таких операций обеспечивается поддержка более 256 команд. Остальные поля байта имеют такое же значение как и всегда (см. следующий пункт).

–В остальных случаях когда байт MD REG M/R присутствует в команде он определяет с каким образом будет осуществляться доступ к аргументам команды. Один аргумент определяется сочетанием полей MD и R/M, а второй — полем REG.

1.Поле MD (addressing mode) определяет тип адресации одного из аргументов: косвенная или регистровая. Значения 00, 01, 10 соответствуют косвенной адресации, а значение 11 определяет регистровую.

2.Поле R/M (register/mode) определяет набор регистров, участвующих в косвенной адресации или регистры, к которым происходит обращение при регистровой адресации в том же аргументе. Способы построения адреса аргумента при помощи

Это больше чем может поместиться в одном байте — 256. Таким образом процессор неизбежно будет использовать более чем один байт для кодирования команд.

Если он присутствует.

38

Таблица 2.1: Варианты косвенной адресации в процессоре КМ1810ВМ86

 

 

Смещение

 

Индексация

без смещения

со смещением

 

8-разядным

16-разрядным

 

 

по базе

R/M: 100-111

R/M: 100-111

R/M: 100-111

MD=00

MD=01

MD=10

 

по базе с

R/M: 000-011

R/M: 000-011

R/M: 000-011

индексированием

MD=00

MD=01

MD=10

 

 

 

 

поле MD и R/M указаны в таблице B.4.

3.Поле REG (register) определяет регистр, выступающий в роли второго операнда. Различные коды регистров представлены в таблице B.2.

Значения поля R/M определяют один из типов косвенной адресации:

–значения 000-011 соответствуют косвенной адресации по базе с индексированием;

–значения 100-111 —адресации по базе.

При косвенной адресации значение поля MD определяет наличие и разрядность используемого смещения:

1.Значение MD=00 означает отсутствие смещения.

2.Значение MD=01 соответствует использованию 8-разрядного смещения. В этом случае сразу за байтом MD REG M/R идёт один байт смещения.

3.Значение MD=10 соответствует использованию 16-разрядного смещения. При этом сразу за байтом MD REG M/R следует два байта смещения (сначала байт, содержащий младшие разряды, а затем байт, содержащий старшие).

Если в команде имеются непосредственные данные, то они располагаются на последней позиции в коде команды. Соответственно, возможны несколько вариантов расположения непосредственных данных в команде:

– Если в команде нет байта MD REG M/R , то непосредственные дан-

При этом не может быть и смещения т.к. сам факт наличия смещения определяется значениями в байте MD REG M/R.

39

 

 

 

 

Байты

 

 

 

 

Пояснение

1

2

 

3

 

4

 

5

 

6

 

 

 

 

 

OP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OP

DATA8

 

 

 

 

 

 

 

 

MD=00 или 11

OP

 

MD REG M/R

 

 

 

 

 

 

 

 

OP

 

DATA16

 

 

 

 

 

 

 

MD=01

OP

 

MD REG M/R

 

DISP8

 

 

 

 

 

 

OP

 

MD REG M/R

 

DATA8

 

 

 

 

 

 

MD=00 или 11

OP

 

MD REG M/R

 

DATA16

 

 

 

 

MD=00 или 11

OP

 

MD REG M/R

 

DISP16

 

 

 

 

MD=10

OP

 

MD REG M/R

 

DISP8

 

DATA8

 

 

 

MD=01

OP

 

 

 

DATA32

 

 

 

 

 

MD=10

OP

 

MD REG M/R

 

DISP16

 

DATA8

 

OP

 

MD REG M/R

 

DISP8

 

 

DATA16

 

 

MD=01

OP

 

MD REG M/R

 

 

 

 

DATA32

 

 

MD=00 или 11

OP

 

MD REG M/R

 

DISP16

 

 

DATA16

MD=10

Рис. 2.6: Возможные форматы команд процессора КМ1810ВМ86. На рисунке OP — код операции, DATA — непосредственные данные и DISP — смещение

ные следуют сразу же за кодом команды. Максимальная длинна такой команды — 5 байт (1 байт кода команды и до 4 байт непосредственных данных). Конкретную длинну непосредственных данных определяет код команды.

–Если в команде есть байт MD REG M/R, но нет смещения (поле MD равно 00 или 11), то непосредственные данные следуют сразу после байта MD REG M/R. Максимальная длинна такой команды — 6 байт (1 байт кода команды, байт MD REG M/R и до 4 байт непосредственных данных).

–Если в команде есть байт MD REG M/R с 8- или 16-разрядным смещением (поле MD равно 01 или 10 соответственно), то смещение следует непосредственно за байтом MD REG M/R, а данные расположены непосредственно за смещением. Максимальная длинна такой команды так же 6 байт (1 байт кода команды, байт MD REG M/R, максимум 2 байта смещения и до 2 байт непосредственных данных).

На рисунке 2.6 собраны все возможные форматы команд.

40

Таблица 2.2: Некоторые команды процессора КМ1810ВМ86

Мнемоника

Код

 

Следующие байты

w

Описание

inc

REG

4x

01000reg

 

 

 

REG ←REG

 

 

 

 

 

 

 

+ 1

inc

EA

FE

11111110

MD 000 R/M

DISP /

0

[EA] ←[EA]

 

 

 

 

 

 

 

+ 1

inc

EA

FF

11111111

MD 000 R/M

DISP /

1

[EA] ←[EA]

 

 

 

 

 

 

 

+ 1

mov

REG, EA

8A

10001010

MD REG R/M

DISP /

0

REG ←[EA]

mov

EA, DATA

C7

11000111

MD 000 R/M

DISP / DATA

1

[EA] ←DATA

Примеры записи и кодирования команд

Рассмотрим несколько примеров команд. В таблице 2.2 приведены описания рассматриваемых команд (эти описания идентичны соответствующим строкам из таблицы B.1).

Рассмотрим первую команду в таблице — инкремент¹ inc REG.

1.Вариант inc REG

В пояснении к команде записано REG ←REG + 1. Мнемоника REG соответствует одному из регистров общего назначения. В описании команды подчёркнуто, что это должен быть 16-разрядный регистр (REG ). Выберем, скажем, регистр cx. В таком случае мнемоническая запись команды будет выглядеть как

i n c cx

Как видно, код команды зависит от выбранного нами регистра. В двоичном виде код записывается как 01000reg. В таблице B.2 приведён список кодов регистров. Регистру cx соответствует двоичный код 001. При подстановке кода получим код операции 01000 001 или

41 .

2.Второй вариант команды inc EA

Под мнемоникой EA понимается адрес, формируемый при помощи косвенной адресаци или регистр процессора. Из описания [EA] ←[EA] + 1 становится ясно, что команда оперирует 8- разрядными данными. Возможные варианты записи:

¹ Увеличения на единицу. Так же есть операция декремента — уменьшения на единицу.

41

i n c

dh

 

[ bx ]

i n c byte

p t r

i n c

word

p t r

[ bx+ s i +7h ]

 

 

 

 

Первая форма соответствует варианту операнда с регистровой адресацией, вторая и третья — с косвенной. Рассмотрим вначале первую.

Код операции этой команды не зависит от регистра, поэтому первый байт команды уже найден — FE . В соответствии с таблицей 2.2 вторым байтом команды будет байт MD REG R/M. Однако, в таблице на месте REG записана комбинация 000, что означает, что это поле используется не для задания регистра, а как продолжение кода команды.

Регистровой адресации соответствует значение 11 поля MD. В таком случае по таблице B.4 найдём значение R/M, соответствующее регистру dh. Это — 110. Таким образом мы можем восстановить значение поля — 11 000 110 (или C6 ).

Первая команда кодируется двумя байтами FE и C6 .

Во второй форме используется косвенная адресация (т.е. на единицу будет увеличена ячейка памяти, находящаяся по адресу, записанному в регистре bx). Если записать команду просто как inc [bx], то их такой записи невозможно понять с данными какой разрядности эта команда работает. Для уточнения разрядности данных перед квадратными скобками, обозначающими косвенную адресацию, ставится указание byte ptr, подчёркивающее, что [bx] ссылается (указывает) на байт (8-разрядное число).

Код операции 8-разрядной версии команды так же FE . Второй байт

— MD REG R/M с REG=000. Поскольку необходимо использовать косвенную адресацию без смещения, то для поля MD следует в соответствии с таблицей B.4 выбрать значение 00. Варианту [bx] в таблице соответствует значение R/M — 111. Следовательно второй байт команды — 00 000 111 (или 07 ).

Последний вариант команды работает с словом (16-разрядным значением), поэтому его представляет машинный код FF . При кодировании второго байта следует обратить внимание на то, что при косвенной адресации используется смещение, равное 7 . Для записи этого смещения вполне достаточно одного байта, поэтому следует выбрать форму косвенной адресации с 8-разрядным смещением

42

(MD=01). Комбинации [bx+si+7h] соответствует R/M=000. Окончательно код байта — 40.

Сразу за байтом MD REG R/M должен следовать байт, содержащий смещение. В нашем случае это — 07 . Окончательно эта инструкция кодируется тремя байтами — FF 40 07 .

3.Команда mov REG, EA

В соответствии с принятым соглашением команды действуют с права налево. Например команда mov производит копирование из EA в регистр общего назначения REG.

Рассмотрим пример команды

mov al , [ bp ]

Обратите внимание, что в данном случае указание byte ptr не требуется т.к. оба операнда команды mov должны быть одной размерности, а регистр al имеет размерность 8 бит. Неоднозначности не возникает.

Первый байт команды — 8A . Следует обратить внимание на то, что в таблицеB.4. нет варианта адресации [bp], однако имеется возможность представить [bp] как [bp+0]. Второй байт найдём указав по таблице B.4 значения полей MD=01 (косвенная адресация с 8- разрядным смещением) и R/M=110. Значение поля REG определим из таблицы B.2 — 000. Второй байт команды 01 000 110 или 46 . Третий байт — это смещение 00 .

Таким образом команда кодируется тремя байтами — 8A 46 00 .

4.Команда mov EA, DATA16 помещает 16-разрядные данные в 16разрядный регистр или ячейку памяти при помощи косвенной адресации.

Пример записи:

mov word p t r [ 1 2 3 4 h ] , AABBh

Код команды не зависит от её аргументов — C7 . В соответствии с таблицей B.4 подходящими являются значения MD=00 и R/M=110. Второй байт команды — 00 000 111 или 07 .

После байта MD REG R/M следует двухбайтное смещение. 16-разрядные значения в процессоре КМ1810ВМ86 записываются в коде Li le-

43

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