Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры



Скачать 262.12 Kb.
Дата29.04.2013
Размер262.12 Kb.
ТипЛабораторная работа
Содержание

Лабораторная работа №1. Знакомство с общим устройством и функционированием ЭВМ. Изучение структуры процессора, организации памяти, структуры дисковой операционной системы и их взаимодействия.

Лабораторная работа №2. Знакомство с форматом представления вещественных чисел в ЭВМ. Изучение структуры процессора, организации памяти, взаимодействия процессора с памятью.

Лабораторная работа №3. Знакомство с прерываниями.

Лабораторная работа №4. Программная обработка клавиатуры.

Лабораторная работа №5. Работа с видеоадаптером.

Лабораторная работа №6. Работа с дисками.

Лабораторная работа №7. Написание обработчиков прерываний, знакомство с принципами разработки резидентных программ.

Лабораторная работа №1
ЗНАКОМСТВО С ОБЩИМ УСТРОЙСТВОМ И

ФУНКЦИОНИРОВАНИЕМ ЭВМ.

ИЗУЧЕНИЕ СТРУКТУРЫ ПРОЦЕССОРА,

ОРГАНИЗАЦИИ ПАМЯТИ,

СТРУКТУРЫ ДИСКОВОЙ ОПЕРАЦИОННОЙ СИСТЕМЫ

И ИХ ВЗАИМОДЕЙСТВИЯ
ЦЕЛЬ РАБОТЫ
Знакомство с общим устройством ЭВМ и получение начальных навыков для успешного выполнения последующих лабораторных работ.
ЗАДАНИЕ НА РАБОТУ
Работа состоит из трех этапов:

  1. Обзор периферийных устройств компьютера (при помощи утилиты SysInfo).

  2. Обзор дисковой системы (при помощи утилиты DiskEdit).

  3. Просмотр состояния памяти (при помощи утилиты Turbo Debugger).


1. Утилита SysInfo фирмы Symantec Corporation позволяет получить сведения об аппаратной организации компьютера. С помощью этой утилиты требуется определить и занести в отчет следующие сведения:

тип компьютера, дату создания BIOS, частоту микропроцессора и тип видеоадаптера;

номера программных прерываний клавиатуры, видеоадаптера, жесткого диска и мыши;

просмотреть состояние CMOS-памяти;

оценить количество свободной в данный момент DOS-памяти.
2. Утилита DiskEdit фирмы Symantec Corporation позволяет работать с дисками на более низком уровне, чем в MS DOS и Windows: на уровне секторов и кластеров. В лабораторной работе №6 студентам будет предложено организовать такую работу самостоятельно, а пока им предлагается воспользоваться этой утилитой. На данном этапе требуется выполнить следующее:

в режиме просмотра вывести на экран

 таблицу разделов,

 загрузочную запись,

 корневой каталог;

в режиме просмотра вывести на экран содержимое первой копии таблицы размещения файлов (FAT). При помощи этой таблицы определить цепочку кластеров, соответствующих какому-либо файлу (желательно, текстовому), и последовательно просмотреть содержимое кластеров, занятых данным файлом.

3. Turbo Debugger (TD.EXE) фирмы Borland Corporarion позволяет просматривать текущие значения регистров микропроцессора, а также состояние ячеек оперативной памяти. С помощью TD требуется выполнить следующее:

Определить тип компьютера по байту конфигурации, который находится в ПЗУ по адресу F000H:FFFEH, исходя из таблицы.

Определить размер DOS - памяти. Для этого просмотреть байты по адресу 413h и 414h и оценить их содержимое. (Необходимо учесть формат хранения чисел в памяти ЭВМ).

Определить дату создания ROM BIOS (она хранится по адресу FFFF5h) и сравнить с полученной при работе с SysInfo. Что расположено в этих адресах памяти, где хранится дата создания ROM BIOS?

Просмотреть таблицу векторов прерываний (она располагается, начиная с адреса 00000h и до адреса 003FFh). Адреса в таблице векторов прерываний хранятся в формате <сегмент> : < смещение>, при этом соблюдается формат хранения целых чисел в памяти ЭВМ. Определить адрес расположения подпрограммы обработки прерываний для первых трех элементов таблицы векторов прерываний. Записать полученные данные в тетрадь. Сколько всего адресов подпрограмм обработки прерываний хранится в этой таблице?

Просмотреть область данных BIOS, которая расположена сразу же за таблицей векторов прерываний и занимает 256 байт. Просмотреть состояние байтов по адресу 417h и 418h при нажатии клавиш NumLock, CapsLock и ScrollLock.


РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ
Не рекомендуется при работе с Turbo Debugger'ом менять значение регистра CS и загружать очень большие исполняемые программы.

ПРИЛОЖЕНИЕ 1
Turbo Debugger - это программа, позволяющая отображать состояние микропроцессора и память при работе той или иной программы в режиме трассировки. В левом верхнем углу располагается окно, в котором отображаются размещенные в оперативной памяти программы на данный момент (машинные коды инструкций и их эквиваленты на языке Ассемблера). Справа располагается панель, на которой отображается текущее содержимое всех регистров микропроцессора, а также регистра флагов. В нижнем левом окне отображаются байты памяти (а, вернее

сказать, дампы памяти) по указанному адресу.

Переключение между окнами осуществляется клавишей Tab. Система меню аналогична IDE Borland Pascal или Borland C.

Трассировка осуществляется клавишей F7. Во время трассировки содержимое регистров обновляется автоматически. Можно изменить значение регистра и вручную, перейдя в окно регистров и введя новое значение для требуемого регистра.

Чтобы просмотреть байт памяти по заданному адресу, нужно перейти в окно статуса памяти, нажать Ctrl-G и ввести адрес (абсолютный или в формате <сегмент> : <смещение>).
ПРИЛОЖЕНИЕ 2
Таблица

Значение байта_Тип компьютера__FFH_Оригинальный IBM PC__FEH_IBM PC/XT, Portable PC__FDH_PCjr__FCH_IBM PC/AT__FBH_IBM PC/XT с памятью 640 Кбайт на материнской плате.__F9H_Convertible PC__

Лабораторная работа №2
ЗНАКОМСТВО С ФОРМАТОМ ПРЕДСТАВЛЕНИЯ

ВЕЩЕСТВЕННЫХ ЧИСЕЛ В ЭВМ
ЦЕЛЬ РАБОТЫ
Изучение формата представления чисел с плавающей точкой в памяти компьютера. Дополнительно студенты получают начальные навыки работы с командами микропроцессора на языке Ассемблера.
ЗАДАНИЕ НА РАБОТУ
Организовать процедуру обработки математических операций с плавающей точкой - сложения и умножения двух вещественных чисел. Процедура может быть организована любым доступным способом (целиком на языке Ассемблера или с помощью ассемблерных вставок на языке программирования более высокого уровня).
РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ
Использовать короткий вещественный формат (4 байта) и расширенные (32-битные) регистры микропроцессора .
ПРИЛОЖЕНИЕ 1
ОСНОВНЫЕ КОМАНДЫ МИКРОПРОЦЕССОРА И ИХ ЭКВИВАЛЕНТЫ НА ЯЗЫКЕ PASCAL

Использованы следующие сокращения:

op8 - 8-битовый операнд (регистр, переменная);

op16 - 16-битовый операнд (регистр, переменная);

op32 - 32-битовый операнд (регистр, переменная);

@ - в качестве операнда может указываться константа;

$ - в качестве операнда может указываться сегментный регистр (кроме CS);

op1, op2 - 2 произвольных операнда (регистры, переменные, константы);

r16 - 16-битовый регистр;

На месте регистра AX (AL или EAX) может стоять ЛЮБОЙ регистр общего назначения.
I. Арифметические операции

1) mov AX,op16 - пересылка слов - AX := op16 $@

mov AL,op8 - пересылка байтов - AL := op8 @

mov EAX,op32 - пересылка двойных слов - EAX := op32 @

2) add AX,op16 - сложение слов - AX := AX + op16 @

add AL,op8 - сложение байтов - AL := AL + op8 @

add EAX,op32 - сложение двойных слов - EAX:=EAX + op32 @

3) sub AX,op16 - вычитание слов - AX := AX - op16 @

sub AL,op8 - вычитание байтов - AL := AL - op8 @

sub EAX,op32 - вычитание двойных слов - EAL:= EAX - op32 @

4) mul op16 - умножение слов - (DX,AX) := AX * op16

(первый множитель в AX) DX ( старшая часть

AX ( младшая часть

mul op8 - умножение байтов - AX := AL * op8

(первый множитель в AL) AH ( старшая часть

AL ( младшая часть

mul op32 - умножение двойных слов - (EDX,EAX) := EAX * op32

(первый множитель в EAX) EDX ( старшая часть

EAX ( младшая часть

5) div op16 - деление двойного

слова на слово - DX := (DX,AX) mod op16

AX := (DX,AX) div op16

div op8 - деление на байт - AH := AX mod op8

AL := AX div op8
6) inc op16 - увеличение слова

на 1 (increment) - inc(op16) или

op16 := op16+1

inc op8 - увеличение байта

на 1 (increment) - inc(op8) или

op8 := op8+1

7) dec op16 - уменьшение слова

на 1 (decrement) - dec(op16) или

op16 := op16-1
dec op8 - уменьшение байта

на 1 (decrement) - dec(op8) или

op8 := op8-1



                  1. Переходы



1) jmp <метка> - безусловный

переход - goto <метка>

2) cmp op1,op2 - сравнение

j<мнемокод> L1 - условный переход

по результату сравнения на метку L1

E - equal (равно)

N - not (не)

G - greater (больше) - для чисел со знаком

L - less (меньше) - для чисел со знаком

A - above (выше, больше) - для чисел без знака

B - below (ниже, меньше) - для чисел без знака
примеры:

cmp op1,op2 - переход если - if (op1=op2)

je L1 равенство then goto L1
cmp op1,op2 - переход если - if (op1<>op2)

jne L1 неравенство then goto L1
cmp op1,op2 - переход если - if (op1
jb L1 меньше then goto L1
cmp op1,op2 - переход если - if (op1>=op2)

jea L1 больше либо равно then goto L1
cmp op1,op2 - переход если - if (op1>=op2)

jnb L1 не меньше then goto L1
3) j<мнемокод> - условный переход

по значению флага
jc L1 - если был перенос - if (CF=1) then goto L1

jz L1 - если нуль - if (ZF=1) then goto L1

jo L1 - если переполнение - if (ОF=1) then goto L1

jnc L1 - если нет переноса - if (CF=0) then goto L1

jnz L1 - если не нуль - if (ZF=0) then goto L1


  1. Логические операции (интерес представляет только флаг нуля ZF)


1) not op16 - логическое - not(op16)

отрицание

not op8 - логическое - not(op8)

отрицание

2) and AX,op16 - конъюнкция - AX and op16 @

and AL,op8 - конъюнкция - AL and op8 @

3) test AX,op16 - проверка - аналогична команде AND, но

test AL,op8 - проверка результат никуда не записывается

4) or AX,op16 - дизъюнкция - AX or op16 @

or AL,op8 - дизъюнкция - AL or op8 @


  1. Команды сдвига (интерес представляет только флаг переноса CF, так как в него помещается уходящий бит)



1) shl op16,1 - логический сдвиг - op16 shl 1

shl op8,1 влево на 1 бит - op8 shl 1

(быстрое умножение числа на 2)
CF операнд

___

__

2) shr op16,1 - логический сдвиг - op16 shr 1

shr op8,1 вправо на 1 бит - op8 shr 1

(быстрое деление числа на 2)
операнд CF

___

__


  1. Способы адресации данных



1) lea DX,op1 - загрузка эффективного адреса операнда op1

в регистр DX

(load effective address)

2) les DX,op1 - загрузка адреса операнда op1 в два регистра:

ES <- сегмент, DX <- смещение

3) lds DX,op1 - загрузка адреса операнда op1 в два регистра:

DS <- сегмент, DX <- смещение



  1. [r16] - содержимое регистра (только SI,DI,BP,BX)



5) ES:[SI] - содержимое ячейки в сегменте ES

со смещением, хранящимся в SI

ПРИЛОЖЕНИЕ 2
Ниже приводится примерная структура программы, в которой достаточно только дописать самое главное - тело процедуры работы с вещественными числами. Процедура должна быть оформлена в виде отдельного файла MATH.ASM и откомпиллирована с помощью Турбо Ассемблера (TASM) .

{$N+} {Использование математического сопроцессора}

USES crt;

VAR op1,op2,op3,op4 : SINGLE;

i1 : LONGINT absolute op1;

i2 : LONGINT absolute op2;
{$F+}

procedure MATH(var op1,op2); external;

{$L Math.obj}

{$F-}
function HEX(j:LONGINT):STRING;

{Перевод числа в шестнадцатеричную форму}

const s:string='0123456789ABCDEF';

var st:string;

k,n:byte;

begin

st:='';

for k:=1 to 8 do

begin

n:=j and 15;

st:=s[n+1]+st;

j:=j shr 4;

end;

Hex:=st;

end;

begin

repeat

clrscr;

write(' Input Float 1: ');

readln(op1);

writeln('op1= ',op1);

writeln(' i1= ',i1,' hex = ',Hex(i1));

write(' Input Float 2: ');

readln(op2);

writeln('op2= ',op2);

writeln(' i2= ',i2,' hex = ',Hex(i2));

op3:=op1*op2;

op4:=op1+op2;

MATH(op1,op2);

writeln;

writeln('произведение = ',op1);

writeln(' hex = ',Hex(i1));

op1:=op3;

writeln('проверка = ',op3);

writeln(' hex = ',Hex(i1));

writeln('сумма = ',op2);

writeln(' hex = ',Hex(i2));

op2:=op4;

writeln('проверка = ',op4);

writeln(' hex = ',Hex(i2));

until readkey = #27;

end.

; FILE MATH.ASM

TITLE $Demo

.MODEL TPASCAL

.386

.CODE

MATH PROC FAR op1:DWORD, op2:DWORD

PUBLIC MATH;
; Start Code

push DS ; сохраняем DS в стеке

lds SI,op1 ; загружаем op1 в DS:SI

les DI,op2 ; загружаем op2 в ES:DI

mov EAX,DS:[SI] ; 1 operand in eax

mov EBX,ES:[DI] ; 2 operand in ebx
; Здесь надо вставить содержательную часть процедуры сложения и

; умножения вещественных чисел и записать результаты в EAX и EBX
mov DS:[SI],EBX ; произведение в op1

mov ES:[DI],EAX ; сумма в op2
; exit code

pop DS ; восстанавливаем DS

ret

MATH endp
CODE ENDS

END
Лабораторная работа №3
ЗНАКОМСТВО С ПРЕРЫВАНИЯМИ
ЦЕЛЬ РАБОТЫ
Изучение системы прерываний ЭВМ, и обработка этих прерываний.
ЗАДАНИЕ НА РАБОТУ
Написать программу обработки прерывания 33h - "мыши". Программа должна вывести на экран курсор "мыши" и при перемещении отображать текущие координаты курсора. Перемещение должно осуществляться в окне размером примерно в пол-экрана. Нажатие на правую кнопку мыши должно отключать отображение текущих координат, нажатие на левую кнопку - вновь включать его.
РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ
Все процедуры опроса состояния "мыши" целесообразно оформить в виде отдельных базовых процедур и использовать их потом в различных комбинациях в основной программе. Вызов прерываний можно выполнить, используя встроенные функции языка Pascal (intr) или C (int86).
Вот пример функции, определяющей наличие в системе драйвера "мыши". Аналогично можно организовать и все остальные функции (процедуры).
Function MouseInit:BOOLEAN;

Var

InitDriver : INTEGER;

Begin

asm

mov AX,00h

int 33h

mov InitDriver,AX

end;

If InitDriver = 0 then begin

clrscr;

write('Error: Mouse Driver not installed!');

halt;

end;

MouseInit := TRUE;

End;

ПРИЛОЖЕНИЕ 1.
ТЕОРЕТИЧЕСКАЯ СПРАВКА
Прерывания бывают программные и аппаратные. Аппаратные происходят независимо при работе тех или иных устройств, программные - при работе программы. Эффективное управление программными прерываниями позволяет программисту добиться гибкости и эффективности своей программы.

Каждое прерывание имеет свой номер от 0 до 255, по которому инициализируется в таблице векторов прерываний. Эта таблица содержит адрес соответствующей процедуры обработки прерывания. Но в состав MS DOS входит много процедур, для которых не хватает допустимых номеров прерываний. В связи с этим процедуры объединяются в группы и вызываются по прерыванию с одним и тем же номером. Процедуры одной группы принято называть функциями соответствующего прерывания. Чтобы различать их, перед вызовом соответствующего прерывания в регистр AH записывают номер нужной функции:
mov AH,<номер функции>

int <номер прерывания>
Отсюда видно, что команда INT предназначена для вызова прерывания с соответствующим номером.

Некоторые функции требуют передачи дополнительных параметров через регистры, а некоторые - возвращают значения через регистры.
Функции прерывания 33h
00h - Проверка наличия в системе драйвера "мыши",

результат -> AX, если AX = 0 - драйвер не установлен.
01h - Вывод курсора "мыши" на экран,

результат: если установлен драйвер "мыши", на экране появляется курсор.
02h - Удаление курсора "мыши" с экрана,

результат: удаляет с экрана курсор только в том случае, если функция 01h вызывалась до этого 1 раз
03h - Определение положения курсора и состояния кнопок

результат:

CX - номер колонки,

DX - номер строки,

BX - состояние кнопок:
7_6_5_4_3_2_1_0__

бит0 = 1 - левая кнопка нажата,

бит1 = 1 - правая кнопка нажата,

бит2 = 1 - средняя кнопка нажата.
04h - Установка курсора в определенное положение на экране

на входе:

CX - номер колонки,

DX - номер строки.
07h - Установка ограничения перемещение "мыши" по горизонтали

на входе:

CX - левая граница,

DX - правая граница.
08h - Установка ограничения перемещение "мыши" по вертикали

на входе:

CX - верхняя граница,

DX - нижняя граница.
0Bh - Определение величины перемещения со времени последнего вызова

результат:

CX - перемещение по горизонтали,

DX - перемещение по вертикали.

Лабораторная работа №4
ПРОГРАММНАЯ ОБРАБОТКА КЛАВИАТУРЫ
ЦЕЛЬ РАБОТЫ
Программная обработка состояния клавиатуры. Особое внимание следует уделить специальным клавишам, таким как Left Ctrl, Right Ctrl, Left Alt, Right Alt, Left Shift, Right Shift, Insert.
ЗАДАНИЕ НА РАБОТУ


  1. Написать демонстрационную программу работы с индикаторами клавиш NumLock, CapsLock, ScrollLock ("мигание" индикаторов)

  2. Написать программу, определяющую нажатия Left Shift, Right Shift, Left Сtrl, Right Ctrl, Left Alt, Right Alt, обеих клавиш Shift.


РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ
При написании программы на языке Pascal можно использовать функцию PTR. При использовании языка С - функции PEEK и POKE. Целесообразно будет и использование простых вставок на языке Ассемблера.


Пример обращения к ячейке памяти на языке Ассемблера

...

push DS ;сохраняем DS в стеке
lds SI,op1 ;загружаем адрес op1 в DS:SI
mov AX,00h ;обнуляем ES (через AX)

mov ES,AX ;ES <- 00h (сегмент)

mov DI,417h ;DI <- 417h (смещение)
mov AX,ES:[DI] ;считываем содержимое ячейки в AX

mov DS:[SI],AX ;записываем считанное по адресу переменной op1
pop DS ;восстанавливаем DS из стека

...
ПРИЛОЖЕНИЕ 1
ТЕОРЕТИЧЕСКАЯ СПРАВКА
Информация по данным клавишам хранится в области данных BIOS в слове с адресом 417h.


байт с адресом 417h:
7_6_5_4_3_2_1_0__

0 - правый Shift

1 - левый Shift

2 - Ctrl (левый или правый)

3 - Alt (левый или правый)

4 - ScrollLock on/off (состояние: 1, если индикатор светится)

5 - NumLock on/off (состояние: 1, если индикатор светится)

6 - CapsLock on/off (состояние: 1, если индикатор светится)

7 - Insert (1 - режим вставки, 0 - режим замены)
байт с адресом 418h:

7_6_5_4_3_2_1_0__

0 - левый Ctrl

1 - левый Alt

2 -

3 -

4 - ScrollLock (состояние: 1, если нажата; 0, если отпущена)

5 - NumLock (состояние: 1, если нажата; 0, если отпущена)

6 - CapsLock (состояние: 1, если нажата; 0,- если отпущена)

7 - Insert (состояние: 1, если нажата; 0, если отпущена)
Лабораторная работа №5
РАБОТА С ВИДЕОАДАПТЕРОМ
ЦЕЛЬ РАБОТЫ
Изучение режимов работы видеоадаптера VGA, работа с палитрой, изучение функций прерывания 10h (BIOS-прерывания для работы с видеоадаптером).
ЗАДАНИЕ НА РАБОТУ
Варианты заданий:

1. Видеорежимы адаптера VGA.

2. Работа с палитрой.

3. Работа с графикой.


  1. Написать ассемблерную процедуру, которая устанавливает заданный видеорежим, указанный во входном параметре. Продемонстрировать работу процедуры в текстовом режиме 03H (80x25x16) и в графическом 13H (320x200x256). Используя прямой доступ к видеопамяти (0B8000H - начало видеопамяти в текстовом режиме и 0A0000H - начало видеопамяти в графическом режиме) и стандартный предопределенный в TURBO PASCAL'e массив MEM, вывести в текстовом режиме на экран строку, а в графическом - последовательность нескольких пикселей.




  1. Используя функцию для работы с палитрой прерывания 10h, переопределить цвет выведенного на экран текста. Для переопределения цветов следует учесть, что новый сформированный цвет будет зависеть от интенсивности трех компонентов - красного, зеленого и синего (R, G, B). Значения интенсивности лежат в диапазоне от 0 до 63. Так, например, для установки красного цвета максимальной яркости надо Red-компонент установить равным 63, а Green- и Blue- компоненты - в нули.

R G B
0 0 0 - черный

63 0 0 - ярко-красный

0 63 0 - ярко-синий

0 0 63 - ярко-зеленый

63 63 0 - желтый

0 63 63 - голубой

63 0 63 - фиолетовый

63 63 63 - белый
Более сложное задание по работе с палитрой заключается в создании в графическом режиме эффекта "плазмы".
3. Создать с помощью процедур вывода точки и чтения цвета точки программу, работающую с динамической графикой:

а) имитирующую падающий снег.

б) имитирующую движение звезд.
Примечание: движение звезд аналогично падающему снегу, только точки не должны скапливаться внизу экрана.
РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ
Естественно, что все функции, которые требуется осуществить, давно уже имеются в наличии как в библиотеках языка Pascal, так и языка С и многих других. Однако работа с графикой требует от программиста понимания не только того, какую функцию где надо использовать и что от нее ожидать, но и того, как осуществляется работа видеоадаптера, какие возможности он предоставляет и как эти возможности максимально использовать. Поэтому, прежде чем приступать к этой работе, необходимо внимательно изучить теоретический материал и желательно иметь представление о назначении прерывания 10h и о наборе его функций (который сознательно здесь не приводится). После этого написание столь несложных функций не займет много времени.

Лабораторная работа №6
РАБОТА С ДИСКАМИ
ЦЕЛЬ РАБОТЫ
Изучение логической структуры диска в MS DOS и основных ее компонентов: загрузочной записи, таблицы разделов, корневого каталога, FAT. Получение практических навыков работы с дисками на уровне кластеров и секторов, а не на уровне файлов или каталогов.
ЗАДАНИЕ НА РАБОТУ.
Предлагается на выбор 3 варианта задания:

  1. Написать программу, выводящую на экран содержимое таблицы разделов первого диска, выполняя чтение первого сектора диска с помощью BIOS-прерывания 13h.

  2. Написать программу, выводящую на экран содержимое загрузочной записи для указанного логического диска.

  3. Написать программу, которая читает корневой каталог указанного логического диска и выводит его содержимое на экран.


РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ


  1. В данной работе придется иметь дело с порциями информации размером в один сектор (обычно 512 байт), при этом информация, содержащаяся в секторе, может быть различной (первый байт хранит что-то, потом 4 байта хранят еще что-то, следующие 2 байта еще что-то и т. д.). Как видно, информация неоднородна, и для прямого получения той или иной величины рекомендуется использовать поля структуры (записи) языков высокого уровня.

  2. Для чтения сектора диска придется использовать прерывания, при этом следует учитывать, что BIOS-прерывания используют физическую адресацию секторов, а DOS-прерывания - логическую.

  3. Рекомендуется в программе использовать дальние указатели. Если написание ассемблерных вставок еще вызывает трудности, можно, не прибегая к ним, воспользоваться средствами языка Pascal или С.

Перед тем, как приступать к написанию программы, следует познакомиться с принятым форматом представления таблицы разделов, загрузочной записи или корневого каталога. Для этого рекомендуется использовать программу DISKEDIT из пакета NORTON UTILITIES (меню Object, пункты Partition Table, Boot Record и Directory).


ПРИЛОЖЕНИЕ 1
ТЕОРЕТИЧЕСКАЯ СПРАВКА
Формат первого сектора жесткого диска (сектор 1, дорожка 0, головка 0)

Смещение, байт_Размер, байт_Описание__0_1BEh_Загрузочная запись__1BEh_10h_1-й элемент таблицы разделов__1СEh_10h_2-й элемент таблицы разделов__1DEh_10h_3-й элемент таблицы разделов__1EEh_10h_4-й элемент таблицы разделов__1FEh_2_Признак конца таблицы - 55AAh__

Каждый из четырех элементов таблицы разделов имеет следующий формат:

Смещение, байт_Размер, байт_Описание__0_1_Признак активного раздела

0 - раздел неактивный

80h - раздел активный__1_1_Номер головки для начального сектора раздела__2_2_Номер сектора и дорожки для начального сектора раздела в формате функции чтения сектора 13h:

байты 0 - 5 - номер сектора

байты 6 - 15 - номер дорожки (цилиндра)__4_1_Код системы:

0 - Неизвестная система

1, 4, 6 - MS DOS

5 - Расширенный раздел MS DOS__5_1_Номер головки последнего сектора раздела__6_2_Номер сектора и дорожки последнего сектора раздела в формате функции чтения сектора 13h__8_4_Относительный номер сектора начала раздела__12_4_Размер раздела в секторах__
В первом секторе активного раздела расположена загрузочная запись (BOOT RECORD), которую не следует путать с главной загрузочной записью (MASTER BOOT RECORD). Первый сектор логического диска называется загрузочным.

Для современных версий MS DOS (4.0 и выше) загрузочный сектор имеет следующий формат:

Смещение, байт_Размер, байт_Описание__0_3_Команда JMP xxx - переход на программу начальной загрузки__3_8_Название фирмы-изготовителя ОС и версия ОС__11_25_Расширенный блок параметров BIOS (*)__36_1_Физический номер устройства (0 - НГМД, 80h - ЖД)__37_1_Зарезервировано__38_1_Символ ")" - признак расширенной загрузочной записи__39_4_Серийный номер диска (создается при форматировании)__43_11_Метка диска__54_8_Обычно содержит запись типа "FAT12 ", идентифицирующую формат таблицы размещения файлов FAT__(*) Расширенный блок параметров BIOS (Extended BIOS Parameter Block) EBPB находится в поле загрузочного сектора со смещением 11 байт и содержит следующую информацию:

Смещение, байт_Размер, байт_Описание__0_2_Количество байт в одном секторе диска__2_1_Количество секторов в одном кластере__3_2_Количество зарезервированных секторов __5_1_Количество таблиц FAT__6_2_Максимальное количество дескрипторов файлов в корневом каталоге диска__8_2_Общее количество секторов для данных__10_1_Вид носителя данных (F8h для жесткого диска)__11_2_Количество секторов, занимаемых одной копией FAT__13_2_Количество секторов на дорожке__15_2_Количество магнитных головок (сторон)__17_2_Количество скрытых секторов для раздела < 32Mb__19_2_Количество скрытых секторов для раздела > 32Mb__21_4_Общее количество секторов на логическом диске > 32Mb__Следующие сектора занимают 2 копии FAT, сразу после которых располагается корневой каталог. Количество копий FAT и количество секторов, занимаемых одной копией, можно узнать из блока параметров BIOS. Размер корневого каталога можно определить также из блока параметров BIOS, учитывая, что для каждого элемента в каталоге отводится 32 байта.
Любой каталог содержит 32-байтовые элементы - дескрипторы, описывающие файлы и другие каталоги. Приведем формат дескриптора:
Смещение, байт_Размер, байт_Содержимое__0_8_Имя файла (каталога), дополненное пробелами справа__8_3_Расширение имени, дополненное пробелами справа__11_1_Байт атрибутов файла (**)__12_10_Зарезервировано__22_2_Время создания файла (последней модификации) (***)__24_2_Дата создания файла (последней модификации) (****)__26_2_Номер первого кластера файла__28_4_Размер файла в байтах__

(**) Биты байта атрибутов имеют следующие значения:

Бит Описание

0 Только для чтения

1 Скрытый файл

2 Системный файл

3 Метка диска

4 Каталог

5 Архивный файл

6-7 Зарезервированы


(***) Формат поля времени
15 11 10 5 4 0

Часы (0...23)_Минуты (0...59)_Секунды/2 (0...29)__
(****) Формат поля даты
15 9 8 5 4 0

Год (0...119)_Месяц (1...12)_День (1...31)__

Для того чтобы получить значение года обновления файла, надо прибавить к величине, хранимой в старших семи битах, значение 1980. Поля месяца и дня полностью соответствуют календарной дате.
Чтение секторов осуществляется в MS DOS прерыванием 25h. Вызов этого прерывания имеет различный формат для разных версий MS DOS. Для MS DOS версий более ранних, чем 4.0 (не поддерживающих размер логических дисков более 32 Мбайт) используется следующий формат:

На входе: AL Номер диска (0 - A, 1 - B, ...)

CX Количество секторов длячтения

DX Логический номер начального сектора

DS:BX Адрес буфера для чтения

На выходе AH Код ошибки

CF 1, если произошла ошибка

0, если ошибки не было
Для более поздних версий используется другой способ. Так как 16 разрядов недостаточно для адресации всех секторов логического диска размером более 32 Мбайт (объясните, почему), то часть регистров используются по-другому:

  • Регистр СХ содержит FFFFh - признак того, что программа работает с логическим диском, имеющим размер более 32 Мбайт (при работе с дискетой все равно можно использовать этот метод).

  • Регистры DS:BX должны содержать адрес следующей структуры:



Смещение, байт_Размер, байт_Содержимое__0_4_Логический номер начального сектора__4_2_Количество секторов, которое нужно прочитать__6_4_Адрес буфера для чтения__

Внимание!!!

Это прерывание оставляет в стеке одно слово - старое значение регистра флагов. Поэтому после вызова прерывания должна следовать, например, такая команда:

pop ax

Лабораторная работа № 7
ЗНАКОМСТВО С ОСНОВНЫМИ ПРИНЦИПАМИ НАПИСАНИЯ ОБРАБОТЧИКА ПРЕРЫВАНИЯ, ОСТАВЛЕНИЕ ПРОГРАММЫ РЕЗИДЕНТНОЙ В ПАМЯТИ, ПЕРЕХВАТ СИСТЕМНЫХ ПРЕРЫВАНИЙ
ЦЕЛЬ РАБОТЫ
Изучение механизма прерываний микропроцессора i80x86, принципов написания собственных обработчиков прерываний, перехваты системных прерываний с оставлением процедур-обработчиков в памяти после окончания работы программы.
ЗАДАНИЕ НА РАБОТУ
Данная работа состоит из трех взаимосвязанных частей. В первой части данной лабораторной работы необходимо написать программу на языке Ассемблера, в которой будут процедура-обработчик для не используемого DOS пользовательского прерывания и вызов этого прерывания для демонстрации работы программы. Во второй части работы нужно написать программу, которая будет оставлять после себя в памяти резидент-обработчик того же пользовательского прерывания и отдельную программу, состоящую только из вызова пользовательского прерывания. В третьей части лабораторной работы надо написать программу, оставляющую после себя в памяти резидент-обработчик системного прерывания (прерывания от таймера, клавиатуры и т.д.).
РЕКОМЕНДАЦИИ ПО ВЫПОЛНЕНИЮ РАБОТЫ
В процессе перехвата прерываний часто бывает необходимо сохранить старый вектор прерывания для последующего его восстановления во время выхода из программы.

Во время обработки системных прерываний (08h , 09h) необходимо вызывать старый обработчик этого прерывания, если вы не выполняете полностью всех его функций.

Также необходимо сохранить регистры, с которыми вы работаете, и восстановить их значения перед выходом из процедуры обработчика.
ПРИЛОЖЕНИЕ 1
ТЕОРЕТИЧЕСКАЯ СПРАВКА
Работа с прерываниями
Первый килобайт памяти содержит таблицу векторов прерываний. Вектор прерывания это адрес обработчика данного прерывания занимающий два машинных слова (четыре байта), в которых записаны его сегмент и смещение.

Вектор прерывания можно получить и установить при помощи функций 35h и 25h.
Получение вектора прерывания:

AH=35

AL=№ прерывания

В регистровой паре ES:BX возвращается вектор заданного прерывания.
Установка вектора прерывания:

AH=25h

AL=№ прерывания

Устанавливается вектор прерывания, находящийся в регистровой паре DS:DX, возвращается вектор заданного прерывания.
Написание резидентов
Завершение программы прерыванием 27h оставляет ее резидентной в памяти. CS должен указывать на начало PSP для того, чтобы эта функция работала правильно. В программах COM, CS сразу устанавливается соответствующим образом, поэтому надо просто завершить программу прерыванием 27h. В программах EXE , CS первоначально указывает на первый байт, следующий за PSP (т.е. 100h). При нормальном завершении EXE программы последняя инструкция RET выталкивает из стека первые положенные туда значения:

PUSH DX

MOV AX,0

PUSH AX.

Поскольку DS первоначально указывает на начало PSP, то при получении этих значений из стека счетчик команд указывает на смещение 0 в PSP, где при инициализации записывается инструкция INT 20h. Поэтому INT 20h выполняется, а это cтандартная функция для завершения программы и передачи управления в DOS. Чтобы заставить прерывание 27h работать в EXE программе надо поместить 27h во второй байт PSP (первый содержит машинный код инструкции INT), а затем завершить программу обычным RET. Для обоих типов файлов прежде чем выполнить прерывание 27h, DX должен содержать смещение конца программы, отсчитываемое от начала PSP.


Список использованной литературы.


  1. Фролов А. В., Фролов Г. В.. MS-DOS для программиста (ч. 1). -М: Диалог - МИФИ, 1997.

  2. Фролов А. В., Фролов Г. В.. MS-DOS для программиста (ч. 2). -М: Диалог - МИФИ, 1997.

  3. Турбо Паскаль 7.0. (Под ред. А. Колесникова, В. Гинзбурга). -Киев: BHV, 1996.

  4. Березин Б. И., Березин. С. Б. Начальный курс С и С++. -М: Диалог - МИФИ, 1996.

  5. Пильщиков В. Н. Программирование на языке Ассемблера IBM PC. -М: Диалог - МИФИ, 1996.

  6. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. –М: Финансы и статистика, 1991.

  7. Нортон П. Программно-аппаратная организация IBM PC. -М: Радио и связь, 1992.

  8. Нортон П. Персональный компьютер фирмы IBM и операционная система MS-DOS. -М: Радио и связь, 1992.

  9. Нортон П., Уилтон Р. IBM PC и PS/2. Руководство по программированию. -М: Радио и связь, 1994.

  10. Гук М. Аппаратные средства IBM PC. Энциклопедия. –СПб: Питер, 2000.


_PAGE _17_



Похожие:

Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа №1 Работа в Oracle Database Express Edition 1 Лабораторная работа №6
Лабораторная работа Выполнение расчетов с использованием программирования в среде Visual Basic for Applications
Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа № Обработка числовых последовательностей
Заполнить файл Input txt числовой последовательностью (например, 4,5,10,43,6,7). Последовательность генерируется случайным образом...
Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа по теме: «ms doc. Основные команды.»
Мбоу «сош №8 г. Петровска Саратовской области» Лабораторная работа в среде ms dos
Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа 08 Изучение дифракции рентгеновских лучей на кристаллах Москва 2005 г. 1 лабораторная работа 08
Цель работы: определение расстояний между атомными плоскостями в кристалле по имеющейся рентгенограмме
Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа №1 Изучение пакета tasm и организация ввода данных с клавиатуры Группа: по0601 Бригада: 1

Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа №1 3 Создание ситуационного плана миигаиК 3 Лабораторная работа №2 8 Оцифровка части карты и создание базы данных 8
«Геоинформационные технологии сбора и обработки информации» в среде MapInfo Professional
Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconИсследование изучение строения и физиологические процессы. Эксперимент серия опытов. Лабораторная работа
Совокупность относительно однородных приемов, операции освоения действительности ( теоретические- практические) подчиненных расширению...
Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа №17 по дисциплине " Методы и средства гидрометеорологических измерений". Устройство осциллографов
Устройство осциллографов. Лабораторная работа №17 по курсу “Гидрометеорологические измерения”. С. Петербург: рггму, 2002, 14 с
Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа по курсу «Физические основы микроэлектроники» Нижний Новгород, 2005
Операционный усилитель: Лабораторная работа по курсу «Микроэлектроника» / Сост. Н. В. Федосеева, С. М. Планкина. – Н. Новгород, ннгу,...
Лабораторная работа №3. Знакомство с прерываниями. Лабораторная работа №4. Программная обработка клавиатуры iconЛабораторная работа 01 определение плотности твердых тел москва 2005 г. Лабораторная работа 101
Существуют методы анализа и учета влияния различных погрешностей на результаты измерений. Все погрешности (ошибки) измерений принято...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org