В ОС 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’.