Изучение структуры, функционирования и управления дисковой памятью в файловой системе типа FAT на ПЭВМ

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Государственное образовательное учреждение высшего профессионального образования «Комсомольский-на-Амуре государственный технический

университет»

Кафедра математического обеспечения и применения ЭВМ

Лабораторная работа №3

по дисциплине «Операционные системы»

Тема:Исследование  памяти  ПЭВМ

Руководитель работы

Тихомиров В.А.

Исполнитель

Перепелица И.Б.

Группа 3ВС-1

Комсомольск-на-Амуре

2005

Цель работы: изучение структуры, функционирования и управления  дисковой памятью в файловой системе типа FAT  на ПЭВМ

Задание : студент должен:

-  изучить структуру дисковых записей на ПЭВМ в файловой системе FAT

-  изучить  системные прерывания MS DOS для работы с дисками

Первым этапом работы стало создание новой виртуальной машины, и разбивка винчестера на разделы.

Далее, с помощью программы DiskEdit, и задав команду Задать объект – > диск(физический) и далее, Просмотр-> логическое представление, наглядно увидим в каких секторах располагаются наши логические разделы.

Теперь зададим 0 сторону, 0 цилиндр, 1 сектор – по этому адресу располагается начальный загрузчик MBR.COM.

Дизассемблируем его, и получим исходный код:

PAGE  59,132

data_1e             equ  61Bh           ; (0000:061B=43h)

data_2e             equ  7C1Bh               ; (0000:7C1B=3Ch)

data_6e             equ  6A1h           ; (6DEC:06A1=0)

data_7e             equ  710h           ; (6DEC:0710=0)

data_8e             equ  7BEh           ; (6DEC:07BE=0)

data_9e             equ  7DFEh               ; (6DEC:7DFE=0)

data_10e         equ    0AA55h              ; (6DEC:AA55=0)

seg_a               segment   byte public

assume    cs:seg_a, ds:seg_a

org  100h

mbr                 proc far

start:

xor  ax,ax               ; Zero register

mov  ss,ax

mov  sp,7C00h

sti                 ; Enable interrupts

push ax

pop  es

push ax

pop  ds

cld                 ; Clear direction

mov  si,data_2e          ; (0000:7C1B=3Ch)

mov  di,data_1e          ; (0000:061B=43h)

push ax

push di

mov  cx,1E5h

rep  movsb               ; Rep when cx >0 Mov [si] to es:[di]

retf                ; Return far

mov  si,data_8e          ; (6DEC:07BE=0)

mov  cl,4

locloop_1:

cmp  [si],ch

jl   loc_2               ; Jump if <

jnz  loc_4               ; Jump if not zero

add  si,10h

loop locloop_1      ; Loop if cx > 0

int 18h          ; ROM basic

Загрузка активного разлела

loc_2:

mov  dx,[si]

mov  bp,si

loc_3:

add  si,10h

dec  cx

jz   loc_8               ; Jump if zero

cmp  [si],ch

je   loc_3               ; Jump if equal

loc_4:

mov  si,data_7e          ; (6DEC:0710=0)

loc_5:

dec  si

loc_6:

lodsb                    ; String [si] to al

cmp  al,0

je   loc_5               ; Jump if equal

mov  bx,7

mov  ah,0Eh

int  10h            ; Video display   ah=functn 0Eh

;  write char al, teletype mode

loc_7:

jmp  short loc_6         ; (013F)

loc_8:

mov  [bp+25h],ax

xchg ax,si

mov  al,[bp+4]

mov  ah,6

cmp  al,0Eh

je   loc_10              ; Jump if equal

mov  ah,0Bh

cmp  al,0Ch

je   loc_9               ; Jump if equal

cmp  al,ah

jne  loc_12              ; Jump if not equal

inc  ax

loc_9:

mov  byte ptr [bp+25h],6

jnz  loc_12              ; Jump if not zero

loc_10:

mov  bx,55AAh

push ax

mov  ah,41h              ; 'A'

int 13h           ; Disk  dl=drive a 

Чтение первого сектора

ah=func 41h

pop  ax

jc   loc_11              ; Jump if carry Set

cmp  bx,data_10e         ; (6DEC:AA55=0)

jne  loc_11              ; Jump if not equal

test cl,1

jz   loc_11              ; Jump if zero

mov  ah,al

mov  [bp+24h],dl

mov  word ptr ds:data_6e,1EEBh     ; (6DEC:06A1=0)

loc_11:

mov  [bp+4],ah

loc_12:

mov  di,0Ah

loc_13:

mov  ax,201h

mov  bx,sp

xor  cx,cx               ; Zero register

cmp  di,5

jg   loc_14              ; Jump if >

mov  cx,[bp+25h]

loc_14:

add  cx,[bp+2]

int 13h           ; Disk  dl=drive a

Загрузка операционной системы с дискеты (если она не была найдена на жестком диске)

ah=func 02h

;  read sectors to memory es:bx

loc_15:

jc   loc_17              ; Jump if carry Set

mov  si,746h

cmp  word ptr ds:data_9e,0AA55h    ; (6DEC:7DFE=0)

je   loc_21              ; Jump if equal

sub  di,5

jg   loc_13              ; Jump if >

loc_16:

test si,si

jnz  loc_6               ; Jump if not zero

mov  si,727h

jmp  short loc_7         ; (014B)

cbw                 ; Convrt byte to word

xchg ax,cx

push dx

cwd                 ; Word to double word

add  ax,[bp+8]

adc  dx,[bp+0Ah]

call sub_1               ; (01E0)

pop  dx

jmp  short loc_15        ; (01A6)

loc_17:

dec  di

jz   loc_16              ; Jump if zero

xor  ax,ax               ; Zero register

int  13h            ; Disk  dl=drive a  ah=func 00h

;  reset disk, al=return status

jmp  short loc_13        ; (0192)

add  [bx+si],al

add  [bx+si],al

add  [bx+si],al

mbr                 endp

;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

;                               SUBROUTINE

;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

sub_1               proc near

push si

xor  si,si               ; Zero register

push si

push si

push dx

push ax

push es

push bx

push cx

mov  si,10h

push si

mov  si,sp

push ax

push dx

mov  ax,4200h

mov  dl,[bp+24h]

int  13h            ; Disk  dl=drive a  ah=func 42h

pop  dx

pop  ax

lea  sp,[si+10h]         ; Load effective addr

jc   loc_20              ; Jump if carry Set

locloop_18:

inc  ax

jnz  loc_19              ; Jump if not zero

inc  dx

loc_19:

add  bh,2

loop locloop_18          ; Loop if cx > 0

clc                 ; Clear carry flag

loc_20:

pop  si

retn

sub_1               endp

loc_21:

jmp  short loc_22        ; (0283)

db   'Invalid partition table', 0

db   'Error loading operating system', 0

db   'Missing operating system'

db   37 dup (0)

loc_22:

mov  di,sp

push ds

push di

mov  si,bp

retf                ; Return far

db   52 dup (0)

db   80h, 01h, 01h, 00h, 06h,0FEh

db   3Fh, 3Fh, 3Fh, 00h, 00h, 00h

db   01h,0B0h, 0Fh, 00h, 00h, 00h

db   01h, 40h, 05h,0FEh, 7Fh, 26h

db   40h,0B0h, 0Fh, 00h, 27h,0A0h

db   38h, 00h, 00h, 00h, 41h, 27h

db   06h,0FEh, 7Fh,0A6h, 67h, 50h

db   48h, 00h, 80h, 60h, 1Fh, 00h

db   00h, 00h, 41h,0A7h, 06h,0FEh

db   0BFh, 23h,0E7h,0B0h, 67h, 00h

db   3Dh,0A4h, 1Eh, 00h, 55h,0AAh

seg_a               ends

end  start

Далее удалим с винта файл mouse.com, на месте его расположения будет пустое место.

Запомнив с какого кластера начинается этот файл (198) – восстановим его вручную.

Последним делом поставим первую букву в имени файла:

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
147 Kb
Скачали:
0