Арифметический сопроцессор что это windows

Обновлено: 04.07.2024

Еще одно устройство, которое мы опишем в этом томе - арифметический сопроцессор фирмы Intel. В старых моделях компьютеров сопроцессор устанавливался на системной плате в отдельной панельке и подключался непосредственно к центральному процессору. Современные процессоры Pentium содержат встроенный арифметический сопроцессор.

Арифметический сопроцессор предназначен для выполнения операций над числами в формате с плавающей точкой (вещественные числа) и длинными целыми числами. Он значительно (в десятки раз) ускоряет вычисления, связанные с вещественными числами. Сопроцессор может вычислять такие функции, как синус, косинус, тангенс, логарифмы и так далее. Разумеется, что с помощью сопроцессора можно выполнять и простейшие арифметические операции сложения, вычитания, умножения и деления.

Основная область применения арифметического сопроцессора - научные расчеты и машинная графика. Некоторые пакеты САПР, например, Autocad, отказываются работать, если в машине отсутствует сопроцессор.

Сопроцессор запускается центральным процессором. После запуска он выполняет все вычисления самостоятельно и параллельно с работой центрального процессора. Если центральный процессор выдает очередную команду сопроцессору в момент времени, когда тот еще не закончил выполнение предыдущей команды, центральный процессор переводится в состояние ожидания. Если же сопроцессор ничем не занят, центральный процессор, выдав команду сопроцессору, продолжает свою работу, не дожидаясь завершения вычисления. Впрочем, есть специальные средства синхронизации (команда FWAIT).

Как программировать сопроцессор?

Команды, предназначенные для выполнения сопроцессором, записываются в программе как обычные машинные команды центрального процессора. Но все эти команды начинаются с байта, соответствующего команде центрального процессора ESC. Встретив такую команду, процессор передает ее сопроцессору, а сам продолжает выполнение программы со следующей команды.

Ассемблерные мнемоники всех команд сопроцессора начинаются с буквы F, например: FADD, FDIV, FSUB и так далее. Команды сопроцессора могут адресоваться к операндам, аналогично обычным командам центрального процессора. Операндами могут быть либо данные, расположенные в основной памяти компьютера, либо внутренние регистры сопроцессора.

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

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

Вещественные числа

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

В общем виде эти числа можно записать следующим образом:

Например: -1.35*10 5 .

Здесь знак - это минус, мантисса - 1.35, порядок - 5. Порядок тоже может иметь знак. В этом представлении чисел для вас вряд ли есть что либо новое. Вспомним также такое понятие, как норамализованное представление чисел:

· если целая часть мантиссы числа состоит из одной цифры, не равной нулю, то число с плавающей точкой называется нормализованным

В чем преимущества использования нормализованных чисел?

В том, что для фиксированной разрядной сетки числа (то есть для фиксированного количества цифр в числе) нормализованные числа имеют наибольшую точность. Кроме того, нормализованное представление исключает неоднозначность - каждое число с плавающей точкой может быть представлено различными (ненормализованными) способами:

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

Например, -5.35E-2 означает число -5.35*10 -2 . Такое представление называется научной нотацией.

Арифметический сопроцессор может работать с вещественными числами в трех форматах:

Эти числа занимают в памяти, соответственно, 4, 8 или 10 байт (рис. 10.1).

Рис. 10.1. Различные представления вещественных чисел

В любом представлении старший бит определяет знак вещественного числа:

· 0 - положительное число;

· 1 - отрицательное число

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

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

Так как здесь используется двоичное представление чисел, сформулируем определение нормализованного числа для двоичного представления:

· если целая часть мантисса числа в двоичном представлении равна 1, то число с плавающей точкой называется нормализованным

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

Для наглядности представим мантиссу числа в следующей форме:

Здесь символом n обозначается либо 0, либо 1. Нормализованные числа в самой левой позиции содержат 1, поэтому их можно изобразить еще и в таком виде:

Представление с расширенной точностью используется сопроцессором для выполнения всех операций. И даже более - все операции с числами сопроцессор выполняет над числами только в формате с расширенной точностью. В этом формате хранится и "лишний" бит целой части нормализованного числа.

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

Поле порядка - это степень числа 2, на которую умножается мантисса, плюс смещение, равное 127 для одинарной точности, 1023 - для двойной точности и 16383 - для расширенной точности.

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

Знак числа, как мы уже говорили, определяется старшим битом.

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

Для этого числа знаковый бит равен 1 (отрицательное число), порядок равен 126, мантисса - 11 (в двоичной системе счисления).

Значение этого числа равно:

Рассмотрим теперь особые случаи представления вещественных чисел.

· нуль - это такое число, у которого порядок и мантисса равны нулю. Нуль может иметь положительный или отрицательный знаки, которые игнорируются в операциях сравнения. Таким образом, имеется два нуля - положительный и отрицательный;

· наименьшее положительное число - это число, которое имеет нулевой знаковый бит, значение порядка, равное 1, и значение мантиссы, равное нулю. В зависимости от представления наименьшее положительное число имеет следующие значения: 1,17*10 -38 (одинарная точность), 2.23*10 -308 (двойная точность), 3.37*10 -4932 (расширенная точность);

· наибольшее отрицательное число - полностью совпадает с наименьшим положительным числом, но имеет бит знака, установленный в 1;

· наибольшее положительное число - это число, которое имеет нулевой знаковый бит, поле порядка, в котором все биты кроме самого младшего, равны 1, и содержит единицы во всех разрядах мантиссы. В зависимости от представления наибольшее положительное число имеет следующие значения: 3.37*10 38 (одинарная точность), 1.67*10 308 (двойная точность), 1.2*10 4932 (расширенная точность);

· наименьшее отрицательное число - полностью совпадает с наибольшим положительным числом, но имеет бит знака, установленный в 1;

· положительная и отрицательная бесконечность - это число содержит все единицы в поле порядка и все нули в поле мантиссы. В зависимости от состояния знакового бита может быть положительная и отрицательная бесконечности. Бесконечность может получиться, например, как результат деления конечного числа на нуль;

· нечисло - содержит все единицы в поле порядка и любое значение в поле мантиссы. Нечисло может возникнуть в результате выполнения неправильной операции при замаскированных особых случаях (ошибкам при работе с сопроцессоре будет посвящен отдельный раздел этой главы);

· неопределенность - содержит в поле порядка все единицы, а в поле мантиссы - число 1000..0 (для одинарной и двойной точности) или 11000..0 (для расширенной точности, так как в этом формате хранится старший бит мантиссы).

Для большей наглядности сведем все возможные представления вещественных чисел вместе на рис. 10.2.

Рис. 10.2. Возможные предстваления вещественных чисел

Целые числа

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

Возможно четыре формата целых чисел:

· короткое целое число;

· длинное целое число;

· упакованное десятичное число

Целое число занимает два байта. Его формат полностью соответствует используемому центральным процессором. Для представления отрицательных чисел используется дополнительный код. Короткое целое и длинное целое имеют аналогичные форматы, но занимают, соответственно, 4 и 8 байт.

Упакованное десятичное число занимает 10 байт. Это число содержит 18 десятичных цифр, расположенных по две в каждом байте. Знак упакованного десятичного числа находится в старшем бите самого левого байта. Остальные биты старшего байта должны быть равны 0.

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

Мы подробно рассмотрели формат представления вещественных чисел и отметили, что в этом формате для представления отрицательных чисел используется специальный знаковый бит. Для целых чисел используется дополнительный код.

В дополнительном коде положительные числа содержат нуль в самом старшем бите числа:

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

Например, число +5 в дополнительном коде выглядит следующим образом:

Для получения числа -5 вначале инвертируем значение каждого бита:

Теперь прибавим к полученному числу +1:

На рис. 10.3 мы привели все возможные варианты представления целых чисел.

Рис. 10.3. Возможные представления целых чисел

Формат упакованного десятичного числа показан на рис. 10.4.

Рис. 10.4. Формат упакованного десятичного числа

На этом рисунке n0. n17 означают разряды десятичного числа. Они могут изменяться в пределах от 0000 до 1001, то есть от 0 до 9 в десятичной системе счисления.

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

Регистры сопроцессора

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

Численные регистры

Мы будем обозначать численные регистры как ST0 - ST7. Они приведены на рисунке 10.5.

Рис. 10.5. Численные регистры арифметического сопроцессора

Численные регистры используются как стек. Регистр состояния в поле ST содержит номер численного регистра, являющего вершиной стека. При выполнении команд в качестве операнда могут выступать численные регистры. В этом случае номер указанного в команде регистра прибавляется к содержимому поля ST регистра состояния и таким образом определяется используемый регистр. Большинство команд после выполнения увеличивают поле ST регистра состояния, как бы записывая результаты своей работы в стек численных регистров.

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

Регистр тегов

Этот регистр разделен на восемь двухбитовых полей, которые мы обозначим как TAG0. TAG7. Каждое поле относится к своему численному регистру (рис. 10.6).

Рис. 10.6. Формат регистра тегов

Поля регистра тегов классифицируют содержимое "своего" численного регистра:

Регистр содержит действительное ненулевое число

В регистре находится нуль

Регистр содержит недействительное число - нечисло, бесконечность, неопределенность

Пустой неинициализированный регистр

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

Регистр управления

Регистр управления для сопроцессора 8087 показан на рисунке 10.7.

Рис. 10.7. Формат регистра управления для сопроцессора 8087

Регистр управления сопроцессоров 80287/80387 и сопроцессора, входящего в состав более современных процессоров, имеет аналогичный формат, за исключением того, что бит 7 в нем не используется (рис. 10.8).

Рис. 10.8. Формат регистра управления для современных сопроцессоов

Биты 0. 5 - маски особых случаев. Особые случаи иногда возникают при выполнении команд сопроцессора, например, при делении на нуль, переполнении и так далее.

Если все биты масок особых случаев равны нулю, особый случай вызывает прерывание центрального процессора INT 10h (обратите внимание, что это прерывание используется BIOS для работы с дисплейным адаптером). Если же особые случаи замаскированы установкой соответствующих бит в единичное состояние, прерывание не вырабатывается, а в качестве результата возвращается особое значение - бесконечность, нечисло и так далее.

Windows 7 RC,
материнская плата Asus M2N, видяха GeForce 260, процессор AMD Dual Core 3800+

Система устанавливалась на чистый диск.

В диспетчере задач висит странный сопроцессор, автоматический поиск драйверов не помогает.

Ответы

Все ответы

В диспетчере задач или в диспетчере устройств? Т.к. речь про драйвера - видимо все-таки "устройств".
Откройте свойства данного устройства, на закладке "Details" в списке выберите "Hardware Ids" и напишите все что там будет.

Да, конечно я имел в виду диспетчер устройств.

Вот что выдаёт ID:

PCI\VEN_10DE&DEV_03F4&SUBSYS_82341043&REV_A2
PCI\VEN_10DE&DEV_03F4&SUBSYS_82341043
PCI\VEN_10DE&DEV_03F4&CC_0B4000
PCI\VEN_10DE&DEV_03F4&CC_0B40

Нет, драйвера от висты не спасают.

Сопроцессор всё так же висит в диспетчере.

Покажите, пожалуйста, нам скриншот этого странного сопроцессора в диспетчере. На работу ОС это как-то влияет? Что говорит техподдержка производителя?

Все вышесказанное является моим личным мнением, не имеющим отношения к корпорации Майкрософт

Ясно. А что по остальным моим вопросам?

Все вышесказанное является моим личным мнением, не имеющим отношения к корпорации Майкрософт

На работу ОС вроде как не влияет.
Прогнал несколько тестов, запустил несколько игр, все идёт очень шустро.
ФПС и результаты тестов, на семёрке, выше чем на Висте.

Русская техподдержка Асуса молчит второй день.

Да ,семерка горадо шустрее своей предшественницы. Попробуйте попинать не русскую, а западную техподдержку - они как правило отвечают оперативнее. Вообще, если на работу это не влияет - ИМХО ну и пусть висит, пока производитель не соберется с духом и не допилит драйвера. Все вышесказанное является моим личным мнением, не имеющим отношения к корпорации Майкрософт Помогло! Спасибо!
Отменил установщик, и вручную указал путь к драйверу.
Он его сразу подхватил.
Назвался NVIDIA nForce System Management Controller

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

Доброго времени суток,
У меня тоже была проблема с етим сопроцесором, я её решил с помощу обновления драйвера на видеокарту

Читайте также: