рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Проектирование подпрограмм для функций прерывания 13h расширенного (13h-ext).

Проектирование подпрограмм для функций прерывания 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. Получаем реальное количество тактов, потребляемое процессом.

– Конец работы –

Эта тема принадлежит разделу:

Лекция 10 Проектирование программ тестирования накопителей на жестких магнитных дисках (НЖМД)

Тестирование НЖМД объемом больше Гб... Для тестирования НЖМД объемом больше Гб используется прерывание h... h проверка наличия h расширенного...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Проектирование подпрограмм для функций прерывания 13h расширенного (13h-ext).

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Проектирование программ тестирования накопителей на жестких магнитных дисках (НЖМД).
Обобщенный алгоритм тестирования НЖМД. 1. Определение характеристик накопителя: для накопителей до 8Гб это головки, цилиндры, сектора. Такие накопители обслуживает прерывание 13h; д

Использование прерывания 13h для тестирования НЖМД.
Из-за конфигурации регистров контроллера 13h нерасширенное используется только для НЖМД объемом до 8Гб: - 6 младших разрядов регистра cl содержат адрес сектора, поэтому максимальное количе

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги