Страница 18 из 27
7.2.2 Создание стратегии устройства. Процедура стратегии устройства требует только пяти строк. Когда система загружает устройство, то она создает блок данных, называемый заголовком запроса. Он имеет две функции. Во-первых он служит областью данных для внутренних операций системы. Более важно то, что заголовок запроса служит областью, через которую
происходит обмен информацией между драйвером и вызывающей его программой. Например, когда драйвер выводит данные, то ему дается адрес данных через заголовок запроса. Когда же драйвер завершает свою работу, то он устанавливает в заголовке запроса байт стату- са, который доступен вызывающей программе, тем самым давая воз- можность ей узнать об ошибке. MS DOS создает заголовок запроса при установке драйвера уст- ройства (когда система загружается). Процедура стратегии уст- ройства выполняется только один раз в этот момент. При этом ES:BX указывают на вновь созданный заголовок запроса и процедуре нужно просто скопировать их, чтобы впоследствии он мог быть обнаружен при обращении к драйверу. Адреса смещения и сегмента заголовка помещаются в две переменные. В следующем разделе Вы увидите, что при обращении к драйверу, первое что он делает - восстанавливает значения ES:BX, чтобы можно было получить информацию из заголовка запроса. Размер заголовка запроса может меняться, в зависимости от типа сделанного запроса к драйверу (напр. инициализация, вывод данных или возврат статуса). Однако первые 13 байт заголовка всегда одни и те же. Их формат таков:
1. Длина заголовка запроса (DB). 2. Код устройства (DB). Определяет номер для блочных устройств. 3. Код команды (DB). Здесь хранится номер последней посланной драйверу команды. Эти коды перечислены в [7.2.3]. 4. Статус (DW). Статус устанавливается каждый раз при вызове драйвера. Если установлен бит 15, то в младших восьми битах нахо- дится код ошибки. Коды ошибок перечислены в [7.2.3]. 5. Резервная область (8 байтов). Используется MS DOS. 6. Данные необходимые для работы драйвера (переменной длины).
Низкий уровень. Вот 5 строк процедуры стратегии устройства. Отмечаем, что две словные переменные, хранящие значения ES и BX, следуют за инст- рукцией RET, как и положено в формате COM.
DEV_STRATEGY: MOV CS:KEEP_ES,ES MOV CS:KEEP_BX,BX RET KEEP_CS DW ? KEEP_BX DW ?
|