- •Історична довідка
- •Характеристика й особливості мови
- •Алфавіт мови
- •Службові (зарезервовані) слова.
- •Структура програми мови Turbo Pascal
- •Розділ оголошень і угод
- •Розділ текстів процедур і функцій
- •Розділ основного блоку програми
- •Процедури введення-виведення. Деякі вбудовані функції Турбо-Паскаля.
- •Функції числових параметрів.
- •Базові управляючі конструкції Турбо-Паскаля Оператори умовного переходу.
- •1. Оператор if.
- •2. Оператор вибору (case)
- •Оператори циклів у Паскалі
- •1. Цикл із післяумовою (Repeat)
- •2. Цикл із предумовою (While)
- •3. Цикл із лічильником або параметром (For)
- •Концепція типів даних. Типи даних в мові Pascal
- •Дійсні типи
- •Бульовий (логічний) тип
- •Символьні і рядкові змінні
- •1. Символьний тип
- •2. Рядковий тип
- •Перерахований та обмежений типи
- •1. Перерахований тип
- •2. Обмежений тип
- •1. Поняття масиву. Одномірні масиви
- •2. Багатомірні масиви
- •3. Сортування і пошук
- •Множинний тип
- •Тип запис
- •Процедури і функції
- •Формальні і фактичні параметри. Механізм параметрів
- •Параметри - значення
- •Параметри-змінні
- •Безтипові параметри
- •Приведення типів.
- •Процедурні типи
- •Рекурсія Рекурсивні визначення
- •Рекурсивні підпрограми
- •Алгоритми з поверненням. Розв’язок задачі про рух коня
- •Алгоритми з поверненням. Розв’язок задачі про вісьмох ферзів
- •If підходить тнеn
- •Модулі в Турбо Паскалі
- •Модуль crt
- •1. Керування екраном
- •2. Робота з клавіатурою
- •3. Інші можливості
- •Графіка в Турбо Паскалі
- •1. Включення і вимикання графічного режиму.
- •2. Побудова елементарних зображень
- •3. Виведення текстової інформації.
- •Файли в мові програмування Pascal
- •Установчі і завершальні операції
- •Операції введення-виведення
- •Обробка помилок введення-виведення
- •Переміщення по файлу
- •Спеціальні операції
- •Текстові файли
- •1. Оголошення файлової змінної і прив'язка до файлу на диску
- •2. Читання даних з файлу
- •3. Запис даних у файл
- •Двійкові файли
- •1. Типізовані файли
- •2. Нетипізовані файли
- •Статичні і динамічні змінні
- •Покажчики
- •Стан покажчика
- •Установка розмірів динамічної пам'яті
- •Сумісність і перетворення посилкових типів
- •Динамічні структури даних
- •Динамічні змінні: інші види списків, стек і черга.
- •1. Інші види списків
- •2. Стек і черга
- •Дерева і пошук у деревах
- •1. Визначення й описи структур даних
- •1. Масив
- •2. Список
- •3. Дерево
- •2. Алгоритми
- •1. Лінійний пошук у масиві
- •2. Двійковий пошук
- •3. Лінійний пошук у списку
- •Змішані таблиці
- •Об’єктно-орієнтоване програмування. Що таке об’єктно-орієнтоване програмування
- •Інкапсуляція
- •Спадкування
- •Віртуальні методи і поліморфізм
- •Конструктори, динамічні об'єкти і деструктори
- •Поля і методи: сховані і загальнодоступні
- •Системно- залежні розширення
- •Налагодження змінних
- •Оверлеї
- •Переривання і системні виклики
- •Доступ до пам'яті і портів
- •Перевизначення переривань
Доступ до пам'яті і портів
У мові Turbo Pascal реалізовані три визначених масиви, що позначаються наступними ідентифікаторами:
Mem
MemW
MemL
Ці масиви використовуються для прямого доступу до пам'яті, інтерпретуючи її як таку, що складається з елементів різного формату. Кожен елемент масиву Mem являє собою байт (має тип-byte), кожен елемент Mem -слово (тип word), а елемент масиву Mem - тип longint (подвійне слово).
Для доступу до елементів цих масивів використовується спеціальний синтаксис, аналогічний адресації в конструкції absolute: як індекс цих масивів указуються два вирази типу word, розділені символом ':' двокрапка). Значення цих виразів задають фізичну адреса елемента пам'яті. Приведемо кілька прикладів:
Mem[$0040:$0049] := 7;
Data :=Mem[Seg(V):Ofs(V)];
MemLong :=MemL[64:3*4];
Перший оператор зберігає значення 7 у байті з адресою$0040: $0049. Другий оператор поміщає значення довжиною слово, записане в перших двох байтах змінної v, у змінну Data. Третій оператор поміщає значення типу longint, записане за адресою $0040:$OOOC, у змінну МемLоng.
Звертання до оперативної пам'яті по фізичних адресах використовується, як правило, у тих випадках, коли необхідне максимально ефективне (без звертань до переривань) коректування системної інформації MS-DOS.
Для доступу до портів введення-виведення центрального процесора Intel 80x86 у мові Turbo Pascal реалізовані два визначених масиви, що позначаються ідентифікаторами
Port
PortW
Обидва масиви є одномірними і кожним їхнім елементом є якийсь порт введення-виведення; індекс масиву відповідає адресі порту. Як індекс допускється вираз типу word. Елементи масиву Port мають тип byte, елементи масиву PortW- тип word.
Коли елементу масиву Port чи РоrtW присвоюється значення, ця дія інтерпретується як виведення значення в обраний порт. Коли елементи масиву Port чи PortW виступають як операнди у виразах, то доступ до порту розуміється як введення з обраного порту. Приведемо кілька прикладів:
Port[$20,]:=$20;
Port[Base] := Port[Base] xor Mask;
while Port[$B2] and $80= 0 do; { чекання}
Використання масивів Port і PortW обмежено тільки в тім відношенні, що елементи цих масивів не можуть використовуватися в якості параметрів-змінних. Більш, того, посилання на весь масив Port чи PortW (без вказівки індексів) не допускаються.
Приведемо приклад доступу до порту клавіатури (номер порту $60 чи $64) для керування швидкістю руху курсору (маються на увазі дві характеристики -частота переміщення курсору на екрані при довготривалому натисканні клавіші керування курсором і початкова затримка, переміщення після натискання цих клавіш). Пояснення містяться в програмі у виді коментарів; програма складена на основі рекомендацій електронного довідника PC-Help. Коди режимів визначаються значенням змінної Mode.
program RepeatMode; {Установка режимів руху курсора}
uses
Crt;
var
Mode : byte, { Значення, що розташовується в порт $60 ($64) і містить коди режимів:
}
begin
{ Mode:=$7F,- } {усе саме повільне}
Mode:=$00; { усе найшвидше }
Port[$60]:=$F3; { Посилаємо в порт команду }
Delay(10); { Затримку велить робити PC Help}
Port[$60]:=Mode { Посилаємо в порт значення Mode}
end.