Предыдущая страница (математические команды FPU)

Команды сравнения FPU

1) fcom|fcomp источник – сравнивает содержимое st(0) с источником (32 или 64-битная переменная или регистр st(n)), флаги устанавливаются в соответствии с таблицей:
Условие
C3
C0
st(0)>источник
0
0
st(0)<источник
0
1
st(0)=источник
1
0
fcomp – кроме того, выталкивает операнд из стека, сравнивает st(0) и st(1)

2) fcompp – команда без источника, работает аналогично предыдущей, fcompp – кроме того, выталкивает два операнда из стека

3) fucom источник – сравнить без учёта порядков
3) fucomp источник – сравнить без учёта порядков и вытолкнуть из стека
3) fucompp – сравнить без учёта порядков и вытолкнуть из стека два числа
Действует полностью по аналогии с fcom|fcomp|fcompp

4) ftst – сравнивает st(0) с нулём и выставляет флаги C3, C0 аналогично fcom

5) fstsw приёмник – сохраняет текущее значение регистра SR в приёмник (регистр ax или m16). После fstsw флаги сопроцессора теряются!!!

6) sahf – загружает флаги SF, ZF, AF, PF, CF из регистра ah значениями битов 7, 6, 4, 2, 0 соответственно. Обычно для сравнения чисел используется следующая последо-вательность: fcom|fcomp|fcompp, fstsw, sahf, потом переходы можно делать как после cmp. Фактически получается так: эта последовательность команд если больше, устанавливает CF=0, ZF=0; если меньше, то CF=1, ZF=0, если равно CF=0, ZF=1. Поэтому можно пользоваться только следующими командами перехода: ja, jae, jb, jbe, je, jne. Бессмысленно использовать, например, jg или jge


Следующая страница (команды управления FPU)