- •2. Структура регістра eflags
- •3. Організація оперативної пам’яті. Сегментована модель оперативної пам’яті. Формування адреси в реальному режимі
- •4. Формати і типи даних. Формат машинних команд. Система переривань
- •5. Десяткова арифметика. Форми зображення десяткових чисел
- •7. Ділення ascii-чисел.
- •6. Директиви сегментації. Директиви proc і endp
- •7. Опис простих типів мовою асемблера
- •10. Синтаксис команд мовою асемблера
- •11. Команди передач даних
- •Xchg ax, data1; (data2) в data1, (ax) – початковий стан
- •12. Стекові передачі даних
- •13. Передачі адресних об’єктів, команди введення-виведення і передачі прапорців
- •14. Команди передачі даних movXx. Команда setCc. Команда xlat
- •15. Команди додавання, віднімання і порівняння
- •Inc reg/mem; Розмір 8/16/32.
- •16. Команди множення і ділення
- •20. Команди логічних операцій. Команди зсувів
- •22. Команди операцій з двійковими ланцюжками
- •23. Команди передачі керування (безумовні переходи)
- •24. Команди умовних переходів і команди керування циклами
- •26. Команди переривань і повернення з переривань
- •Загальні поняття.
- •Використання префіксів в ланцюжкових командах.
- •Команда movs.
- •Команда cmps.
- •Команда scas.
- •Команда lods.
- •Команда stos.
- •Команди введення/виведення ланцюжків.
- •29. Команди керування процесором
- •Команди, які впливають на прапорці.
- •Команди синхронізації.
- •Системні команди
- •31. Формати даних, які підтримуються fpu
- •Параметри для трьох форматів в таблиці
- •32. Програмна модель fpu
- •33. Слово стану sw і слово керування cw пристрою fpu.
- •Відповідність між кодом умови і прапорцями
- •34. Команди передач даних fpu: завантаження, збереження, збереження з вибором зі стека, обміну, завантаження сталих.
- •35. Арифметичні команди fpu: додавання, віднімання, множення, ділення.
- •36. Додаткові арифметичні команди fpu.
- •37. Команди порівняння fpu
- •38. Команди трансцендентних функцій. Алгоритми обчислення значень функцій і та логарифмів за будь-якою основою.
- •39. Команди керування пристроєм fpu
- •40. Спеціальні числові значення та особливі обчислювальні ситуації
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