Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Особенности программирования




Порядок выполнения

4.1. С помощью функции 2 прерывания 13h прочитать в память со-

держимое первого сектора таблицы размещения файлов (адрес FAT был

определен в лаб. раб. "Структура дисков").

4.2. Проверить правильность выполненной операции.

4.3. Используя номера начальных кластеров файлов, полученных в

лаб. раб. "Структура корневого каталога", по таблице размещения

файлов построить полные цепочки кластеров для этих файлов.

5.1. На языке Турбо-Паскаль.

5.1.1. При использовании программного прерывания необходимо:

- подключить модуль Dos, в котором описаны процедура Intr и

тип переменной Registers;

- объявить переменную этого типа, например, reg:Registers; -

к регистрам микропроцессора обращаться, как reg.ah, reg.al и т.д.;

- процедуру прерывания 13H вызывать следующим образом:

Intr($13,reg).

5.1.2. Область памяти, куда считывается содержимое сектора,

удобно объявить как массив байтов:

var

fat:array[0..511] of byte;

Необходимые значения сегмента и смещения адреса области памя-

ти можно задать, используя функции Seg и Ofs:

reg.es:=Seg(sect);

reg.bx:=Ofs(sect);

5.1.3. Определение номера следующего кластера с учетом приве-

денного в п. 3.3 алгоритма можно реализовать с помощью функции:

function n_clast(w:word):word;

var i:word;

begin

i:=w*3 div 2;

if (w mod 2)=0 then

n_clast:=((fat[i+1])*256+(fat[i]) and $0fff

else

n_clast:= ((fat[i+1]*256+fat[i]) shr 4

end;

5.2. На языке Турбо-Си.

5.2.1.При использовании программного прерывания необходимо:

- подключить библиотеку Dos, в котором описаны процедура Int86x и

тип смеси REGS директивой:

#include <dos.h>

- объявить переменные смеси:

union REGS in,out,sr;

- к регистрам микропроцессора обращаться, как in.h.ah, in.x.ax;

- к сегментным регистрам обращаться, как sr.es;

- процедуру прерывания 13H вызывать следующим образом:

Int86x(0x13,&in,&out,&sr).

5.2.2. Область памяти, куда считывается содержимое сектора,

удобно объявить как массив байтов:

unsigned char buf[512];

Тогда необходимые значения сегмента и смещения адреса области

памяти можно задать, используя функции FP_SEG() и FP_OFF():

sr.es=FP_SEG(buf);

in.x.bx=FP_OFF(buf);

5.2.3. Определение номера следующего кластера с учетом приве-

денного в п. 3.3 алгоритма можно реализовать с помощью фрагмента

программы:

nom_kl=2;

while(nom_kl<0xff8) /*цикл чтение кластеров из FAT*/

{

printf("\nкластер= %d ",nom_kl);

rn=nom_kl; /*копирование номера кластера*/

rn=rn>>1; /*сдвиг вправо или деление на 2 */

beg=nom_kl+rn; /*смещение в FAT 1.5n*/

rn=rn<<1; /*сдвиг влево или умножение на 2 */

b[0]=buf[beg]; /*чтение 1 байта FAT*/

b[1]=buf[++beg]; /*чтение 2 байта FAT*/

if(nom_kl==rn)/*номер кластеро четное*/

{

b[1]=b[1]&0x0f; /*выделение младших 12 бит*/

bb=(unsigned int *)b;/*преврашение 2-х байт в int */

nom_kl=*bb;

}

else

{

b[0]=b[0]&0xf0; /*выделение старших 12 бит*/

bb=(unsigned int *)b;/*преврашение 2-х байт в int */

nom_kl=*bb;

nom_kl=nom_kl>>4;

}




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 269; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.