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

UptoLike

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

108
db '$'
b_param db 10 dup(0) ; Блок параметров для int 25h
st1: mov ax,cs
mov ds,ax
; Определение начального кластера
lea ax,buf_cat ; Инициализация указателя на начало
mov point,ax ; буфера текущего каталога
; Получение текущего каталога в buf_cat
mov ah,47h ; Получение текущего каталога
xor dl,dl ; Текущий дисковод
lea si,buf_cat ; Буфер для ASCIIZ тек. каталога
int 21h ; Тек' каталог в buf_cat
jnc st2 ; Ошибки нет
; Ошибка чтения сектора
lea dx,err_read
mov al,1 ; Ошибка чтения 1
call msg
int 20h
st2: ; Чтение BR в buf2
mov al,2 ; Диск С
mov cx,-1 ; Признак > 32 M
lea bx,b_param ; Блок параметров
mov word ptr [bx].sec_num,0 ; Отн. номер сектора
mov word ptr [bx+2].sec_num,0 ; Отн. номер сектора
mov [bx].number_s,1 ; Кол-во читаемых секторов
mov [bx].b_off,offset buf2
mov dx,cs
mov [bx].b_seg,dx
int 25h ; BR в buf2
pop cx
jnc st3 ; Ошибки нет
; Ошибка чтения сектора
lea dx,err_read
mov al,2 ; Второе чтение сектора
call msg
int 20h
; Чтение корневого каталога в buf3
st3: lea si,[buf2+11]
; Определение количества читаемых секторов каталога
; (один кластер, но не более 4)
mov al,[si].clus_siz ; Размер кластера
cmp al,4 ; Разм. кластера < 4
jc st31
mov al,4
st31: xor ah,ah
mov num_sec,ax ; Кол-во читаемых секторов кат.
; Определение числа секторов в корневом каталоге
mov ax,[si].root_siz ; Размер кат. (кол.файлов)
mov cl,4
shr ax,cl ; /16 (записей в секторе)
                                         108



             db      '$'
b_param      db      10 dup(0)            ; Блок параметров для int 25h
st1: mov ax,cs
       mov ds,ax
; Определение начального кластера
       lea   ax,buf_cat ; Инициализация указателя на начало
       mov point,ax        ; буфера текущего каталога
; Получение текущего каталога в buf_cat
       mov ah,47h          ; Получение текущего каталога
       xor   dl,dl         ; Текущий дисковод
       lea   si,buf_cat    ; Буфер для ASCIIZ тек. каталога
       int   21h           ; Тек' каталог в buf_cat
       jnc   st2           ; Ошибки нет
; Ошибка чтения сектора
       lea   dx,err_read
       mov al,1            ; Ошибка чтения 1
       call msg
       int   20h
st2:                       ; Чтение BR в buf2
       mov al,2            ; Диск С
       mov cx,-1           ; Признак > 32 M
       lea   bx,b_param ; Блок параметров
       mov word ptr [bx].sec_num,0               ; Отн. номер сектора
       mov word ptr [bx+2].sec_num,0                    ; Отн. номер сектора
       mov [bx].number_s,1         ; Кол-во читаемых секторов
       mov [bx].b_off,offset buf2
       mov dx,cs
       mov [bx].b_seg,dx
       int   25h           ; BR в buf2
       pop cx
       jnc   st3           ; Ошибки нет
; Ошибка чтения сектора
       lea   dx,err_read
       mov al,2            ; Второе чтение сектора
       call msg
       int   20h
; Чтение корневого каталога в buf3
st3: lea     si,[buf2+11]
; Определение количества читаемых секторов каталога
; (один кластер, но не более 4)
       mov al,[si].clus_siz        ; Размер кластера
       cmp al,4                    ; Разм. кластера < 4
       jc    st31
       mov al,4
st31: xor    ah,ah
       mov num_sec,ax              ; Кол-во читаемых секторов кат.
; Определение числа секторов в корневом каталоге
       mov ax,[si].root_siz        ; Размер кат. (кол.файлов)
       mov cl,4
       shr   ax,cl         ; /16 (записей в секторе)