Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ЭВМ и ПУ.doc
Скачиваний:
64
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

4.5.4.Команды сравнений

МНЕМОНИКА

ОПИСАНИЕ

FCOM операнд/(без операндов)

Сравнение

FICOM операнд

Целочисленное сравнение

FCOMP операнд/(без операндов)

Сравнение с извлечением из списка

FICOMP операнд

Целочисленное сравнение с извлечением

FCOMPP (без операндов)

Сравнение и двойное извлечение

FTST (без операндов)

Сравнение с нулем

FXAM (без операндов)

Анализ

FUCOM (без операндов)

Сравнение мантисс операндов

FUCOMP (без операндов)

Сравнение мантисс операндов с извлечением

FUCOMPP (без операндов)

Сравнение мантисс операндов с двойным извлечением

Во всех операциях сравнения всегда существует ST(0), поэтому требуется один операнд, если нет операндов, то второй операнд берется изST(1).

FCOMXсравнивает содержимоеST(0) с операндомXи устанавливает следующие коды условия :

Условие сравнения

С3

С2

С0

ST(0) > X

0

0

0

ST(0) < X

0

0

1

ST(0) = X

1

0

0

ST(0) и X “не сравнимы”

1

1

1

Х- численный регистр, или число в памяти одинарной или двойной точности. Указатель вершины стека - не изменяется.

FCOM- без операндов - этоFCOMST(1).

FCOMP- этоFCOMPST(1) и извлекается из стека содержимое регистраST(0), то есть указатель вершины стека уменьшается на единицу.

FCOMPP– этоFCOMPPST(1) и извлекается из стека содержимое регистровST(0) иST(1), то есть указатель вершины стека уменьшается на два.

FICOM- аналогичнаFCOM, но операндом является целое число (16 или 32 бита) в памяти.

FCOMP- аналогичнаFCOM, но после операции сравнения производится одно извлечение из стека, то есть указатель вершины стека уменьшается на единицу.

FICOMP- аналогичнаFCOMPдля целых чисел

FCOMPP(без операндов) действует какFCOM(без операндов), но после сравнения она извлекает из стека оба операнда, то есть указатель вершины стека уменьшается на два.

FTST– сравнивает нулем и устанавливает следующие коды условия:

Условие сравнения

С3

С2

С0

ST(0) > 0

0

0

0

ST(0) < 0

0

0

1

ST(0) = 0

1

0

0

ST(0) и 0 “не сравнимы”

1

1

1

FXAM - аналогична FTST, но установка кодов условий другая:

С1= 0

С1= 1

ST(0) >0

ST(0) <0

С0= 0

С0= 1

ST(0) конечное

ST(0) не конечное

С3

С2

С3

С2

0

0

ненормализованное

0

0

нечисло

0

1

нормализованное

0

1

бесконечность

1

0

0

1

0

пустой регистр

1

1

денормализованное

1

1

пустой регистр

FXAMвыполняется примерно в два раза быстрее чемFTST.

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

FUCOM,FUCOMP,FUCOMPP- сравнивают мантиссы. Допускается сравнение нечисел.

Бит С2= 1, если один или оба операнда - нечисла, а биты С0и С3устанавливает соотношение между мантиссами.

- безоперандные- сравниваютST(0) иST(1).

Коды условий после команд сравнения мантисс:

С3

С2

С0

0

1

0

ST(0) > 0

0

1

1

ST(0) < 0

1

1

0

ST(0) = 0

1

1

1

?

Как используются коды условий сопроцессора для условных переходов основного процессора?

Ассемблерная команда сопроцессора FSTSWAXкопирует содержимое регистра состояния сопроцессора в регистрAXосновного процессора.

Затем коды условий проверяются в среде основного процессора.

Команда SAHF(запомнитьAHво флагах) позволяет получить следующий результат:

SF

ZF

AF

PF

CF

SAHF

15

8

B

C3

ST

C2

C1

C0

FSTW AX

РезультатFCOMпо установке флажков такой же, как и у командыCMPосновного процессора за исключением условия “не сравнимы”.

FCOM

FSTSW AX

FWAIT, если нет FPU

SAHF

JE MET

Переход к MET, если

ST(0) =ST(1)

Команды JE,JNE,JA,JAE,JB,JBE,

JP, JNP, JC, JNC, JZ, JNZ – можно использовать для условных переходов