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

UptoLike

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

146
; Обработка команд DOS
; Команда 0: Инициализация
initialization: call bell1 ; Включение звука
call initial ; Вывод сообщения
push cs
pop dx ; DX = CS
; Определение конца RAM-диска
lea ax,cs:start_disk ;Отн.нач.адр.RAM-диска
mov cl,4 ; Деление на 16
ror ax,cl ; Отн.нач.параграф RAM-диска
add dx,ax ; Абсолютн. нач. парагр. диска
mov cs:disk,dx ;Сохранение абс. нач. параграфа
add dx,ram_par ; + размер диска в параграфах
; Возврат в DOS адреса конца
mov es:[bx].rh0_brk_ofs,0 ; Смещение = 0
mov es:[bx].rh0_brk_seg,dx ; Семент
; Возврат числа устройств в блоковом устройстве
mov es:[bx].rh0_nunits,1 ; 1 диск
; Возврат адреса ВРВ (одного)
lea dx,bpb_ptr ; Адрес указателя
mov es:[bx].rh0_bpb_tbo,dx ; Смещение
mov es:[bx],rh0_bpb_tbs,cs ; Сегмент
; Инициализация загрузочной записи, FAT и каталога
push ds ; CALC портит DS
mov cs:start,0 ; Нач. сектор = 0
mov ax,cs:res_cnt ; Кол-во зарезерв. сект.
mov cs:total,ax ; Кол-во передав. сект.
call calc ; Вычисл. физич. параметров
mov al,0 ; Чем заполнять
push ds ; DS – начало RAM-диска
pop es
mov di,si ; DI = SI = 0
rep stosb ; Заполн. зарезерв. сект. нулями
pop ds ; Восстановление DS = CS
; Загрузочная запись
mov es,cs:disk ; Начальный сегмент диска
xor di,di
lea si,cs:boot_rec ;Смещение загруз. записи
mov cx,30 ;Кол-во копируемых байтов
rep movsb ;Копирование
; Создать 1 FAT
mov cs:start,1 ; Логич. сектор 1
mov cs:total,1 ; Не имеет значения
call calc ; Установка DS:SI
mov ds:word ptr [si],0feffh ;Зап. в FAT дес криптора
mov ds:word ptr 1[si],0ffffh ; носи теля FEh и 5 байтов FFh
mov ds:word ptr 3[si],0ffffh
call bell2 ; Выключение звука
; Восстановление ES:BX
mov ax,cs:rh_seg
                                         146



; Обработка команд DOS
; Команда 0: Инициализация
initialization: call bell1 ; Включение звука
                call initial ; Вывод сообщения
                push cs
                pop dx       ; DX = CS
; Определение конца RAM-диска
                lea  ax,cs:start_disk      ;Отн.нач.адр.RAM-диска
                mov cl,4                   ; Деление на 16
                ror  ax,cl                 ; Отн.нач.параграф RAM-диска
                add dx,ax                  ; Абсолютн. нач. парагр. диска
                mov cs:disk,dx             ;Сохранение абс. нач. параграфа
                add dx,ram_par             ; + размер диска в параграфах
; Возврат в DOS адреса конца
                mov es:[bx].rh0_brk_ofs,0         ; Смещение = 0
                mov es:[bx].rh0_brk_seg,dx        ; Семент
; Возврат числа устройств в блоковом устройстве
                mov es:[bx].rh0_nunits,1          ; 1 диск
; Возврат адреса ВРВ (одного)
                lea  dx,bpb_ptr                   ; Адрес указателя
                mov es:[bx].rh0_bpb_tbo,dx        ; Смещение
                mov es:[bx],rh0_bpb_tbs,cs        ; Сегмент
; Инициализация загрузочной записи, FAT и каталога
                push ds                           ; CALC портит DS
                mov cs:start,0                    ; Нач. сектор = 0
                mov ax,cs:res_cnt                 ; Кол-во зарезерв. сект.
                mov cs:total,ax                   ; Кол-во передав. сект.
                call calc           ; Вычисл. физич. параметров
                mov al,0            ; Чем заполнять
                push ds             ; DS – начало RAM-диска
                pop es
                mov di,si           ; DI = SI = 0
                rep  stosb         ; Заполн. зарезерв. сект. нулями
                pop ds              ; Восстановление DS = CS
; Загрузочная запись
                mov es,cs:disk      ; Начальный сегмент диска
                xor  di,di
                lea  si,cs:boot_rec        ;Смещение загруз. записи
                mov cx,30                  ;Кол-во копируемых байтов
                rep  movsb                 ;Копирование
; Создать 1 FAT
                mov cs:start,1             ; Логич. сектор 1
                mov cs:total,1             ; Не имеет значения
                call calc                  ; Установка DS:SI
                mov ds:word ptr [si],0feffh       ;Зап. в FAT дес криптора
                mov ds:word ptr 1[si],0ffffh      ; носи теля FEh и 5 байтов FFh
                mov ds:word ptr 3[si],0ffffh
                call bell2                        ; Выключение звука
; Восстановление ES:BX
                mov ax,cs:rh_seg