Драйвер виртуального диска
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: новшество, доклад
| Добавил(а) на сайт: Bukovski.
Предыдущая страница реферата | 4 5 6 7 8 9 10 11 12 13 14 | Следующая страница реферата
; На выходе :
; DS:SI - содержит адрес "сектора" в RAM-диске
; ES:DI - содержит адрес блока запроса
; CX - содержит количество передаваемых слов.
; verify PROC NEAR
; проверим что номера начального и конечного секторов лежат в пределах
; от 0 до N. mov cx,request.start ; сравним номер начального cmp cx,bpb.nls ; сектора с количеством 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 cmp ax,0 ; смещение = 0 je set_size neg cx ; остаток = 64K - смещение cmp cx,ax ; буфера jae set_size ; если остаток меньше счетчика, mov ax,cx ; то передаем только остаток
; установим количество передаваемых секторов и счетчик передачи set_size: mov cx,ax ; счетчик передачи в байтах shr cx,1 ; преобразуем в счетчик слов div bpb.bps ; (DX был 0) кол-во секторов mov request.count,ax ; сохраним счетчик передачи
; загрузим в DS:SI адрес блока в памяти mov ds,si xor si,si
; установим направление передачи и вернемся без ошибок cld clc ret verify ENDP
;
IFDEF DEBUG
INCLUDE biosio.asm
PAGE
;
; ************ КОД И ДАННЫЕ ДЛЯ ОТЛАДКИ *************
;
; Отладочные сообщения
;
NO_COMMAND_msg db 'NO COMMAND',CR,LF,'$'
Рекомендуем скачать другие рефераты по теме: реферат на тему здоровье, курсовик.
Категории:
Предыдущая страница реферата | 4 5 6 7 8 9 10 11 12 13 14 | Следующая страница реферата