logo search
несколько программ / bsp33

Система команд сопроцессора

Возможны три формата команд сопроцессора, аналогичные форматам команд центральных процессоров фирмы Intel. Это команды с обращением к оперативной памяти, команды с обращением к одному из численных регистров и команды без операндов, заданных явным образом.

Команды с обращением к памяти могут занимать от двух до четырех байт, в зависимости от способа адресации операнда, находящегося в памяти (рис. 10.15).

Рис. 10.15. Формат команд с обращением к памяти

Первые пять бит соответствуют команде центрального процессора ESC. Поля КОП1 и КОП2 определяют выполняемую команду, то есть содержат код операции. Поля MOD и R/M вместе с полями "Смещение1" и "Смещение2" задают адрес операнда в памяти аналогично тому, как это происходит в процессорах. Однако есть и отличия, связанные с возможностью адресации численных регистров сопроцессора.

Ниже мы покажем зависимость способа адресации от содержимого полей MOD и R/M:

Поле

Поле MOD

R/M

00

01

10

11

000

(bx)+(si)

(bx)+(si)+disp8

(bx)+(si)+disp16

ST0

001

(bx)+(di)

(bx)+(di)+disp8

(bx)+(di)+disp16

ST1

010

(bp)+(si)

(bp)+(si)+disp8

(bp)+(si)+disp16

ST2

011

(bp)+(di)

(bp)+(di)+disp8

(bp)+(di)+disp16

ST3

100

(si)

(si)+disp8

(si)+disp16

ST4

101

(di)

(di)+disp8

(di)+disp16

ST5

110

disp16

(bp)+disp8

(bp)+disp16

ST6

111

(bx)

(bx)+disp8

(bx)+disp16

ST7

Если в таблице указаны значения смещения disp8 или disp16, это означает, что в команде присуствует один или два байта смещения, соответственно.

Если поле MOD содержит значение 11, возможна адресация численных регистров ST0...ST1. При этом команда не содержит байтов смещения.

Формат команды с обращением к численному регистру приведен на рис. 10.16.

Рис. 10.16. Формат команд с обращением к численному регистру

Видно, что это есть частный случай предыдущей команды, в которой поле MOD содержит значение 11 и отсутствуют байты смещения.

Самый простой формат имеют команды без явного обращения к операндам (рис. 10.17).

Рис. 10.17. Формат команд без явного обращения к операндам

Разумеется, если вы составляете программу для сопроцессора на языке ассемблера, вы можете использовать мнемоническое обозначение команд. Все мнемоники команд сопроцесора начинаются с буквы F, поэтому их легко отличить от команд процессоров.

Все команды сопроцессора можно разделить на несколько групп:

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

Арифметические команды выполняют такие операции, как сложение, вычитание, умножение, деление, извлечение квадратного корня, нахождение частичного остатка, округление и так далее.

Команды сравнения сравнивают вещественные и целые числа, выполняют анализ чисел.

Трансцендентные команды предназначены для вычисления различных тригонометрических, логорифмических, показательных и гиперболических функций - sin, cos, tg и тому подобных.

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

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