Открой свой мир программирования и    
цифровых технологий
Заключения и примеры
Автор lisa   
19.07.2011 г.

В последней главе, в которой мы рассмотрели видеослужбы ROM BIOS, у нас были все основания рекомендовать вам непосредственно использовать службы ROM BIOS в тех ситуациях, когда система DOS или выбранный вами язык программирования не обеспечивали поддержки нужных для вас функций. Однако в случае использования служб ROM BIOS для диска положение совсем другое.

Когда приходится иметь дело с операциями для диска, выполнение которых обычно необходимо при работе программы, то все функции по управлению и манипулированию вводом/выводом следует предоставить системе DOS и осуществлять их с помощью либо файловых служб, имеющихся в языке программирования, либо служб самой системы DOS (см. гл.14 — 18). На это имеется несколько причин. Главная причина состоит в том, что значительно проще предоставить возможность системе DOS сделать всю необходимую работу. Средства DOS примут на себя ответственность за выполнение всех основных операций с диском, включая форматирование и присвоение метки дискам, каталоги­зацию файлов, а также основные операции по чтению и записи. На практике в большинстве случаев нет необходимости углубляться в детали системного программного обеспечения. Однако возможно, что иногда вы захотите напрямую работать с данными на диске в более полном объеме, обычно это делается при обеспечении защиты от копирования. Именно тогда вам следует использовать службы ROM BIOS.

В нашем примере мы будем применять язык Си для вызова пары подпрограмм, использующих функции ROM BIOS 02H и ОЗН для чтения и записи конкретных секторов диска. Мы начнем с опре­деления того, как мы хотим, чтобы выглядел интерфейс при использовании языка Си. Это иллюстрирует следующая программа. Если вы не знакомы с языком Си и не хотите разбираться в данной программе, можете не обращать на нее внимание, а потратить все время на изучение примера интерфейса, представленного на языке ассемблера, который идет следом за данной программой.

Данный фрагмент на языке Си показывает, как можно вызывать службы чтения и записи ROM BIOS из языка высокого уровня. Функции ReadSectorO и WriteSectorO — две программы на языке ассемблера, использующие прерывание 13Н для обращения к службам ROM BIOS для диска. Параметры вам уже знакомы: С, Н и R являются номерами цилиндра, головки и сектора, которые мы описали ранее. Компилятор языка Си передает адрес буфера в виде адресов сегмента и смещения, так как тип передачи задан явно (char far).

Форма интерфейса на языке ассемблера будет вам понятна, если вы прочтете общие замечания в гл.8 или же изучите пример из гл.9. Данные ассемблеровские программы копируют параметры из стека в регистры. Хитрость заключается в том, как обрабатывается номер цилиндра: два старших байта 10-битового номера цилиндра объединены с 6-битовым номером сектора в CL.

Следует обратить внимание на то, как в подпрограмме DiskService реализован командный код, осуществляющий копирование параметров из стека в регистры. Когда вы будете работать со службами ROM BIOS для диска, вы обнаружите, как часто будут использоваться подпрограммы, похожие на DiskService. Это связано с тем, что для большинства служб ROM BIOS для диска приняты сходные назначения регистров под параметры.

 
« Пред.
Скачать книги по программированию