- •Курсова робота з дисципліни «Інформатика»
- •«Використання підпрограм та функцій користувача при роботі з масивами.»
- •Завдання на курсову роботу з дисципліни «Інформатика»
- •І. Теоретична частина
- •1. Масиви
- •1.1. Опис типу
- •1.2. Дії над масивами
- •1.3. Дії над елементами масиву
- •2. Ідентифікатори
- •3. Підпрограми
- •4. Структура програми
- •5. Процедури і функції
- •5.1 Описи процедур
- •5.2 Описи функцій
- •6. Модулі
- •6.1 Модуль Crt
- •6.2 Модуль Strings
- •6.3 Модуль Graph
- •7. Оператори
- •7.1 Прості оператори
- •7.2 Оператор привласнення
- •7.3 Привласнення об'єктного типу
- •7.4 Оператори процедури
- •7.5 Оператори переходу
- •7.6 Структурні оператори
- •7.7 Складові оператори
- •7.8 Умовні оператори
- •7.8.1. Оператор умови (if)
- •7.8.2. Оператор варіанту (case)
- •7.9 Оператор циклу
- •7.9.1. Оператор циклу з післяумовою (repeat)
- •7.9.2. Оператори циклу з передумовою (while)
- •7.9.3. Оператори циклу з параметром (for)
- •7.10 Оператор with
- •Іі. Постановка задачі
- •Ііі. Алгоритм розв’язання задачі
- •IV. Програмні реалізації алгоритму
- •V. Результати виконання програми
- •Висновки
- •Список використаних джерел
2. Ідентифікатори
-----------------------------------------------------------------------------------------------------
Ідентифікатори виступають як імена констант, типів змінних, процедур, модулів, програм і полів в записах.
Ідентифікатор може мати будь-яку довжину, проте тільки перші його 63 символи є значущими. Ідентифікатор повинен починатися з букви і не може містити пропусків. Після першого символу ідентифікатора можна використовувати букви, цифри і символи підкреслення (значення ASCII $5F). Як і в зарезервованих словах, в ідентифікаторах можна використовувати як рядкові, так і прописні букви (компілятор їх не розрізняє).
Коли є декілька місць з вказівкою одного і того ж ідентифікатора, для завдання потрібного ідентифікатора необхідно уточнити цей ідентифікатор за допомогою ідентифікатора модуля. Наприклад, для уточнення ідентифікатора Ident за допомогою идентификатора модуля UnitName слід записати UnitNamt.Ident. Такий комбінований ідентифікатор називається уточненим ідентифікатором.
Вбудований асемблер дозволяє у виразах асемблера отримати доступ до всіх ідентифікаторів Паскаля, включаючи мітки, константи, типи, змінні, процедури і функції. Крім того, в вбудованому асемблері реалізовані наступні спеціальні ідентифікатори:
Code
Data
Result
Ідентифікатори Code і Data представляють поточні сегменти коду і даних відповідно. Їх слід використовувати тільки в поєднанні з операцією SEG:
asm
mov ах,SEG Data
mov ds,ax
end;
Ідентифікатор Result в операторній частині функції змінну-результат функції. Наприклад, у функції:
function Sum(X, У: Integer): Integer;
begin
Sum := X + У;
end;
в операторі, що привласнює результат функції змінної Sum, можна було б при записі на вбудованому асемблері використовувати змінну Result:
function Sum(X, У: Integer): Integer;
begin
asm
mov ах,X
add ах, У
mov Result,ax
end;
end;
У виразах вбудованого асемблера не можна використовувати наступні ідентифікатори:
- стандартні процедури і функції (наприклад, Writeln, Chr);
- спеціальні масиви Mem, MemW, MemL, Port, PortW;
- рядки, значення з плаваючою крапкою і константи множинного типу;
- мітки, які не описані в поточному блоці;
- ідентифікатор Result поза функцією.
Локальні змінні (змінні, описані в процедурах і функціях) завжди розподіляються в стеку і доступні відносно SS:BP, а значення ідентифікатора локальної змінної представляє собою її зсув із знаком від SS:BP. Асемблер автоматично додає [BP] до посилань на локальні змінні. Наприклад, з обліком описів:
procedure Test;
var
Count: Integer;
інструкції:
asm
mov ах,Count
end;
асемблюються в MOV АХ,[BP-2].
Вбудований асемблер завжди інтерпретує параметр-змінну, як 32 розрядний покажчик, а розмір параметра-змінної завжди рівний 4 (розміру 32 розрядного покажчика). В Паскалі синтаксис для доступу до параметра змінній і до значення параметра однаковий. У разі вбудованого асемблера це не так. Тому для доступу до вмісту параметра-змінної вам спочатку доведеться завантажити 32-розрядний покажчик, а потім звернутися до осередку, на яку він указує. Наприклад, якщо X і У - параметри-змінні приведеної вище функції Sum, то вона може виглядати наступною чином:
function Sum(var X, У: Integer): Integer;
begin
asm
les bx,X
mov ах,es:[bx]
les bx,Y
add ах,es:[bx]
mov Result,ax
end;
end;
Деякі ідентифікатори, такі, як змінні типу запис мають область дії, що дозволяє поводитися до них з допомогою операції вибору елементи структури-крапки (.). Наприклад, з обліком описів:
type
Point = record
X, У: Integer;
end;
Rect = record
А, B: Point;
end;
var
P: Point;
R: Rect;
для доступу до полів в змінних P і R можна використовувати наступны конструкції:
asm
mov ах,P.X
mov dx,P.Y
mov cx,R.A.X
mov bx,R.B.Y
end;
Для безпосередньої побудови змінної можна використовувати ідентифікатор типу. Кожна з приведених нижче інструкцій генерує один і той же машинний код, що завантажує в АХ ES:[DI+4]:
asm
mov ах,(Rect PTR es:[di]).B.X
mov ах,Rect(es:[di].B.X
mov ах,es:Rect[di].B.X
mov ах,Rect[es:di].B.X
mov ах,es:[di].Rect.B.X
end;
Область дії задається типів, полем і ідентифікатором перемінної типу запису або об'єктного типу. Крім того, идентификатора модуля відкриває область дії конкретного модуля (як повністю уточнень ідентифікатор в Паскалі).
