КАТЕГОРИИ: Архитектура-(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; Просмотров: 289; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |