Системное программное обеспечение. Рощин А.В. - 109 стр.

UptoLike

Составители: 

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