- •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. Спеціальні числові значення та особливі обчислювальні ситуації
Відповідність між кодом умови і прапорцями
Зведення. Якщо команди fprem і fprem1 повертають результат, який менший модуля, зведення завершено. В противному випадку, зведення не завершено (значення на вершині стека більше значення модуля і це значення можна використати як нове значення для перетворення командою одержання часткової остачі).
В командах fptan, fsin, fcos і fsincos біт зведення установлений в 1, якщо операнд у вершині стека надто великий. В цій ситуації у вершині стека зберігається початковий операнд.
Заокруглення вгору. Коли біт pe слова стану установлено в 1, цей біт (с1) показує, чи було останнє заокруглення в команді вгору.
Не визначені. Конкретні значення бітів відсутні.
Трибітове поле вершини стека top показує, який з внутрішніх регістрів даних є поточною вершиною стека.
Біт 15 зайнятості b (busy) передбачено тільки для сумісності зі співпроцесором 8087. Він установлюється в стан 1, коли зафіксовано незамаскований особливий випадок в бітах від 0 до 5, тобто установлено в стан 1 біт es.
34. Команди передач даних fpu: завантаження, збереження, збереження з вибором зі стека, обміну, завантаження сталих.
Є п’ять груп команд FPU: передачі даних, арифметичні, порівняння, трансцендентних функцій і керування. Команди передач даних здійснюють передачі даних між регістрами стека, між вершиною стека і оперативною пам’яттю. Однією командою число з оперативної пам’яті, подане в будь-якому зовнішньому форматі, перетворюється у формат розширеної точності (РТ) і завантажується в стек. Аналогічно, але в зворотному порядку, здійснюється передача числа в ОП з вилученням або ні зі стека. Команди передач даних автоматично модифікують регістр тегів FPU.
Команди завантаження. Є три команди завантаження: дійсних чисел fld src, цілих двійкових чисел fild src і цілих десяткових чисел fbld src FPU виконує дві дії:
– декремент вказівника стека (поля top);
передає адресований операнд у нову вершину стека.
Щоб не переповнити стек перед завантаженням перевіряється тег регістра st(0). Якщо регістр не відзначений як порожній, то установлюються в 1 прапорці sf та ie.
Джерелом у команді fld може бути регістр стека st(i) або дійсне число в оперативній пам’яті, подане в довільному з трьох форматів. Номер регістра відповідає ситуації до декремента вказівника вершини стека. Наприклад, команда fld st(0) дублює (копіює) вершину стека. З форматів ОТ і ПТ операнд автоматично перетворюється в РТ формат.
У команді fild src операнд в ОП може бути в будь-якому з цілочислових форматів – ЦС, КЦ, ПЦ. Операнд джерело завантажується без похибки заокруглення. Щоб уникнути особливого випадку “недійсна операція”, st(7) повинен бути порожнім.
числом в ОП; FPU не контролює наявність у ньому заборонених тетрад від 1010b до 1111b і, якщо вони наявні в операнді, результат завантаження не визначений. Команда fbld перетворює десятковий операнд в розширений формат РТ і записує його в стекFPU. Команда точна, не має помилок заокруглення.
Приклади:
fld st(0); Копіює вершину стека
fld qword ptr [bx]; Завантажує довге дійсне
fild word ptr arr[di]; Завантажує ціле слово
fbld volume; Завантажує ціле десяткове
Команди збереження. Дві команди збереження fst dst і fist dst передають вміст (st(0)) в оперативну пам’ять без модифікації top і самого (st(0)). В команді fst dst приймачем може бути регістр стека st(i) або дійсна змінна в оперативній пам’яті (тільки в форматі ОТ або ПТ). Мантиса (st(0)) заокруглюється у відповідності з полем rc і довжиною мантиси приймача, а порядок коректується з урахуванням довжини і значення зміщення формату приймача. Коли (st(0)) відзначено як спеціальне значення, мантиса не заокруглюється, а урізається справа; порядок також урізається справа. Такі дії забезпечують збереження вигляду спеціального значення.
В команді fist dst приймачем є змінна в ОП, яка повинна мати формат ЦС або КЦ. Команда заокруглює (st(0)) до цілого у відповідності з полем rc і передає результат в dst. Якщо (st(0)) від’ємний нуль, то він збережеться як додатній нуль. Команда fist dst установлює прапорець ie, якщо (st(0)) виявиться “тихе не число”.
Заувага: приймач у форматах ПЦ (fist) і РТ (fst) неприпустимий у зв’язку з недостатністю двійкових наборів для відповідних кодів операцій FPU.
Приклади:
fst st(5)
fst word ptr [bx][si]
fist mean
Команди збереження з вилученням зі стека. Команди fstp dst і fbstp dst крім передачі (st(0)) в приймач забезпечують вилучення зі стека: регістр, який був вершиною стека позначається як порожній і інкрементується вказівник стека top. Перед збереженням перевіряється тег регістра st(0). Якщо він порожній, то встановлюються прапорці sf і ie, а також с1=0, вказуючи на антипереповнення стека (dst у команді fstp може бути st(i)). Формат приймача у команді може бути ОТ, ПТ або РТ.
Команда fistp забезпечує передачу в оперативну пам’ять числа в будь-якому форматі – ЦС, КЦ або ПЦ. Заокруглення – (rc).
Команда fbstp dst перетворює (st(0)) в упаковане десяткове (заокруглення – (rc)), передає його в оперативну пам’ять і забезпечує вилучення зі стека. Установлює ie=1, якщо (st(0)) – “тихе не число“.
В командах збереження обох видів при перетворенні можуть виникнути декілька особливих випадків. Якщо число змінюється в процесі заокруглення, генерується особливий випадок “втрата точності”. Коли заокруглене число надто велике для формату приймача, особлива ситуація “переповнення”. При перетворенні в ОТ або ПТ може виникнути особлива ситуація “антипереповнення”, якщо заокруглене число не нуль, але менше порогу антипереповнення формату приймача.
Команда обміну. Забезпечує обмін вмісту регістрів. Загальний вигляд команди
fxch // dst; dst=st(i) і тільки
Якщо є приймач st(i), то обмінюються вмістом st(i) і st(0). Якщо операнд dst відсутній, тобто команда без операндів, то вмістом обмінюються st(0) і st(1) (вершина і під вершина стека).
Команда fxch st(0) еквівалентна команді, яка не виконує ніяких дій (холоста команда).
Команди завантаження сталих. Таких команд є сім. Вони забезпечують завантаження сталих на вершину стека з внутрішньої пам’яті FPU, де вони зберігаються з великою точністю і завантажуються швидше, ніж з оперативної пам’яті. Це наступні команди:
fldz; Завантаження нуля
fld1; Завантаження одиниці
fldpi; Завантаження
fldl2t; Завантаження
fldl2e; Завантаження
fldlg2; Завантаження
fldln2; Завантаження
Алгоритм виконання команд:
а) ;
б) передача в нову вершину значення сталої у форматі РТ.
Стала заокруглюється у відповідності з режимом заокруглення (rc), особлива ситуація точність не формується.