Найти

Организация ЭВМ и систем

Лабораторная работа № 7 (b)
Программирование периферийного устройства
Выполнил: Моисеев Игорь Владимирович, специальность 2204, 2 курс, группа 2 (заочники), 22.05.2004
Вариант 6

Цель: создать программу чтение сектора с НГМД

Большинство дисковых операций можно выполнить на уровне BIOS. Это самый простой и надежный способ работы с диском на физическом уровне. Однако в отдельных случаях вам может потребоваться непосредственный доступ к контроллеру (например, если вы разрабатываете систему защиты данных от несанкционированного копирования).

Таблица 1 - Формат дорожки диска
FF  
00 Прединдексный синхронизирующий промежуток
IAM Индексная адресная метка
  Промежуток
  Сектор 1
  Промежуток
  Сектор 2
  Промежуток
...  
  Промежуток
  Сектор N
  Промежуток
  Конечный промежуток

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

 

Таблица 2 - Формат сектора
IDAM Адресная метка индекса
  Номер дорожки
  Номер головки
  Номер сектора
  Код длины сектора
  2 байта циклического контроля
FF  
00 Промежуток
  Адресная метка данных
  Адресна
  2 байта циклического контроля

Функции BIOS для работы с дисками.

Наилучший и самый безопасный способ работы с дисками на физическом уровне - использование функций базовой системы ввода/вывода BIOS. Эти функции учитывают все особенности аппаратуры и предоставляют достаточно широкий набор средств доступа к дискам на физическом уровне.

Вся дисковая подсистема обслуживается прерыванием INT 13h. Это прерывание выполняет множество функций. Для вызова определенной функции программа должна занести ее код в регистр AH. При этом в другие регистры следует записать параметры - номер НМД или номер НГМД, номер цилиндра, головки, адрес таблицы параметров НМД или НГМД и т.д.

Таблица 3 - Краткая таблица функций прерывания INT 13h
Номер функции Описание
00h Сброс дисковой системы
01h Определение состояния дисковой системы
02h Чтение сектора
03h Запись сектора
04h Проверка сектора
05h Форматирование дорожки
06h Форматирование дорожки НМД
07h Форматирование НМД
08h Получить текущие параметры НГМД или НМД
09h Инициализация таблиц параметров НМД
0Ah Чтение длинное (только для НМД)
0Bh Запись длинная (только для НМД)
0Ch Поиск цилиндра (только для НМД)
0Dh Альтернативный сброс НМД
0Eh Чтение буфера сектора (только для НМД)
0Fh Запись буфера сектора (только для НМД)
10h Проверка готовности НМД
11h Рекалибровка НМД
12h Проверка памяти контроллера НМД
13h Проверка НМД
14h Проверка контроллера НМД
15h Получить тип НМД или НГМД
16h Проверка замены дискеты
17h Установка типа дискеты
18h Установка среды носителя данных для форматирования
19h Парковка головок (только для НМД)
1Ah Форматирование НМД с интерфейсом ESDI

С помощью функций BIOS можно выполнить низкоуровневое форматирование диска, как стандартное, так и использующее нестандартный формат дорожки. В любом случае при записи информации в секторы следует внимательно анализировать работу программы - ошибки могут привести к разрушению логической структуры. В результате этого могут появиться потерянные каталоги и файлы. Все опасные эксперименты лучше проводить на дискетах, и только когда вы уверены безошибочной работе программы, можно "допустить" ее к жесткому диску.

Ниже приведена программа, осуществляющая чтение сектора с НГМД

{programm made by Moiseev Igor,2204,2 kurs, ZAO}

uses crt;
var
   num_sect,track,sector,head,sector_read,drive:byte;
begin
   clrscr;
writeln ('number to sectors of read');{ввести количество секторов для чтения}
   readln (num_sect);
   writeln ('sector of floppy disk');{ввести номер сектора для чтения}
   readln (sector);
   writeln ('head of floppy disk'); {номер головки для чтения}
   readln (head);
   asm
     mov ah,02 {загружаем в верхнюю часть регистра AX номер функции прерывания}
     mov al,num_sect {загружаем в нижнюю часть регистра AX количество
	 секторов для считывания}
     mov cl,sector {загружаем в регистр cl номер сектора от 1 до 63}
     mov dh,head {загружаем в регистр dh номер головки}
     mov dl,00 {загружаем в регистр dl номер устройства от 00-7FH}
     int 13h {вызываем прерывание BIOS 13h}
     mov sector_read,al {загружаем в переменную sector_read количество
	 прочитанных секторов из регистра al}
   end;
   write ('read ',sector_read,' sector');
   readln;
end.

Вывод: в результате выполнения лабораторной работы обрели навыки программирования периферийного устройства – накопителя на гибких магнитных дисках. Была создана программа, осуществляющая чтение сектора с НГМД. Поставленная задача была решена с помощью функции 02h прерывания BIOS 13h. В начале работы приведены основные сведения о функциях прерывания 13h по работе с диском, кроме того введены общие понятия о секторе.

Рейтинг SIMPLETOP.NET
Rambler's Top100 Powered byCeleron©
Бесплатный хостинг от EOMY.NET