Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздаточный материалМПС_микроЭВМ_ред.3 ФАВТ.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
8.96 Mб
Скачать

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

Команды сравнения можно разделить на две группы. К первой группе относятся команды, которые по результатам сравнения устанавливают биты С0, С2 и С3 в регистре SW МСП. Результат сравнения интерпретируется в соответствии с табл. 6.

Таблица 6

Флаги сравнения FPU

Сравнение

С3

С2

С0

Разряды регистра SW

14

10

8

ST(0) > источника

0

0

0

ST(0) < источника

0

0

1

ST(0) = источнику

1

0

0

Несравнимы

1

1

1

Чтобы организовать по результатам такого сравнения какой-либо условный переход, программисту приходится предпринимать ряд действий. Программист должен переслать SW в регистр АХ целочисленного процессора (командой FSTSW ax), а затем производить анализ (командой test ax, n) соответствующих бит регистра АХ. Например, это можно сделать так (порядок проверок имеет значение!!):

FSTSW ax

wait

test ax, 400h

jnz m1

test ax, 4500h

jz m3

test ax, 100h

jnz m3

test ax, 4000h

jnz m4

; переход, если «несравнимы»

; переход, если «больше»

; переход, если «меньше»

; переход, если «равно»

Команды сравнения, относящиеся ко второй группе, появились, начиная с Pentium II. Они лишены вышеуказанного недостатка, поскольку по результатам сравнения сразу устанавливаются флаги в регистре флагов EF целочисленного процессора в соответствии с табл. 7.

По этим флагам можно сразу выполнять условные переходы. В табл. 8 показана система команд сравнения МСП.

Таблица 7

Флаги после команд FUCOM

Сравнение

С3

С2

С0

Регистр состояния FP CPU

ZF

PF

CF

ST(0) > источника

0

0

0

ST(0) < источника

0

0

1

ST(0) = источнику

1

0

0

несравнимы

1

1

1

Таблица 8

Система команд сравнения МСП

КОМАНДЫ СРАВНЕНИЯ

Команда

Описание

FCOM m32fp

FCOM m64fp

FCOM ST(i)

FCOM

FCOMP m32fp

FCOMP m64fp

FCOMP ST(i)

FCOMP

FCOMPP

Сравнить ST(0) с источником, установить биты С в SW

  • // -

  • // -

  • // - ; источник – ST(1)

Сравнить с источником, установит биты С в SW после чего TOP  TOP + 1

  • // -

  • // -

  • // - ; источник – ST(1)

Сравнить ST(0) и ST(1), установить биты С в SW, после чего пометить ST(0) и ST(1) как EMPTY и TOP  TOP + 2

Продолжение табл. 8

КОМАНДЫ СРАВНЕНИЯ

Команда

Описание

FUCOM ST(i)

FUCOM

FUCOMP ST(i)

FUCOMP

FUCOMPP

Аналогичны соответствующим командам FCOM, только при несравнимых операндах (например, один и операндов нечисло) не генерируется особый случай недействительной операции.

FICOM m16int

FICOM m32int

FICOMP m16int

FICOMP m32int

Сравнить ST(0) с источником, установит биты С в SW

  • //-

Сравнить ST(0) c источником, установить биты С в SW, после чего TOP  TOP + 1

  • //-

FCOMI ST(0), ST(i)

FCOMIP ST(0),ST(i)

FUCOMI ST(0),ST(i)

FUCOMIP ST(0),ST(i)

Сравнить и установить флаги zf, pf, cf

  • //- после чего TOP  TOP + 1

Аналогична FCOMI, но не генерируется особый случай недействительной операции.

Аналогична FCOMIP, но не генерируется особый случай недействительной операции.

FTST

Сравнивает ST(0) c 0.0 и устанавливает биты С в SW

FXAM

«Экзаменует» число в ST(0) и по результатам устанавливает биты С в SW в соответствии с приводимой ниже таблицей.

В табл. 9 показана установка битов С для команды FXAM.

Таблица 9

Результаты действия команды FXAM

Класс

С3

С2

С0

неподдерживаемый формат

0

0

0

нечисло

0

0

1

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

0

1

0

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

0

1

1

нуль

1

0

0

пустой (EMPTY)

1

0

1

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

1

1

0