Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота16.doc
Скачиваний:
1
Добавлен:
23.11.2019
Размер:
105.47 Кб
Скачать

Передача параметрів за значенням, що повертається

Цей механізм поєднує передачу за значенням і по посиланню. Процедурі передають адреса змінної, а процедура робить локальну копію параметра, потім працює з нею, а наприкінці записує локальну копію назад по переданій адресі. Цей метод ефективніше звичайної передачі параметрів по посиланню в тих випадках, коли процедура повинна звертатися до параметра досить велику кількість раз, наприклад, якщо використовується передача параметрів у глобальній змінній:

mov global_variable,offset value

call procedure

[...]

procedure proc near

mov dx,global_variable

mov ax,word ptr [dx]

(команди, що працюють із АХ у циклі десятки тисяч разів)

mov word ptr [dx],ax

procedure endp

Передача параметрів по результату

Цей механізм відрізняється від попередні тільки тем, що при виклику процедури попереднє значення параметра ніяк не визначається, а передана адреса використовується тільки для запису в нього результату.

Передача параметрів по імені

Це механізм, що використовують макровизначення, директива EQU, а також, наприклад, препроцесор С при обробці команди #define. При реалізації цього механізму в мові, що компілює, програмування (до якого ставиться й асемблер) доводиться заміняти передачу параметра по імені іншими механізмами за допомогою, зокрема, макровизначень.

Якщо визначено макровизначення

pass_by_name macro parameter1

mov ax,parameter1

endm

то тепер у програмі можна передавати параметр так:

pass_by_name value

call procedure

Приблизно так само поступають мови програмування високого рівня, що підтримують цей механізм: процедура одержує адресу спеціальної функції-заглушки, що обчислює адресу переданого по імені параметра.

Передача параметрів відкладеним обчисленням

Як і в попередньому випадку, тут процедура одержує адресу функції, що обчислює значення параметра. Такий механізм зручний, якщо обчислення значення параметра вимагає багато ресурсів або часу, наприклад, якщо функція повинна вибрати один з декількох ходів при грі в шахи, обчислення кожного параметра може займати кілька хвилин. При передачі параметрів відкладеним обчисленням функція одержує адресу заглушки, що при першому звертанні до неї обчислює значення параметра й зберігає його у внутрішньої локальної змінної, а при подальших викликах повертає раніше обчислене значення. Якщо процедурі взагалі не будуть потрібні значення частини параметрів (наприклад, якщо перший же хід приводить до мата), то використання відкладених обчислень сприяє значному виграшу. Цей механізм найчастіше застосовується в системах штучного інтелекту й операційних систем.

Передача параметрів у регістрах

Якщо процедура одержує невелике число параметрів, ідеальним місцем для їхньої передачі виявляються регістри. Прикладами використання цього методу можуть служити практично всі виклики переривань DOS і BIOS. Мови високого рівня звичайно використовують регістр АХ (ЕАХ) для того, щоб повертати результат роботи функції.

Передача параметрів у глобальних змінних

Коли не вистачає регістрів, один зі способів обійти це обмеження — записати параметр у змінну, до якої потім звертатися із процедури. Цей метод уважається неефективним, і його використання може привести до того, що рекурсія й повторна входимість стануть неможливими.