Процедура одержання номеру кластеру з FAT залежить від формату таблиці розміщення файлів.
Виконувати операції з елементами таблиць типів FAT16 і FAT32 дуже легко, оскільки ці таблиці являють собою масиви 16-розрядних і 32-розрядних слів відповідно. Працювати з елементами FAT12 менш зручно, тому що для доступу до елементу масиву приходиться виконувати ряд допоміжних дій:
помножити номер початкового кластера на 3;
розділити результат на 2 (тому що кожен елемент таблиці має довжину 1,5 байта);
прочитати 16-бітове слово з FAT , використовуючи як зсув значення, отриманий після ділення на 2;
якщо номер початкового кластера парний, на обране з FAT слово треба накласти маску 0FFFh, залишивши молодші 12 біт, якщо ж номер початкового кластера непарний, обране з FAT значення необхідно зсунути вправо на 4 біти, залишивши старші 12 біт;
отриманий результат - це номер наступного кластера в ланцюжку, при цьому значення 0FFFh (чи інше в діапазоні від 0FF8h до 0FFFh) відповідає кінцю ланцюжка кластерів.
При записі елементу в FAT12 порядок дій такий:
помножити номер елемента на 3;
розділити результат на 2;
витягти з FAT 16-розрядне слово, використовуючи як адресу результат попередньої операції (адресу слова запам'ятати);
якщо номер елементу парний, виконати операцію AND над отриманим словом і маскою 0F000h, а потім операцію OR над отриманим результатом і значенням записуваного елементу. Якщо номер непарний, виконати операцію AND над ліченим словом і маскою 0F000h, а потім здвинути значення елементу вліво на 4 розряди і виконати OR з результатом попередньої операції;
записати отримане 16-розрядне слово знову у FAT. У програмах, написаних на ассемблері, для виконання множення на 3 замість команди MUL часто застосовується алгоритм «здвигу і додавання»: вихідне число копіюється, над копією числа виконується зсув вліво на один розряд (множення на 2), а потім ці числа складаються (х + 2х = 3х). Замість команди DIV при діленні на 2 використовується зсув вправо на один розряд. Елемент FAT містить номер кластеру, але при роботі з дисками на «низькому рівні» адресуємою одиницею даних є сектор, а не кластер.
Номер початкового сектору кластеру SectorNum зв'язаний з номером кластеру ClusterNum наступною формулою:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.