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

Програми, використані для роботи

Використовувати інший компілятор - 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.

Соседние файлы в папке SP_ukr