На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 4 / Обращение к глобальным переменным Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Обращение к глобальным переменным

Как минимум, Ваша TSR, устанавливая личную DTA и становясь текущей программой, будет записывать текущие DTA и PSP. Адрес DTA и адрес текущего PSP записывается в глобальные переменные DOS. К переменным можно обращаться непосредственно, но их размещение может изменяться в зависимости от версии DOS. Для получения и установки адреса DTA и адреса текущего PSP имеются служебные функции BIOS. В этом месте последовательности повторной активации необходимо определить, безопасно ли делать запросы к BIOS и защитить себя от break и критических ошибок. Использование для этих целей служебных функций BIOS позволяет не заботиться о положении этих переменных в конкретной версии DOS.



                  Листинг 4-29. Обращение к глобальным переменным
         ----------------------------------------------------------------

         BKGDTA    DB   80h DUP(0) ; минимальный размер DTA
         BKGPSP    DW   0          ; программа инициализации запоминает
                                   ; здесь значение PSP
         DOSPSP    DW   0          ; здесь мы будем сохранять PSP и DTA
         DOSDTA    DW   0,0        ; прерванной программы
         BKGSetPSP PROC NEAR
                   pushr    ; сохранение изменяемых регистров
                   mov  ah,62h     ; запрос DOS о текущем PSP
                   int  21h
                   mov  DOSPSP,bx  ; сохранение текущего PSP
                   mov  ah,50h     ; сообщение DOS об использовании но-
                                   ; вого PSP
                   mov  bx,BKGPSP
                   int  21h        ; недокументирована
                   por  
                   ret
         BKGSetPSP ENDP
         BKGSetDTA PROC NEAR
                   pushr 
                   mov  ah,2Fh
                   int  21h
                   mov  DOSDTA,bx  ; запись адреса DTA
                   mov  DOSDTA+2,es
                   lea  dx,BKGDTA  ; ds:dx <== новая DTA
                   mov  ah,1ah
                   int  21h
                   popr 
                   ret
         BKGSetDTA ENDP
         ----------------------------------------------------------------

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz