ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 154
- 155
- 156
- 157
- 158
- …
- следующая ›
- последняя »