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

UptoLike

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

156
в процессе работы драйвера содержимое этих регистров может быть
испорчено.
Следует следить за тем, чтобы локальные процедуры не портили
регистры, используемые драйвером
в локальных процедурах используемые регистры лучше сохранит
Следует сохранять регистры перед вызовом функций BIOS
например, прерывание int 10h BIOS портит регистры BP, SI, D
Следует внимательно следить за соответствием PUSH – POP.
Для
отладки можно реализовать каждую команду драйвера в виде
отдельной COM-программы. При этом для отладки можно использовать
утилиту DEBUG.
Основные трудности возникают при отладке команды
инициализации. DOS вызывает драйвер с этой командой сразу после
загрузки драйвера. Для ее отладки можно использовать отладочные
процедуры.
Организация отдельного стека
Системный стек содержит всего около 20 слов, поэтому
особенно на
него рассчитывать нельзя. Для организации своего стека следует сделать
следующее:
сохранить SS и SP в переменных
установить SS и SP на стек внутри драйвера
stack_pnt dw ? ; Старый указатель стека
stack_seg dw ? ; Старый сегмент стека
newstack db 100h dup(?) ; 256 байтов нового стека
newstack_top equ $-2 ; Вершина нового стека
; Переключение на новый стек
new_stack proc near
cli ; Запрещение прерываний на всякий случай
mov cs:stack_pnt,sp ; Сохранение старого SP
mov cs:stack_seg,ss ; Сохранение старого SS
mov ax,cs ; Взять текущий сегмент кода
mov ss,ax ; Установить новый сегмент стека
mov sp,newstack_top ; Установить указатель стека
sti ; Разрешение прерывания
ret
new_stack endp
; Переключение на старый стек
old_stack proc near
cli
mov ss,cs:stack_seg
mov sp,cs:stack_pnt
sti
ret
old_stack endp
                                     156



   − в процессе работы драйвера содержимое этих регистров может быть
      испорчено.
• Следует следить за тем, чтобы локальные процедуры не портили
   регистры, используемые драйвером
   − в локальных процедурах используемые регистры лучше сохранит
• Следует сохранять регистры перед вызовом функций BIOS
   − например, прерывание int 10h BIOS портит регистры BP, SI, D
• Следует внимательно следить за соответствием PUSH – POP.
      Для отладки можно реализовать каждую команду драйвера в виде
отдельной COM-программы. При этом для отладки можно использовать
утилиту DEBUG.
      Основные    трудности     возникают   при    отладке    команды
инициализации. DOS вызывает драйвер с этой командой сразу после
загрузки драйвера. Для ее отладки можно использовать отладочные
процедуры.

      Организация отдельного стека
     Системный стек содержит всего около 20 слов, поэтому особенно на
него рассчитывать нельзя. Для организации своего стека следует сделать
следующее:
   − сохранить SS и SP в переменных
   − установить SS и SP на стек внутри драйвера
stack_pnt        dw ? ; Старый указатель стека
stack_seg        dw ? ; Старый сегмент стека
newstack         db    100h dup(?) ; 256 байтов нового стека
newstack_top     equ $-2      ; Вершина нового стека
; Переключение на новый стек
new_stack proc near
            cli  ; Запрещение прерываний на всякий случай
            mov cs:stack_pnt,sp     ; Сохранение старого SP
            mov cs:stack_seg,ss     ; Сохранение старого SS
            mov ax,cs               ; Взять текущий сегмент кода
            mov ss,ax               ; Установить новый сегмент стека
            mov sp,newstack_top ; Установить указатель стека
            sti                     ; Разрешение прерывания
            ret
new_stack endp
; Переключение на старый стек
old_stack   proc near
            cli
            mov ss,cs:stack_seg
            mov sp,cs:stack_pnt
            sti
            ret
old_stack   endp