Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асм.docx
Скачиваний:
16
Добавлен:
27.10.2018
Размер:
644.06 Кб
Скачать

37. Команди порівняння fpu

Використовуються для аналізу чисел на вершині стека (іноді відносно другого числа) і формування коду умови в sw.

Команди дійсного порівняння: (st(0)) порівнюється з (src), а саме, з вмістом регістра, операндом в оперативній пам’яті (ОТ або ПТ). Якщо операнда немає, то порівнюються (st(0)) і (st(1)). В усіх командах порівняння знак нуля ігнорується, тобто і не розрізняються (рівні).

fcom // src – порівнює (st(0)) зі вмістом src. Код умови відображує відношення між числами операндами. Операнди вважаються не порівнюваними або не упорядкованими, якщо хоча б один з них є не числом.

zf pf cf

Умова

с3

с2

с1

с0

0

0

0

0

0

1

1

0

0

1

1

1

Після запису с3с2с1с0 в регістр ( і ) для переходу за результатом порівняння можна використовувати команди умовного переходу (). Для перевірки операндів не чисел використати команду . Команда fcom сигналізує про особливий випадок “недійсна операція”, якщо хоча б один з операндів є “тихим” не числом.

fcomp // src – порівняння і вилучення зі стека. Операнд src – в ОП (ОТ або ПТ). Працює як і fcom, але додатково ще вилучає зі стека.

fcompp – порівняння (st(0)) і (st(1)) та подвійного вилучення зі стека. Якщо будь-який з операндів є не числом або має не підтримуваний формат, або якщо виникає порушення стека, то формується особливий випадок “недійсна операція” і код умови показує не порівнювані (не упорядковані).

ficom src – результат порівняння визначається в таблиці, наведеній вище. Операнд (src) – трактується як ціле число в форматі ЦС або КЦ, перетворюється у формат РТ і порівнюється з (st(0)).

ficomp src – команда виконує такі ж дії як ficom і додатково ще вилучає зі стека. Операнд (src) – трактується як ціле число в форматі ЦС або КЦ, перетворюється у формат РТ і порівнюється з (st(0)). ОВ як і в інших командах порівняння.

Три команди fucom/fucomp/fucompp – неупорядкованого дійсного порівняння. Вони порівнюють вершину стека з (src), який може бути тільки вмістом регістра st(i). Якщо без операнда, то st(1). Коди умови визначаються у вище наведеній таблиці. Якщо будь який операнд у цих командах порівняння є “тихе не число”, то команди не формують особливий випадок “недійсна операція”, хоча біти коду умови показують “неупорядковані”. Однак, якщо один з операндів є сигналізуючим не числом або поданий у не підтримуваному форматі, або виникає порушення стека, формується особливий випадок “недійсна операція”.

fucomp – додатково вилучає зі стека вершину.

fucompp – додатково вилучає зі стека вершину і підвершину.

ftst – (без операнда) порівнює (st(0)) з нулем і формує код умови як вказано вище в таблиці.

fxam – аналіз вмісту вершини стека, тобто (st(0)), і формування в коді умови с3с2с1с0 результату цього аналізу, а саме:

с1= знаковий біт (st(0))

case (тип об’єкта в st(0)) of

не підтримуваний формат: с3,с2,с0=0,0,0

не число: с3,с2,с0=0,0,1

нормалізоване число: с3,с2,с0=0,1,0

безмежність: с3,с2,с0=0,1,1

Нуль: с3,с2,с0=1,0,0

Порожній: с3,с2,с0=1,0,1

Денормалізоване число: с3,с2,с0=1,1,0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]