Страница 16 из 41
5.3.1 Установка/проверка накопителя по умолчанию. Программы могут экономить часть работы, назначая накопитель по умолчанию, на котором содержатся файлы данных. Если в начале программы запросить у пользователя какой накопитель он будет использовать, то впоследствии не будет сомнений к какому накопи- телю следует обращаться.
Высокий уровень. В приведенной программе на Бейсике текущий накопитель по умол- чанию переключается с помощью процедуры на машинном языке. Проце- дура имеет длину всего 7 байтов. Она помещается в строку X$, а переменная Z служит указателем на первый байт процедуры. В прило- жении Г объясняется как вставлять ассемблерные процедуры в прог- раммы на Бейсике. Номер накопителя устанавливается в строке 110, причем 0 = A, 1 = B и т.д. Если назначить накопителем по умолча- нию несуществующий накопитель, то ошибки не будет, поэтому будьте внимательны. Не пытайтесь объединить строки 120 и 130 этой проце- дуры, поскольку в этом случае интерпретатор Бейсика будет обраба- тывать их неправильно.
100 DEF SEG 'сегмент на начало области Бейсика 110 NUM = 0 'выбираем накопитель A 120 X$ = CHR$(180)+CHR$(14)+CHR$(178)+CHR$(NUM)+CHR$(205)+ CHR(33)+CHR$(223) 130 Y = VARPTR(X$) 'получаем дескриптор строки (адрес в Y+1) 140 Z = PEEK(Y+1)+PEEK(Y+2)*256 'вычисляем адрес строки 150 CALL Z 'выполняем машинную процедуру
Средний уровень. Функция EH прерывания 21H устанавливает накопитель по умолча- нию. Надо просто поместить номер накопителя (0 = A, 1 = B и т.д.) в DL и выполнить прерывание. Эта функция возвращает в AL число накопителей на машине. Отметим, что когда у машины имеется только один накопитель, то возвращается число 2. Лучший способ определе- ния числа накопителей у машины описан в [1.1.5].
MOV AH,0EH ;номер функции MOV DL,1 ;код для накопителя B INT 21H ;устанавливаем накопитель по умолчанию
Функция 19H прерывания 21H сообщает какой из накопителей яв- ляется накопителем по умолчанию. Для этой функции нет входных регистров. При возврате в AL содержится кодовый номер, где 0 = A, 1 = B и т.д.
|