Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекцій із Системного програмування та...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
786.31 Кб
Скачать

1. Організація процедур та переривань

Процедурою в асемблері є те що в інших мовах програмування називають підпрограмами, функціями процедурами і т.д. Асемблер не накладає на процедури ні яких обмежень, на будь-яку адресу програми можна передати управління командою CALL, і подальше виконання програми передасться вказаної процедури. Виконання тієї чи іншої процедури буде продовжуватись до першого входження команди RET. Така свобода вираження команд може легко призвести до важко читаних програм. У зв’язку з цим у асемблер були включені директиви логічного оформлення процедур.

Мітка proc мова тип USES регістри ;TASM. Або

Мітка proc тип мова USES регістри ;MASM/WASM ret

Мітка endp

Всі операнди PROC необов’язкові.

Тип може приймати значення NEAR та FAR, і якщо він вказаний всі команди RET в тілі процедури будуть замінені відповідно RETN та RETF. По замовчуванню розуміють, що процедура має тип NEAR в моделях пам’яті TINY, SMALL, COMPACT.

PROC дозволяє рахувати параметри, які передаються викликаючого програмою. В цьому випадку необхідно вказати мову високого рівня, так як різні мови високого рівня використовують різні способи передачі параметрів.

USES – список регістрів, значення яких змінює процедура. Асемблер розміщує на початок процедури набір команд PUSH, а перед командою RET – набір команд POP, так що значення перерахованих регістрів будуть відновлені.

2. Передача параметрів процедурам через регістри, через стек, через таблиці, через глобальні області

Процедури можуть отримувати і не отримувати параметри із визваної процедури і можуть повертати або не повертати відповіді.

На мові асемблера параметри для процедур можна передавати за допомогою шести способів:

По значенню

По сильці

По повернутому значенню

По результату

По імені

Ускладненим розрахуванням

Параметри можна передавати в одному із п’яти місць:

В регістрах

В глобальних перемінних

В стеку

У потоці коду

В блоку параметрів

Розглянемо деякі способи передачі параметрів для процедур

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

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

Приклад: (параметри передаються в регістрах)

Mov ax, word ptr value ; Сделать копию значения

Call procedure ; Вызвать процедуру

3. Передача параметрів по ссылке

Процедурі передається не значення змінної, а її адреса, по якої процедура сама прочитає значення параметру. Такий механізм зручний для передачі великих масивів даних, і в тих випадках коли процедура повинна модифікувати параметри.

Приклад:

Mov ax, offset value

Call procedure

4. Передача параметрів по повернутому значенню

Цей механізм з’єднує передачу по значенню та передачу по ссылке. Процедурі передають адресу змінної, а процедура робить локальну копію параметру і потім працює з нею.

Приклад:

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