Государственное образовательное учреждение высшего профессионального образования «Комсомольский-на-Амуре государственный технический
по дисциплине «Операционные системы»
Тема:Исследование памяти ПЭВМ
Руководитель работы
Тихомиров В.А.
Исполнитель
Перепелица И.Б.
Группа 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) – восстановим его вручную.
Последним делом поставим первую букву в имени файла:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.