| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > c++ и ассемблер — нужна ли finit? |
| Автор: Camphene 18.10.2015, 12:44 |
| В учебниках по ассемблеру рекомендуется перед началом работы с вещественными числами сбрасывать состояние и настройки FPU 8087 командой finit. Но как быть, если программа пишется не на чистом ассемблере, а на C++ с использованием ассемблерных вставок или функций? Если написать программу с вещественными вычислениями и получить ассемблерный код модуля (g++ -S), то в нём нет finit (сразу fld и арифметика). Но, может быть, сопроцессор сброшен в стартовом коде, который выполняется перед main()? Если finit вообще отсутствует в программе, то вроде бы могут возникать исключения. А сбросив настройки уже инициализированного компилятором FPU, я, скорее всего, что-то испорчу, особенно если ассемблерная вставка — не единственное место с вещественными вычислениями. Так что ставить finit в начале вставки «на всякий случай» не хочется. Выполняют ли компиляторы сброс сопроцессора сами? Всегда или надо указывать какие-то директивы/параметры? И чем различаются разные компиляторы (и реализации для разных ОС) в этом смысле? |
| Автор: a0730 20.10.2015, 21:16 |
| где-то видел: Программа должна использовать команду FINIT только в момент запуска. Команда FINIT никогда не должна быть использована внутри подпрограммы для сопроцессора 8087. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/c-i-assembler-—-nuzhna-li-finit-id56236a22ae2015c0118b4567#findElement_E7045_562684f3ae201596560470d1_0 |
| Автор: Camphene 21.10.2015, 00:51 |
| Тогда встаёт вопрос: считать ли main() подпрограммой? И всё ещё непонятно, обязан ли компилятор вставлять finit в стартовый код c++-программы. |
| Автор: Camphene 21.10.2015, 11:01 |
| Спасибо! |