org 100h
mov ah,02h
mov al,1 ;сколько секторов читать
mov ch,0
mov cl,0bh ;какой сектор читать
mov dh,0
mov dl,00h
mov bx,buffer
int 13h
mov ah,3dh
mov al,2
mov dx,name
int 21h
mov [handle],ax
mov ah,40h
mov bx,[handle]
mov cx,512
mov dx,buffer
int 21h
mov ah,3eh
mov bx,[handle]
int 21h
int 20h
name db 'sector.txt',0
handle dw 0
buffer:
times 512 db 0
Работа с FAT 16/32
Прочитал спецификацию файловой системы http://wasm.ru/doclist.php?list=11.
Решил посмотреть, что куда пишется на практике: отформатировал дискету, кинул один txt файл, наваял программку для чтения нужного сектора.
- сектор 1, сторона 0, цилиндр 0:
тут все, как написано в спецификации...
- сектор 2,3,4,5 , сторона 0, цилиндр 0:
пусто...
Вопрос: а где можно найти корневую директорию (сектор/сторона :)/цилиндр )?
т.к. хочется посмотреть, как записан файл в директории и все такое... а то с одной теории писать программу для работы с FAT тяжело будет...
ЗЫ сегодня посмотрел дискету через DiskEdit. Файл есть :) и он в 19 секторе, но как это определить(точнее, где посмотреть) - не знаю (
Во-вторых: В FAT корневой каталог идет сразу за самой таблицей.
Тоесть если у тебя резервированных секторов 1 (только загрузочный) и sizeof(FAT) = 9 секторов, то корневой каталог начнется в 11 секторе C0/H0/S11
Цитата:
Тоесть если у тебя резервированных секторов 1 (только загрузочный) и sizeof(FAT) = 9 секторов, то корневой каталог начнется в 11 секторе C0/H0/S11
посмотрел... пусто... только в самом начале F0FF FFFF
код проги, которой смотрел:
Код:
Корневой каталог размещается не там, т.к. обычно есть 2 копии FAT-а
Т.е. 1+9+9=19
Смотреть 19-й сектор (опять-таки с нуля начиная).
Кроме того есть прога WinHex, которая сама высчитывает смещения каталогов, фатов и прочего (в том числе файлов и кластеров)
Ей можно смотреть содержимое диска, редактировать, сохранять в файл, ...
Серийник к ней спрашивать в ICQ 237-713-103
[CОDE]
По теме:
Для начала узнай сколько зарезервированных секторов, и какой размер таблицы.
А еще забыл сказать, про кол-во таблиц. По умолчанию их 2. Тоесть в данном случае, сектор с началом корневого каталога будет 20й.
Считываешь 1 сектор, размер таблицы находиться по смещению 016h (значение в секторах), кол-во таблиц - 010h, зарезервированных секторов - 0Eh
Ну во-первых пользуйся bb-кодом
По теме:
Для начала узнай сколько зарезервированных секторов, и какой размер таблицы.
А еще забыл сказать, про кол-во таблиц. По умолчанию их 2. Тоесть в данном случае, сектор с началом корневого каталога будет 20й.
Считываешь 1 сектор, размер таблицы находиться по смещению 016h (значение в секторах), кол-во таблиц - 010h, зарезервированных секторов - 0Eh
корневой каталог был найден Hex Workshop'ом в 19 секторе, а текстовый файл (его содержимое) в 33 секторе, как и написано в каталоге :)
теперь проблема номер 2: какой сектор/цилиндр нужно считать, чтобы это было равносильно 33 сектору? (2 цилиндр 1 сектор не подошел)
Сейчас начал разбираться, как преобразоввывать LBA в CHS, но думаю, вы мне ответите быстрее, чем я разберусь :)
Цитата:
Прочитал спецификацию файловой системы...
Вопрос: а где можно найти корневую директорию (сектор/сторона /цилиндр )?
т.к. хочется посмотреть, как записан файл в директории и все такое... а то с одной теории писать программу для работы с FAT тяжело будет...
ЗЫ сегодня посмотрел дискету через DiskEdit. Файл есть и он в 19 секторе, но как это определить(точнее, где посмотреть) - не знаю (
Вопрос: а где можно найти корневую директорию (сектор/сторона /цилиндр )?
т.к. хочется посмотреть, как записан файл в директории и все такое... а то с одной теории писать программу для работы с FAT тяжело будет...
ЗЫ сегодня посмотрел дискету через DiskEdit. Файл есть и он в 19 секторе, но как это определить(точнее, где посмотреть) - не знаю (
Хреново ты однако читал спецификацию...
Цитата:
Во-вторых: В FAT корневой каталог идет сразу за самой таблицей.
Тоесть если у тебя резервированных секторов 1 (только загрузочный) и sizeof(FAT) = 9 секторов, то корневой каталог начнется в 11 секторе C0/H0/S11
Тоесть если у тебя резервированных секторов 1 (только загрузочный) и sizeof(FAT) = 9 секторов, то корневой каталог начнется в 11 секторе C0/H0/S11
HexEdit, а как же вторая копия FAT, которая практически всегда присутствует на дискете? Да и потом дискеты с разметкой 18/80/2 - это не единственно возможный вариант, на других типах дискет корневой каталог может находиться в другом месте (не в секторах 19-32 при нумерации с нуля)... Вся эта информация должна находиться в бутсекторе отформатированной дискеты! С FAT32 немного другая история...
Да уже исправился... и написал... см.выше