Показанное на Рисунке 15-2 16-разрядное слово состояния отражает специальное состояние модуля обработки операций с плавающей точкой. Это слово состояния может быть сохранено в памяти с помощью команд FSTSW/FNSTSW, FSTENV/FNSTENV и FSAVE /FNSAVE, а также передано в регистр AX с помощью команд FSTSW AX /FNSTSW AX, позволяя модулю обработки целочисленных операций проверять слово состояния модуля обработки операций с плавающей точкой.
Бит B (бит 15) включен в слово только для совместимости с сопроцессором 8087. Он отражает содержание бита ES (бит 7 слова состояния).
Четыре бита кода условия модуля обработки операций с плавающей точкой (C3-C0) подобны флагам в ЦПУ: процессор i486 обновляет эти биты для того, чтобы отразить результат арифметических операций. Действие команд на биты кода условия приведены в Таблице 15-1. Биты кода условия в принципе используются для условного ветвления. Команда FSTSW AX сохраняет слово состояния модуля непосредственно в регистре AX, позволяя процессору i486 просматривать эти коды условия. Команда SAHF может копировать C3-C0 непосредственно в биты флагов процессора i486 для того, чтобы упростить условное ветвление. В Таблице 15- 2 показано соответствие этих битов битам флагов процессора i486.
Рисунок 15-2. Слово Состояния FPU Процессора i486 +---------------------------------------------------------------+| || || +------------------------------ FPU ЗАНЯТО || | || | +------------------- ВЕРШИНА УКАЗАТЕЛЯ СТЕКА || | +-|-|-|---------------------- КОД УСЛОВИЯ || | | | | | | | | || || 15 7 0 || +-------------------------------+ || |B|C| TOP |C|C|C|E|S|P|U|O|Z|D|I| || | |3| |2|1|0|S|F|E|E|E|E|E|E| || +-------------------------------+ || || | | | | | | | | || СУММАРНЫЙ СТАТУС ОШИБОК ----+ | | | | | | | || ОШИБКА СТЕКА -----------------+ | | | | | | || ФЛАГИ ОСОБЫХ СИТУАЦИЙ | | | | | | || ТОЧНОСТЬ ---------------------+ | | | | | || ОТРИЦАТЕЛЬНОЕ ПЕРЕПОЛНЕНИЕ -----+ | | | | || ПЕРЕПОЛНЕНИЕ ---------------------+ | | | || ДЕЛЕНИЕ НА НОЛЬ --------------------+ | | || НЕНОРМАЛИЗОВАННЫЙ ОПЕРАНД ------------+ | || НЕДОПУСТИМАЯ ОПЕРАЦИЯ ------------------+ || || БИТ ES УСТАНАВЛИВАЕТСЯ В ТОМ СЛУЧАЕ, ЕСЛИ УСТАНАВЛИВАЕТСЯ || НЕМАСКИРОВАННЫЙ БИТ ИСКЛЮЧЕНИЯ. В ПРОТИВНОМ СЛУЧАЕ ОЧИЩЕН. || || ДЛЯ ИНТЕРПРЕТАЦИИ КОДА УСЛОВИЯ ОБРАТИТЕСЬ К ТАБЛИЦЕ 2-1. || ЗНАЧЕНИЕ ВЕЛИЧИНЫ TOP: || 000 = РЕГИСТР 0 - ВЕРШИНА СТЕКА || 001 = РЕГИСТР 1 - ВЕРШИНА СТЕКА || . || . || . || 111 = РЕГИСТР 7 - ВЕРШИНА СТЕКА || ДЛЯ ОПРЕДЕЛЕНИЯ ИСКЛЮЧЕНИЙ ОБРАТИТЕСЬ К ГЛАВЕ 3. || || |+---------------------------------------------------------------+
Биты 12-14 слова состояния указывают на регистр модуля обработки операций с плавающей точкой, который является текущей вершиной стека (TOP). Назначение вершины стека описано в предыдущем разделе по регистровому стеку.
Рисунок 15-2 демонстрирует шесть флагов исключений в битах 0-5 слова состояния. Бит 7 - это бит суммарного состояния исключений (ES). Бит ES установлен, если любые немаскируемые биты исключений установлены, и очищен в противном случае. Биты 0 -5 указывают на то, обнаружил ли модуль обработки операций с плавающей точкой одно из шести возможных условий исключеня с тех пор, как биты состояния были последний раз очищены или переустановлены. Это "липкие" биты и могут быть очищены только командами FINIT, FCLEX, FLDENV, FSAVE и FRSTOR.
O/U# Если оба бита IE и SF установлены в слове состояния, показывая исключение стека, то это бит имеет значение переполнения стека (C1=1) или отрицательного переполнения (C1=0). Сокращение Если результат операций FPREM и FPREM1 остаток, который меньше делителя, то сокращение закончено. Если сокращение не закончено, то в вершине стека будет находиться частичный остаток, который может использоваться для дольнейшего сокращения. Для команд FPTAN, FSIN, FCOS и FSINCOS бит сокращения устанавливается в том случае, если операнд в вершине стека слишком большой. В этом случае исходный операнд остается в вершине стека.
Округление Когда в слове состояния установлен бит PE, он показывает, было ли последнее округление округлением сверху.
НЕ ОПРЕДЕЛЕНЫ Эти биты не содержат определенных значений.
Бит 6 является битом ошибки стека (SF). Этот бит отличает запрещенные команды, влекущие за собой переполнение или отрицательное переполнение стека, от другого рода запрещенных команд. Когда SF установлен, бит 9 (C1) определяет переполнение стека (C1=1) либо отрицательное переполнение стека (C1=0).