Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Паскал.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
1.21 Mб
Скачать

Доступ до пам'яті і портів

У мові 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.