Реферат Курсовая Конспект
Проектирование подпрограмм для функций прерывания 13h расширенного (13h-ext). - раздел Информатика, Лекция 10 Проектирование программ тестирования накопителей на жестких магнитных дисках (НЖМД) Функция 41H.. Procedure 41H {Входные Параметры:}...
|
Функция 41h..
Procedure 41h
{входные параметры:}
ah=41h {в регистр ah устанавливаем номер функции}
bx=55AAh {в bx загружаем константу}
dl=80h {выбираем диск С:}
intr($13, r) {запуск 13h-ext, r: registers }
{Проверка наличия 13h-ext }
if (bx=$AA55) and (r.flags and 1)=0) then writeln(‘int 13h-ext OK!’)
else writeln(‘ERROR!’)
{Определение характеристик НЖМД выполняется функцией 48h}
dl=$48
{Структурные элементы для адресации объема 13h (секторов)}
{Структура информационной части 48h}
drv_info=record
info_size : word
flags : word
cilindr=array[1..2] of word {количество цилиндров}
sector=array[1..4] of word {количество секторов (абсолютное)}
rasm_sect : word {размер сектора}
end
info_size =26
ds=seg(drv_info) {выделение сегмента для drv_info }
si=ofs(drv_info) {определение смещения в сегменте для drv_info }
{запуск прерывания 13h }
intr($13,r)
{проверка выполнения функции 48h }
if (r.flags and 1)=0 then writeln(‘int 48h OK!’)
else writeln(‘ERROR!’)
Получение характеристик:
Количество цилиндров = поле цилиндров – младшее поле + старшее поле * 65536;
Количество головок и секторов на трек рассчитывается аналогично;
Размер диска = колич.секторов * размер сектора (512);
Структура для формирования адреса сектора.
disk_addr=record
rasm_box : byte {размер пакета}
reserve : byte {резерв}
schet : word {блок счетчика}
segm_buf : word {сегмент буфера адреса}
ofs_buf : word {смещение буфера адреса}
nom_sect : array[1..4] of word {номер сектора}
end.
Функция 44h..
{заполняем поля таблицы disk_addr }
rasm_box=16;
reserve=0;
schet=0;
{формирование номера сектора}
nom_sect[1] mod (64K)
nom_sect[2] div
…
{Запуск функции 44h}
ah=44h
dl=80h
ds=seg(disk_addr)
si=ofs(disk_addr)
intr($13,r)
{проверка выполнения функции 44h }
if (r.flags and 1)=0 then writeln(‘int 44h OK!’)
else writeln(‘ERROR!’)
Использование функций записи / чтения со сравнением
Функция 42h..
С помощью функции 42h содержимое сектора переписывается в буфер:
ah=42h
dl=80h
info_size=26
ds=seg(disk_addr)
si=ofs(disk_addr)
intr($13,r)
{проверка выполнения функции 42h }
if (r.flags and 1)=0 then writeln(‘int 42h OK!’)
else writeln(‘ERROR!’)
Функция 43h.
Выполнение функция 43h относительно 42h отличается только формированием регистра ah:
ah=43h
Остальное аналогично.
Процедура определения числа тактов.
Сформируем процедуру определения числа тактов потраченных МП на выполнение конкретных действий:
asm
db 66h ; 32-битный режим
xor cx,cx
mov cl,10h
db 0F, 32h ; или 31h, но без cx и 10h в cl для чтения счетчика
rdmsr
db 66h
mov word ptr tsch, ax ; загрузка младших 32-х разрядов
mov word ptr tsch, dx ; загрузка старших 32-х разрядов 64-разрядного счетчика тактов
end.
Расчет количества тактов: kol_takt = tsch * exp(32 * ln2) + tscl.
Получение времени потраченного МП (сек.): t = kol_takt / f,
где f – частота МП в Гц
Рекомендации к вычислению времени.
1. выполнить 2 запуска процедуры вычисления тактов для определения тактовых затрат на процедуру;
2. запустить процедуру;
3. запустить измеряемый процесс (например, функцию 42h);
4. запустить процедуру вычисления тактов. Из тактов этой процедуры вычесть такты предыдущей процедуры и такты, потребляемые процедурой п.1. Получаем реальное количество тактов, потребляемое процессом.
– Конец работы –
Эта тема принадлежит разделу:
Тестирование НЖМД объемом больше Гб... Для тестирования НЖМД объемом больше Гб используется прерывание h... h проверка наличия h расширенного...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Проектирование подпрограмм для функций прерывания 13h расширенного (13h-ext).
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов