October 20 2017 00:42:39
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
КОМАНДЫ СРАВНЕНИЯ
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ

К этой группе относятся команды (табл. 2.33), выполняющие сравнение двух операндов с плавающей точкой и установкой соответствующих битов в регистре состояния FPSR или регистре EFLAGS, а также команды тестирования (сравнение операнда с нулем) и анализа содержимого регистра ST(0).

Команды FCOM, FCOMP, FCOMPP производят сравнение вещественных чисел. При выполнении команды FCOMP после сравнения производится освобождение вершины стека - регистра ST(0), т. е. значение поля ТОР увеличивается на единицу, а бывший регистр ST(0) становится пустым. После сравнения содержимого двух верхних регистров стека ST(0) и ST(1) по команде FCOMPP освобождаются оба этих регистра. Команды FICOM, FICOMP выполняют аналогичные операции с целыми числами в формате ЦС (m16int) и КЦ (m32int). По результатам сравнения устанавливаются соответствующие значения битов С0, С1, С3 в регистре FPSR согласно табл. 2.34. При этом проверяются типы сравниваемых операндов. Операнды считаются не сравнимыми, если один из них или оба являются не-числами или представлены в неподдерживаемом (unsupported) формате. В этом случае фиксируется ошибка FPU типа #1 (недействительная операция) и реализуется исключение типа #MF («Ошибка FPU»), если в регистре FPCR бит маски IM = 0.

Таблица 2.33 Команды сравнения

Синтаксис команды Операция
FCOM
ST(i)
m(32,64) real
Сравнение ST(0) с ST(1)
Сравнение ST(0) с ST(i)
Сравнение ST(0) с m(32,64)
FCOMP
ST(i)
m(32,64) real
Сравнение ST(0) с ST(1), освобождение ST(0)
Сравнение ST(0) с ST(i), освобождение ST(0)
Сравнение ST(0) с m(32,64), освобождение ST(0)
FCOMPP
Сравнение ST(0) с ST(1), освобождение ST(0), ST(1)
FICOM
FICOMP
m(16,32) int
m(16,32) int
Сравнение ST(0) c m(16,32)
Сравнение ST(0) с m(16,32),освобождение ST(0)
FCOMI
FCOMIP
ST(0), ST(i)
ST(0), ST(i)
Сравнение ST(0) с ST(i), установка ZF,PF,CF
Сравнение ST(0) с ST(i), установка ZF,PF,CF,
освобождение ST(0)
FUCOMI
FUCOMIP
ST(0), ST(i)
ST(0), ST(i)
Сравнение ST(0) с ST(i), установка ZF,PF,CF
Сравнение ST(0) с ST(i), установка ZF,PF,CF,
освобождение ST(0)
FUCOM
ST(i)
Сравнение ST(0) cST(1)
Сравнение ST(0) с ST(i)
FUCOMP
ST(i)
Сравнение ST(0) с ST(1), освобождение ST(0)
Сравнение ST(0) с ST(i), освобождение ST(0)
FUCOMIP
Сравнение ST(0) с ST(1), освобождение ST(0), ST(1)
FTST
Сравнение ST(0) с нулем
FXAM
Проверка содержимого ST(0)

Команды FUCOM, FUCOMP, FUCOMPP выполняют такие же операции, как FCOM, FCOMP, FCOMPP, но не реализуют исключение при поступлении не-чисел типа QNAN, позволяя текущей программе обрабатывать неупорядоченные (unordered) операнды.

Команды FCOMI, FCOMIP, FUCOMIP, FUCOMIP производят сравнение операндов, размещенных в регистрах ST(0), ST(1). При этом результаты сравнения представляются определенными значениями признаков ZF, PF, CF в регистре EFLAGS в соответствии с табл. 2.35. После выполнения сравнения команды FCOMIP, FUCOMIP освобождают регистр ST(0). Команды FCOMI, FCOMIP реализуют исключение типа #MF при сравнении операндов, являющихся не-числами, команды FUCOMI, FUCOMIP не вызывают исключения, позволяя сравнивать, таким образом, неупорядоченные (unordered) операнды.

Таблица 2.34 Коды результата операций сравнения в регистре FPSR

Результат С3 С2 С0
ST(0) > X 0 0 0
ST(0) < X 0 0 1
ST(0) = X 1 0 0
Не сравнимы 1 1 1

Таблица 2.35 Коды результата операций сравнения в регистре EFLAGS

Результат ZF PF CF
ST(0) > ST(i) 0 0 0
ST(0) < ST(i) 0 0 1
ST(0) = ST(i) 1 0 0
He сравнимы 1 1 1

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.04 секунд 2,256,572 уникальных посетителей