IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Чтение корневого каталога дискеты, ПОМОГИТЕ!!!
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Женский
Реальное имя: Леночка

Репутация: -  0  +


mega_chok.gif Люди, помогите!!!!!! Препод заставляет прочитать корневой каталог дискеты,
на след. неделе зачет, не наю че делать! Киньте пример кода под DOS, язык Turbo Pascal.
Говорят, что нужно использовать прерывания 13h.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


http://www.sources.ru/pascal/disks/dsktools.htm
Не 2FH?
13-е это БИОС, насколько я помню.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Женский
Реальное имя: Леночка

Репутация: -  0  +


Ozzя, наверное, я в этом не разбираюсь, спасибо тебе большое yes2.gif wub.gif но там ничего не понятно, ты не мог бы, лично написать кусочек программы?
Мне вот друг набросал:

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);

writeln;
writeln('а §¬Ґа ᥪв®а : ',sectsize);
writeln('а §¬Ґа Є« бвҐа®ў :',clustsize);
writeln('зЁб«® § аҐ§ҐаўЁа®ў ­­ле ᥪв®а®ў :',recsecs);
writeln('fatcnt :',fatcnt);
writeln('rootsiz :',rootsiz);
writeln('Ї®«­®Ґ зЁб«® ᥪв®а®ў :',totsecs);
writeln('media :',media);
writeln('ᥪв®а®ў ў Fat,e :',fatsize);
writeln('ᥪв®а®ў ­  ¤®а®¦Єг :',trksecs);
writeln('зЁб«® Ј®«®ў®Є :',headcnt);
writeln('зЁб«® бЄалвл ᥪв®а®ў :',hidnsec);
end;
end;
readln;
end.

--------------------------------------------
где тут, что я не понимаю...

Сообщение отредактировано: =MaZaTRaKer= -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Используется ф-ция чтения сектора 02H прерывания 13h (BIOS)
формат вызова команды
Цитата
На входе: AH = 02h
AL = Количество секторов, которые нужно прочитать
CH = Номер дорожки
CL = Номер сектора
DH = Номер головки
DL = Адрес дисковода (0, 1, ...,80h, 81h, ...)
ES:BX = Адрес буфера для данных
На выходе: AH = Состояние дисковода после завершения последней операции
CF = 1, если произошла ошибка,
0, если ошибки нет


А в запись s закидывается вся информация о дискете.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 6
Пол: Женский
Реальное имя: Леночка

Репутация: -  0  +


blink.gif вау, спасибо, что так доходчиво объяснил! good.gif А ты не знаешь, где находится корневой каталог дискеты?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
Корневой каталог находится сразу за последней копией FAT. Количество секторов, занимаемых одной копией FAT, находится в блоке параметров BIOS в BOOT-секторе в поле fatsize, количество копий FAT - в поле fatcnt блока BPB. Следовательно, перед корневым каталогом находится один BOOT-сектор и (fatcnt_*_fatsize) секторов таблицы размещения файлов FAT.

Размер корневого каталога можно определить исходя из значения поля rootsize. В этом поле при форматировании диска записывается максимальное количество файлов и каталогов, которые могут находиться в корневом каталоге. Для каждого элемента в каталоге отводится 32 байта, поэтому корневой каталог имеет длину (32_*_rootsize) байтов.

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

RootSecs = sectsize_/_(32_*_rootsize)

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

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Только сейчас осознал, что мои ответы в точь-точь как из анекдота про программистов на воздушном шаре. give_rose.gif Совершенно правильные, но абсолютно бесполезные. unsure.gif Для вопрошающей. wub.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.10.2020 15:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name