В ОС MS-DOS имеются специальные адреса памяти, которые используются системой и с помощью которых можно выполнять, например, операции по обслуживанию периферийных устройств. Эти адреса расположены в сегменте, для доступа к которому используется константа Seg0040.
Таблица 1. Некоторые специальные адреса MS-DOS
смещение
| размер
| Назначение
|
$0010
| word
| список оборудования
|
$0017
| word
| статус клавиатуры
|
$0019
| word
| альтернативный ввод с клавиатуры
|
$001A
| word
| вершина буфера клавиатуры
|
$001C
| word
| нижняя часть буфера клавиатуры
|
$001Е
| 16*word
| буфер клавиатуры - кольцевой список
|
В таблице 2 приведено описание байта состояния клавиатуры (адрес $0040:$0017). Установка каждого бита в этом байте соответствует наступлению определенного события.
Таблица 2. Байт состояния клавиатуры
Бит
| событие
|
| нажата правая клавиша Shift
|
| нажата левая клавиша Shift
|
| нажата клавиша Ctrl
|
| нажата клавиша Alt
|
| нажата клавиша ScrollLock
|
| нажата клавиша NumLock
|
| нажата клавиша CapsLock
|
| нажата клавиша Insert
|
Шестнадцатеричная константа $DF, в двоичной записи имеющая вид 1101 1111, играет роль маски. Побитовое выполнение логической операции and над этой константой и байтом состояния клавиатуры устанавливает значение 5-го бита (‘режим NumLock включен’) в 0, т.е. отключает его.
Переменная Absolute
В языке Паскаль имеется возможность размещать переменные по конкретным адресам оперативной памяти. Такие переменные называются абсолютными и обычно используются в системных программах. Для описания абсолютных переменных предназначено зарезервированное слово Absolute. Формат:
Var <идентификатор> : <тип> Absolute BA:BS;
где BA – базовый адрес сегмента, BS смещение внутри этого сегмента. Например,
Var root : integer Absolute $0000:$01F0;
BA:BS может заменяться на идентификатор другой переменной, тогда вместо BA:BS будет подставлен ее адрес. Таким способом можно выполнять ‘наложение’ переменных.
Пример. Программа образует строку букв алфавита путем ее увеличения в цикле на одну букву, начиная с латинской буквы ‘a’.