Пошукова робота з
дисципліни
“Системне програмування”
на тему: “Особливості використання функцій на мові Асемблер”
Програма, яка викликається
1. Ім’я процедури (функції) повинна бути задана в директиві public:
public ім’я процедури (функції)
2. Якщо процедура (функція) використовує дані, пам’ять під які виділена в іншій програмі, то в цій програмі використовується директива extrn, визначення 1, визначення 2, ...
Загальний вид визначення для даних, що передаються:
ім’я – тип: кількість, де
ім’я - ім’я даного, пам’ять під яке виділена в іншому модулі;
тип – тип даного, використовується для визначення довжини даного в байтах, для задання використовуються ключові слова: byte, word, dword, ford, gword, tbyte або ім’я структури для 1-, 2-, 4-, 8-, 10 – байтових даних та даних визначених користувачем. Якщо в якості зовсім іншого імені використовується ім’я, визначене в директиві equ, його тип – аbs;
кількість – задає кількість елементів даного типу, використовується, якщо в якості зовнішнього передається масив, дозволяє застосовувати в процедурі (функції) операції SIZE, LENGTN.
Таким чином, імена використаних, але не визначених даних повинні визначатися директивою estrn, а імена визначених даних, які можуть використовуватися іншими модулями, визначаються директивою public. Щоб забезпечити можливість однаково задавати дані в різних модулях, використовується директива global. Загальний вигляд директиви:
global визначення 1, визначення 2, ...
Визначення задаються так само, як для директиви extrn.
Щоб визначити функцію global, транслятор “дивиться” чи виділена пам’ять для даного в цьому модулі. Якщо виділена, директива еквівалентна директиві local, в противному випадку – estrn. Використання global дає можливість зробити загальним визначення для декількох модулів. Загальна частина може бути поміщена в файл, який підключається до модулів за допомогою директиви include.
Загальний вигляд директиви:
incude ім’я файла.
Для файла може бути задане його повне ім’я.
Зовнішня процедура (функція) може використовуватися іншими програмами, про які розробник заздалегідь може не знати, ця програма не повинна “псувати” зміст ресурсів загального користування.
З врахуванням вищевказаних вимог загальний вигляд зовнішньої процедури (функції) слідуючий:
MODEL ім’я
......................
CODE
ім’я проц. proc
public ім’я
; Збереження використаних регістрів
.......................
; реалізація алгоритма
; відновлення використаних регістрів
.......................
ret
ім’я endp
end
В процедурі, на відміну від головної програми, в директиві end адреса тачки входу не задається.
Загальний вигляд викликаючої програми:
MODEL ім’я
......................
extrn ім’я – проц. proc
......................
CODE
begin
...................
end begin
Директиви public та extrn в цих програмах можна замінити директивою global ім’я – проц: proc. Але все-таки рекомендується використовувати директиви public та extrn, так як вони дозволяють більш глибоко вивчити механізм зв’язку модулів. Саме ці директиви найбільш часто використовуються в програмах. Після впевненого використання цих директив, їх можна замінити директивою global.
Для створення програми з декількох модулів, виконується роздільна трансляція для кожного модуля (tasm ім’я – модуля 1, tasm ім’я – модуля 2, ...) і компоновка всіх модулів разом (tlink ім’я – модуля 1, ім’я модуля 2...) Для формування налагодженої інформації використовуються ті ж ключі, що і для одномодульних програм.