Assembler про механізм процедур; про макроассемблер

Про механізм процедур; Про макроассемблер; Про механізм переривань. На даному уроці нами будуть розглянуті основи механізму процедур. Важливість цього питання вимагає розгляду його в повному обсязі на окремому уроці (що ми і зробимо на уроці 14). Макроассемблер і переривання також будуть розглянуті як окремі питання (на уроках 13, 15 і 17).







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

Для опису послідовності команд у вигляді процедури в мові асемблера використовуються дві директиви: PROC і ENDP.

Синтаксис опису процедури такий (рис. 10.3).

імя_процедури PROC [[модіфікатор_язика] мову] ^ ARG спісок_аргументов] RETURNS спісок_аргументов] LOCAL спісок_аргументов] USES спісок_регістров]

Мал. 10.3. Синтаксис опису процедури в програмі

З рис. 10.3 видно, що в заголовку процедури (директиві PROC) обов'язковим є тільки завдання імені процедури. Серед великої кількості операндів директиви PROC слід особливо виділити [відстань]. Цей атрибут може приймати значення near або far і характеризує можливість звернення до процедури з іншого сегмента коду. За замовчуванням атрибут [відстань> приймає значення near.

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







Про на початку програми (до першої виконуваної команди); Про наприкінці (після команди, яка повертає керування операційній системі); Про проміжний варіант - тіло процедури розташовується всередині іншої процедури або основної програми. В цьому випадку необхідно передбачити обхід процедури за допомогою команди безумовного переходу jmp; Про в іншому модулі. Розміщення процедури на початку сегмента коду передбачає, що послідовність команд, обмежена парою директив PROC і ENDP, буде розміщена до мітки, що позначає першу команду, з якої починається виконання програми. Ця мітка повинна бути вказана як параметр директиви END, що позначає кінець програми:

model smal 1. stack IOOh .data .code

my_proc proc near ret

my_proc endp start:

model small
. stack 100h
.data
.code
myproc proc
4 I «ret
my_proc endp
start proc
• * | start endp
endstart

У цьому фрагменті після завантаження програми в пам'ять управління буде передано першій команді процедури з ім'ям main.

Розміщення процедури в кінці програми передбачає, що послідовність команд, обмежена директивами PROC і ENDP, буде розміщена після команди, яка повертає керування операційній системі.

model small .stack 100h .data. code start:

mov axt4cO0h int 21h; повернення управління операційній системі щу__ргос proc near

myjproc endp endstart

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

model smal1. stack IOOh .data .code start: і> •

my_proc proc near • • »

int 21h; повернення управління операційній системі endstart

Останній варіант розташування описів процедур - в окремому сегменті коду - припускає, що часто використовуються процедури виносяться в окремий файл. Файл з процедурами повинен бути оформлений як звичайний вихідний файл і підданий трансляції для отримання об'єктного коду. Згодом цей об'єктний файл утилітою TLINK можна об'єднати з файлом, де процедури використовуються. Використання утиліти TLINK описано на уроці 4. Цей спосіб передбачає наявність у вихідному тексті програми ще деяких елементів, пов'язаних з особливостями реалізації концепції модульного програмування в мові асемблера. Тому в повному обсязі цей спосіб буде розглянуто на уроці 14.
Попередня 85 86 87 88 89 90. 257 >> Наступна