Глава 17 Архитектура и программирование сопроцессора
⅝⅛ Архитектура Р Форматы данных fe· Система команд ⅜* Исключения и их обработка р Использование отладчика В предыдущих главах мы рассматривали команды и алгоритмы обработки цело- численных данных, то есть чисел с фиксированной точкой (см. главы 5 и 8). Для обработки числовых данных в формате с плавающей точкой процессоры IA-32 содержат специальное устройство, которое является важной частью их архитектуры. Устройства для обработки чисел с плавающей точкой появились в компьюте- рах давно. С точки зрения архитектуры они выглядели по-разному. Так, в архи- тектуре ЕС ЭВМ (аналог IBM 360/370) устройство с плавающей точкой было естественной частью этой архитектуры со своим регистровым пространством и под- системой команд. Архитектура компьютеров на базе процессоров вначале опира- лась исключительно на целочисленную арифметику. С ростом мощи, а главное, с осознанием разработчиками процессорной техники того факта, что их устрой- ства могут составить достойную конкуренцию своим «большим» предшественни- кам, в архитектуре компьютеров на базе процессоров стали появляться устройства для обработки чисел с плавающей точкой. В архитектуре семейства процессоров Intel 80x86 устройство для обработки чисел с плавающей точкой появилось в составе компьютера на базе процессора i8086/88 и получило название матема- тический сопроцессор (далее просто сопроцессор). Выбор такого названия был об- условлен тем, что, во-первых, это устройство было предназначено для расшире- ния вычислительных возможностей основного процессора, а во-вторых, оно было реализовано в виде отдельной микросхемы, то есть его присутствие было необяза- тельным. Микросхема сопроцессора для процессора i8086/88 имела название i8О87. С появлением новых моделей процессоров Intel совершенствовались и сопроцес- соры, хотя их программная модель осталась практически неизменной. Как отдель- ные (а соответственно, необязательные в конкретной комплектации компьютера) устройства сопроцессоры сохранялись вплоть до модели процессора iЗ86 и имели название i287и iЗ87соответственно. Начиная с модели i486 сопроцессор исполня- ется в одном корпусе с основным процессором и, таким образом, является неотъемлемой частью компьютера. Для чего нужен сопроцессор, какие возможности добавляет он к тому, что де- лает основной процессор, кроме обработки еще одного формата данных? Перечис- лим некоторые из них. Я Полная поддержка стандартов IEEE-754 и 854 на арифметику с плавающей точкой. Эти стандарты описывают как форматы данных, с которыми должен работать сопроцессор, так и набор реализуемых им функций. Поддержка численных алгоритмов для вычисления значений тригонометри- ческих функций, логарифмов и т. п. Эта работа сопроцессора выполняется аб- солютно прозрачно для программиста, что само по себе очень ценно, так как не требует от него разработки соответствующих подпрограмм. ⅞ Обработка десятичных чисел с точностью до 18 разрядов, что позволяет сопро- цессору без округления выполнять арифметические операции над целыми де- сятичными числами со значениями до 1018. ш Обработка вещественных чисел из диапазона 3,37 • 10~4932...1,18 • 10+49‘i2. Нужно отметить, что в последние годы разработчики компьютерной перифе- рии все активнее освобождают центральный процессор от части вычислений с целью более эффективной реализации специализированных операций. Очень ярко это проявляется на рынке мультимедийного оборудования, где множество разработчиков предлагают видеокарты с чипсетами (наборами микросхем), более эффективно реализующими работу с графикой, чем это делает сам процессор. Не- смотря на это дополнение системы целочисленных команд процессора командами сопроцессора предоставляет ряд уникальных свойств и возможностей, пренебре- гать которыми было бы опрометчиво.