1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Люди, помогите!!!!!! Препод заставляет прочитать корневой каталог дискеты, на след. неделе зачет, не наю че делать! Киньте пример кода под DOS, язык Turbo Pascal. Говорят, что нужно использовать прерывания 13h.
Ozzя, наверное, я в этом не разбираюсь, спасибо тебе большое но там ничего не понятно, ты не мог бы, лично написать кусочек программы? Мне вот друг набросал:
uses dos,crt; type boot=record jump:array[1..3]of byte; oemname:array[1..8]of char; sectsize:word; clustsize:byte; recsecs:word; fatcnt:byte; rootsiz:word; totsecs:word; media:byte; fatsize:word; trksecs:word; headcnt:word; hidnsec:word; musor:array[1..482]of byte; end; var regs:registers; s:boot;i:integer; begin clrscr; writeln('razmer zapisi:',sizeof(boot)); with regs do begin regs.ah:=$02; regs.dl:=$0; regs.ch:=0; regs.cl:=1; regs.al:=1; regs.dh:=0; regs.es:=seg(s); regs.bx:=ofs(s); intr($13,regs);
with s do begin for i:=1 to 3 do write(jump[i]:3); writeln; writeln('‚ҐабЁп Їа®Ё§ў®¤ЁвҐ«п Ё ®¬Ґа ўҐабЁЁ :',oemname);
Используется ф-ция чтения сектора 02H прерывания 13h (BIOS) формат вызова команды
Цитата
На входе: AH = 02h AL = Количество секторов, которые нужно прочитать CH = Номер дорожки CL = Номер сектора DH = Номер головки DL = Адрес дисковода (0, 1, ...,80h, 81h, ...) ES:BX = Адрес буфера для данных На выходе: AH = Состояние дисковода после завершения последней операции CF = 1, если произошла ошибка, 0, если ошибки нет
А в запись s закидывается вся информация о дискете.
Корневой каталог находится сразу за последней копией FAT. Количество секторов, занимаемых одной копией FAT, находится в блоке параметров BIOS в BOOT-секторе в поле fatsize, количество копий FAT - в поле fatcnt блока BPB. Следовательно, перед корневым каталогом находится один BOOT-сектор и (fatcnt_*_fatsize) секторов таблицы размещения файлов FAT.
Размер корневого каталога можно определить исходя из значения поля rootsize. В этом поле при форматировании диска записывается максимальное количество файлов и каталогов, которые могут находиться в корневом каталоге. Для каждого элемента в каталоге отводится 32 байта, поэтому корневой каталог имеет длину (32_*_rootsize) байтов.
Корневой каталог занимает непрерывную область фиксированного размера. Размер корневого каталога задается при форматировании и определяет максимальное количество файлов и каталогов, которые могут быть описаны в корневом каталоге. Для определения количества секторов, занимаемых корневым каталогом, можно воспользоваться следующей формулой:
RootSecs = sectsize_/_(32_*_rootsize)
В этой формуле sectsize - размер сектора в байтах, он может быть получен из соответствующего поля BOOT-сектора.
Только сейчас осознал, что мои ответы в точь-точь как из анекдота про программистов на воздушном шаре. Совершенно правильные, но абсолютно бесполезные. Для вопрошающей.