Реферат: Драйвер виртуального диска
jae out_of_range ; логических секторов
add cx,request.count ; найдем номер конечного
dec cx ; сектора и тоже сравним
cmp cx,bpb.nls ; если номера секторов
jb in_range ; нормальные то продолжим
; заданные секторы не содержатся на диске
out_of_range:
mov ax,ST_ERROR OR SECTOR_NOT_FOUND
mov request.count,0 ; ничего не было передано
stc ; возвращаемся с ошибкой
ret
; вычислим сегментный адрес начального сектора
in_range:
mov ax,bpb.bps ; количество байт в секторе
mov cl,4 ; разделим на 16 для получения
shr ax,cl ; размера в параграфах
mul request.start ; смещение параграфа относи-
; тельно начала диска
add ax,RPARA ; смещение параграфа относи-
mov dx,cs ; тельно CS
add ax,dx ; абсолютное смещ. параграфа
mov si,ax ; сохраним сегмент в SI
; вычислим и проверим счетчик передаваемых данных
mov ax,bpb.bps ; размер сектора в байтах
mul request.count ; счетчик передачи в байтах
cmp dx,0 ; проверим на корректность
jne out_of_range
; выровняем счетчик в AX для предотвращения перекрытия
mov cx,word ptr request.bufptr