Команди передач даних FPU: завантаження, збереження, збереження з вибором зі стека, обміну, завантаження сталих. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Команди передач даних 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), особлива ситуація точність не формується.



Поделиться:


Последнее изменение этой страницы: 2017-01-27; просмотров: 358; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.160.216 (0.009 с.)