и inportb возвращают прочитанное из
Пример 12
void outport(int port, int val); void outportb(int port, unsigned char val);
Аргумент этих функций port - номер порта ввода-вывода. Функции inport и inportb возвращают прочитанное из порта значение, а в функциях outport и outportb записываемое в порт значение задается аргументом val. Функции inportb и outportb работают с однобайтными, а inport и outport - с двухбайтными портами.
Программист должен точно знать, работает он с одно- или с двухбайтным портом. Применение функций inport, outport к однобайтным портам может привести к весьма неожиданным результатам. Так, например, оператор программы:
Пример 12
struct FIND { byte reserved[21]; byte attr; /* атрибут */ word ftime; /* время */ word fdate; /* дата */ dword fsize; /* размер */ char fname[13]; /* имя.расширение, ASCIIZ-строка */ };
Функция 0x4E ищет первое подходящее имя (параметры передаются только ей), все последующие обращения к 0x4F (без параметров) выдают следующие подходящие имена;
10.4.4. Функции работы с дисками
Следующие функции оперируют с логическими дисками.
0x1B | - информация о FAT текущего диска, на выходе DS:BX указывают на первый байт FAT, DX - число кластеров, AL - число секторов в кластере, CX - размер сектора; |
0x1C | - то же, но в DL задается логический номер требуемого диска; |
0x32 | - получить информацию о диске (диск задается в DL), на выходе DS:BX содержат адрес Блока Параметров Драйвера (DPB), который будет рассмотрен позже; |
0x36 | - получить информацию о дисковом пространстве (DL - номер диска), на выходе: AX - число секторов в кластере, BX - число доступных кластеров, CX - размер сектора, DX - общее число кластеров; |
0x19 | - получить номер текущего диска (в регистре AL); |
0x0E | - задать номер текущего диска (в регистре DL). |
10.4.5. Программные иллюстрации
Вместо того, чтобы приводить маленькие примеры, каждый из которых иллюстрирует применение какой-то одной функции, приведем "программное изделие" солидного размера, которое включает в себя почти все описанные нами функции метода дескрипторов - как ввода-вывода, так и работы с файлами и каталогами.
Пример 12
struct DFCB { word n_handles; /* число дескрипторов */ byte open_mode; /* режим открытия */ byte reserv1; byte attr; /* атрибуты файла */ word info; /* состояние устройства */ void *drv_ptr; /* адрес драйвера/DPB */ word First_clust; /* номер начального кластера */ word F_time, F_date; /* время и дата */ dword F_size; /* размер файла */ dword F_seek; /* текущее смещение в файле */ word lst_cl_n; /* относит.номер текущ.кластера */ word lst_clust; /* абс.номер текущ.кластера */ word dir_sect; /* номер сектора каталога */ byte dir_num; /* номер элемента в секторе */ char fname[11]; /* имя и расширение */ byte reserved2[6]; word owner; /* PID хозяина */ byte reserved4[2]; };
Для версии 4.x размер DFCB - 59 байт и формат следующий: