Система команд сопроцессора
Возможны три формата команд сопроцессора, аналогичные форматам команд центральных процессоров фирмы 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 и тому подобных.
Последняя группа команд - управляющие команды. Они обеспечивают установку режима работы арифметического сопроцессора, его сброс и инициализацию, перевод сопроцессора в защищенный режим работы и так далее.
Следующие разделы будут посвящены детальному описанию различных групп команд сопроцессора.