Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> c++ и ассемблер — нужна ли finit? Сбрасывают ли FPU компиляторы c++? 
:(
    Опции темы
Camphene
Дата 18.10.2015, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.12.2008

Репутация: нет
Всего: нет



В учебниках по ассемблеру рекомендуется перед началом работы с вещественными числами сбрасывать состояние и настройки FPU 8087 командой finit.

Но как быть, если программа пишется не на чистом ассемблере, а на C++ с использованием ассемблерных вставок или функций?

Если написать программу с вещественными вычислениями и получить ассемблерный код модуля (g++ -S), то в нём нет finit (сразу fld и арифметика).
Но, может быть, сопроцессор сброшен в стартовом коде, который выполняется перед main()?

Если finit вообще отсутствует в программе, то вроде бы могут возникать исключения.
А сбросив настройки уже инициализированного компилятором FPU, я, скорее всего, что-то испорчу, особенно если ассемблерная вставка — не единственное место с вещественными вычислениями.
Так что ставить finit в начале вставки «на всякий случай» не хочется.

Выполняют ли компиляторы сброс сопроцессора сами?
Всегда или надо указывать какие-то директивы/параметры?
И чем различаются разные компиляторы (и реализации для разных ОС) в этом смысле?

Это сообщение отредактировал(а) Camphene - 18.10.2015, 12:57
PM MAIL   Вверх
a0730
Дата 20.10.2015, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



где-то видел:

Программа должна использовать команду FINIT только в момент запуска.
Команда FINIT никогда не должна быть использована внутри подпрограммы для сопроцессора 8087.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Camphene
Дата 21.10.2015, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.12.2008

Репутация: нет
Всего: нет



Тогда встаёт вопрос: считать ли main() подпрограммой?

И всё ещё непонятно, обязан ли компилятор вставлять finit в стартовый код c++-программы.
PM MAIL   Вверх
volatile
Дата 21.10.2015, 10:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Camphene @  18.10.2015,  12:44 Найти цитируемый пост)
 учебниках по ассемблеру рекомендуется перед началом работы с вещественными числами сбрасывать состояние и настройки FPU 8087 командой finit

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



Это сообщение отредактировал(а) volatile - 21.10.2015, 10:19
PM MAIL   Вверх
Camphene
Дата 21.10.2015, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.12.2008

Репутация: нет
Всего: нет



Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.