Информатика. Ассемблер для процессора i8086
.pdf91
Примером интерпретатора является интерпретатор команд ОС. Входные операторы (команды) этого лингвистического процессора представляют собой имена загрузочных модулей, подлежащих выполнению. Эти команды поступают на вход интерпретатора или с клавиатуры терминала, или от утилиты типа Norton commander, или из командного файла. Командный файл имеет расширение .bat и содержит программу, операторами которой являются команды ОС (основные операторы), а также вспомогательные операторы, позволяющие задавать порядок выполнения основных операторов, отличный от последовательного.
Выполнение (интерпретация) очередной команды ОС сводится к загрузке и инициированию требуемой утилиты, лингвистического процессора или прикладной программы. Интересно, что с точки зрения самой ОС интерпретатор ее команд (как и любой другой лингвистический процессор или утилита) представляет собой обычную прикладную программу. Так как интерпретатор команд ОС может обращаться к ней, как и прикладная программа, только с помощью инструкций INT.
Например, загрузочный модуль интерпретатора команд MS-DOS хранится на диске в виде файла Command.com. Если мы заменим содержимое этого файла, сохранив его имя, то MS-DOS будет работать с другим интерпретатором команд, “не заметив” этого.
10.4. Подпрограммы управления аппаратурой
Среди управляющих программ, оказывающих помощь прикладным программам в использовании ресурсов ВС, особо важное значение имеют программы управления аппаратурой, называемые драйверами. Каждый драйвер обслуживает однотипные периферийные или другие устройства. В ВС обязательно имеются драйвер экрана, драйвер клавиатуры, драйвер дисковода (для каждого типа дисководов свой драйвер) и некоторые другие драйверы.
Кроме драйверов реальных устройств многие ОС имеют драйверы виртуальных устройств. Например, в состав таких “устройств” могут входить некоторые области ОП и ВП. Поэтому встречаются: драйвер таблицы FAT, драйвер файловой структуры логического диска и т.п. При наличии обширной системы виртуальных устройств практически любая помощь прикладным программам в использовании ресурсов ВС оказывается драйверами. При этом драйверы виртуальных устройств обычно пользуются услугами других драйверов, управляющих виртуальными или реальными устройствами.
Драйверы некоторых реальных устройств входят в состав как ОС так и BIOS. Причем ОС может иметь несколько драйверов для устройств данного типа. Например в п. 8.4 были рассмотрены два примера программ (.com и
.exe), выполняющие вывод строки символов на экран путем обращения (INT
92
21h, функция 09h) к драйверу экрана, входящему в состав ОС. В следующем фрагменте программы вывод на экран этой же строки выполняется путем обращения (INT 21h, функция 40h) к другому драйверу MS-DOS, выполняющему работу с файлами. При этом экран считается стандартным файлом, имеющим дескриптор файла, равный 1. (Дескриптор файла – число, заменяющее имя файла в некоторых операциях над ним.)
|
. . . . . . . . . . . . . . . . . |
|
|
|
|
MOV |
CX, Msgl |
; CX Длина сообщения |
|
|
MOV |
DX, SEG Msg |
; DS:DX Адрес сообщения |
|
|
MOV |
DS, DX |
; |
--//-- |
|
MOV |
DX, OFFSET Msg ; |
|
--//-- |
|
MOV |
AH, 40h |
; 40h – функция записи в файл |
|
|
MOV |
BX, 1 |
; 1 – дескриптор файла (экрана) |
|
|
INT |
21h |
; Вывод строки на экран |
|
. . . . . . . . . . . . . . . . . . . |
|
|
||
Msg |
DB ‘Hello’, cr, lf |
; Сообщение |
|
|
Msgl |
EQU |
$-Msg |
; Длина сообщения |
|
. . . . . . . . . . . . . . . . . . . .
В следующем фрагменте программы вывод этой же строки символов на экран производится путем обращения (INT 10h, функция 0Eh) к драйверу BIOS, выполняющему работу с экраном. Так как данный драйвер выводит строку не целиком, а посимвольно, то в программе предусмотрен индексный
цикл. |
|
|
|
|
|
. . . . . . . . . . . . . . . . . |
|
|
|
|
MOV |
CX, Msgl |
; CX Длина сообщения |
|
|
MOV |
AH, 0Eh |
; 0Eh – функция вывода символа |
|
|
MOV |
BH, 0 |
; |
|
|
XOR |
SI, SI |
; SI 0 |
|
Next: |
MOV |
AL, Msg[SI] |
; Вывод следующего |
|
|
INT |
10h |
; |
символа |
|
INC |
SI |
|
|
|
LOOP |
Next |
; Повторить для след. символа |
|
. . . . . . . . . . . . . . . . . . . |
|
|
||
Msg |
DB ‘Hello’, cr, lf |
; |
Сообщение |
|
Msgl |
EQU |
$-Msg |
; Длина сообщения |
|
. . . . . . . . . . . . . . . . . . . .
Что касается внутренней структуры драйвера, то она представляет собой совокупность подпрограмм, связанных между собой не по управлению (подпрограммы драйвера не вызывают друг друга), а через общие структуры данных. Обычно одной из подпрограмм драйвера реального устройства является обработчик прерываний данного устройства. Другая подпрограмма (процедура) выполняет инициализацию (подготовку к работе) самого драйвера и устройства, выполняясь в начале работы системы. Остальные
93
процедуры обслуживают запросы прикладных и системных программ по работе с данным устройством.
Многие прикладные программы работают с ПУ, в особенности с экраном и клавиатурой, не с помощью системных драйверов, а напрямую, то есть, фактически, имеют свои собственные драйверы. Причиной этого, во-первых, является неэффективность системных драйверов (большое время выполнения), а во-вторых, желание учесть индивидуальные потребности прикладной программы по работе с конкретным устройством. К сожалению, программирование драйверов выходит за рамки данного вводного курса.
