Предыдущая страница (математические команды 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)