ВУЗ:
Составители:
109
mov sec_cat,al ; Секторов в каталоге
; Определение физ. номера сектора начала корневого каталога
mov dl,[si].fat_num ; Кол-во FAT на диске
mov ax,[si].fat_siz ; Число секторов в FAT
mul dl ; AX -номер сект. нач. корнев. кат.
inc ax ; Лог. номер сектора нач. корн. кат.
mov root_s,ax ; Лог. ном. сект. нач. корн. кат.
lea bx,b_param ; Блок параметров
mov word ptr [bx].sec_num,ax ; Отн. номер сект.
mov word ptr [bx+2].sec_num,0 ; Отн. номер сект.
mov al,2 ; Диск С
mov cx,-1 ; Признак > 32 M
mov di,num_sec
mov [bx].number_s,di ; Кол-во читаемых секторов
mov [bx].b_off,offset buf3
mov dx,cs
mov [bx].b_seg,dx
int 25h ; Каталог в buf3
pop cx
jnc st4 ; Ошибки нет
; Ошибка чтения сектора
lea dx,err_read
mov al,3
call msg
int 20h
st4: ; Определение логического номера сектора первого
; доступного кластера на текущем логическом диске
mov bp,root_s ; Лог.ном.сект.нач.корн.кат.
mov bl,sec_cat
xor bh,bh
add bp,bx ; + сект. в корн. каталоге
mov clu0,bp
mov byte ptr f_flag,0 ; Ищется не файл
; Цикл поиска каталогов вплоть до текущего
st40: mov cx,64 ; Кол. анализируемых записей
lea si,buf3 ; Начало 1 записи каталога
st41: cmp byte ptr [si],0 ; Пустая запись ?
jz st42 ; Пропуск
cmp byte ptr [si],0e5h ; Стертая запись ?
jz st42 ; Пропуск
call comp ; Сравнение с искомым
cmp flag,1 ; Hайден ?
jz st43 ; Найден
st42: add si,32 ; Переход к следующей записи
loop st41
; Ошибка поиска
lea dx,err_read
mov al,4
call msg
int 20h
109
mov sec_cat,al ; Секторов в каталоге
; Определение физ. номера сектора начала корневого каталога
mov dl,[si].fat_num ; Кол-во FAT на диске
mov ax,[si].fat_siz ; Число секторов в FAT
mul dl ; AX -номер сект. нач. корнев. кат.
inc ax ; Лог. номер сектора нач. корн. кат.
mov root_s,ax ; Лог. ном. сект. нач. корн. кат.
lea bx,b_param ; Блок параметров
mov word ptr [bx].sec_num,ax ; Отн. номер сект.
mov word ptr [bx+2].sec_num,0 ; Отн. номер сект.
mov al,2 ; Диск С
mov cx,-1 ; Признак > 32 M
mov di,num_sec
mov [bx].number_s,di ; Кол-во читаемых секторов
mov [bx].b_off,offset buf3
mov dx,cs
mov [bx].b_seg,dx
int 25h ; Каталог в buf3
pop cx
jnc st4 ; Ошибки нет
; Ошибка чтения сектора
lea dx,err_read
mov al,3
call msg
int 20h
st4: ; Определение логического номера сектора первого
; доступного кластера на текущем логическом диске
mov bp,root_s ; Лог.ном.сект.нач.корн.кат.
mov bl,sec_cat
xor bh,bh
add bp,bx ; + сект. в корн. каталоге
mov clu0,bp
mov byte ptr f_flag,0 ; Ищется не файл
; Цикл поиска каталогов вплоть до текущего
st40: mov cx,64 ; Кол. анализируемых записей
lea si,buf3 ; Начало 1 записи каталога
st41: cmp byte ptr [si],0 ; Пустая запись ?
jz st42 ; Пропуск
cmp byte ptr [si],0e5h ; Стертая запись ?
jz st42 ; Пропуск
call comp ; Сравнение с искомым
cmp flag,1 ; Hайден ?
jz st43 ; Найден
st42: add si,32 ; Переход к следующей записи
loop st41
; Ошибка поиска
lea dx,err_read
mov al,4
call msg
int 20h
Страницы
- « первая
- ‹ предыдущая
- …
- 107
- 108
- 109
- 110
- 111
- …
- следующая ›
- последняя »
