
- •Завдання на лабораторну роботу
- •Теоретичні відомості
- •32-Бітний формат чисел з плаваючою комою
- •64-Бітний формат чисел з плаваючою комою
- •80-Бітний формат чисел з плаваючою комою
- •Система команд математичного співпроцесора
- •Система команд співпроцесора Intel 8087 Команди передачі даних
- •Команди порівняння даних
- •Арифметичні команди
- •Трансцендентні функції
- •Команди управління співпроцесором
- •Реалізація функцій через команди співпроцесора
- •Програми, використані для роботи
- •Стандартні функції
- •Правила звернення до функції виведення printf
- •Функція вводу scanf
- •Приклад лабораторної роботи для функції lg(X)
Програми, використані для роботи
Використовувати інший компілятор - MASM 5.00. Його спосіб роботи схожий з компілятором tasm. Використання зовнішньої бібліотеки (slibce.lib). До того ж, даний компілятор володіє інтерактивним консольним меню, що робить його більш дружнім до користувача. Він так само, як і його попередник генерує файл з розширенням obj за допомогою команди:
masm source.asm
Наступна команда виконує лінковку:
link source.obj
і в запиті, що стосується використання зовнішніх бібліотек, введіть slibce.lib. Приклад компіляції вихідного файлу з masm, link і slibce.lib:
Стандартні функції
Аргументи стандартних математичних функцій мови передаються в підпрограму через верхівку стека процесора у вигляді числа з плаваючою крапкою в форматі longdouble, для чого можна використовувати такі команди, включаючи команди співпроцесора::
fld x; Завантаження аргументу в стек співпроцесора
sub sp,8; Підготовка місця в стеку головного процесора
mov bp,sp; Підготовкавказівника
fstp qword ptr[bp]; Пересиланняаргумента в стекз співпроцесора
call _func; ім'я вхідної точки функції в бібліотечному модулі
add sp,8; звілнення стека
Результат обчислення стандартної функції також в форматі довгого дійсного (longdouble) буде розміщено в сегменті даних, а його внутрішньосегментна адреса в підпрограмах використовуваної бібліотеки повертається при виході з підпрограми в акумуляторі AX. Таким чином для прийому і збереження результату можна використовувати такі команди:
mov bp,ax; Копіювання внутрішньосегментний адреси
fld qword ptr[bp]; Пересилання результату в співпроцесор
fstp dest; ім'я області приймача результату
При зверненні до стандартних функцій використовуються наведені в
таблиці стандартні імена, при цьому тип аргументу і тип обчисленого значення однакові - longdouble.
Позначення функції |
Назва функції |
Ім'я вхідної точки функції в бібліотечному модулі |
printf(s) scanf(s,f) sin(x) cos(x) tg(x) exp(x) ln(x) lg(x) acrsin(x) arccos(x) arctg(x) sh(x) ch(x) th(x) |
Вивід рядка Ввід рядка синус косинус тангенс експонента логарифм натуральний логарифм десятковий арксинус арккосинус арктангенс синус гіперболічний косинус гіперболічний тангенс гіперболічний |
_printf _scanf _sin _cos _tan _exp _log _log10 _asin _acos _atan _sinh _cosh _tanh |
Оскільки число параметрів при викликах підпрограм в мові С не зафіксовано жорстко, то функція, що викликається, не видаляє параметри з стека при поверненні в програму. Команда видалення параметрів з стека повинна бути поміщена одразу після команди виклику функції.
Приклад. Фрагмент виклику функції на мові Асемблера:
push c ; завантаження значення параметра С в стек
push b + 2 ; завантаження старших розрядів B в стек
push b ; завантаження молодших розрядів B в стек
push a ; завантаження значення параметра A в стек
call _func ; виклик функції func
add sp,8 ; видалення параметрів зі стеку
; Де 8 - кількість байтів, займаних параметрами a, b, c.