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

UptoLike

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

126
num dw 0 ; Количество сброшенных экранов
old_int8_off dw ? ; Адрес старого обработчика
old_int8_seg dw ? ; прерывания таймера 8h
old_int5_off dw ? ; Адрес старого обработчика
old_int5_seg dw ? ; прерывания 5h
old_int2F_off dw ? ; Адрес старого обработчика
old_int2F_seg dw ? ; мультиплексного прерывания 2Fh
adr_psp dw ? ; Адрес PSP
vbuf dw 0b000h ; Сегментный адрес видеобуфера
handle dw ? ; Дескриптор файла
buf db 2050 dup(0) ; Буфер для данных экрана
mes db 'Disk error$'
filename db 'filescr&.txt',0 ; Спецификация вых. файла
iniflag db 0 ; Флаг запроса на вывод экрана в файл
outflag db 0 ; Флаг начала вывода в файл
_crit dd ? ; Указатель на флаг активности DOS
; Новый обработчик прерывания 2Fh
new_int2F proc far
cmp ax,0ff00h
jz installed
jmp dword ptr cs:old_int2F_off ; Переход на старый обработчик 2Fh
installed: mov ax,0ffh ; "Программа в памяти"
iret
new_int2F endp
; Новый обработчик прерывания 1ch
new_int8 proc far
push ax
push bx
push cx
push dx
push si
push di
push ds
push es
mov ax,cs
mov ds,ax
cmp iniflag,0
jz exit8 ; Нет запроса
test outflag,0ffh
jnz exit8 ; Файл уже выводится
jnz exit8 ; DOS занята
les bx,_crit
test byte ptr es:[bx],0ffh
jnz exit8 ; DOS занята
; iniflag=1, outflag=0, crit=0
mov outflag,0ffh
                                       126



num                    dw     0       ; Количество сброшенных экранов
old_int8_off           dw     ?       ; Адрес старого обработчика
old_int8_seg           dw     ?       ; прерывания таймера 8h
old_int5_off           dw     ?       ; Адрес старого обработчика
old_int5_seg           dw     ?       ; прерывания 5h
old_int2F_off          dw     ?       ; Адрес старого обработчика
old_int2F_seg          dw     ?       ; мультиплексного прерывания 2Fh
adr_psp                dw     ?       ; Адрес PSP
vbuf                   dw     0b000h          ; Сегментный адрес видеобуфера
handle                 dw     ?       ; Дескриптор файла
buf                    db     2050 dup(0) ; Буфер для данных экрана
mes                    db     'Disk error$'
filename               db     'filescr&.txt',0 ; Спецификация вых. файла
iniflag        db      0      ; Флаг запроса на вывод экрана в файл
outflag                db     0       ; Флаг начала вывода в файл
_crit                  dd     ?       ; Указатель на флаг активности DOS
; Новый обработчик прерывания 2Fh
new_int2F proc far
         cmp ax,0ff00h
         jz    installed
         jmp dword ptr cs:old_int2F_off ; Переход на старый обработчик 2Fh
installed:     mov ax,0ffh            ; "Программа в памяти"
               iret
new_int2F endp
; Новый обработчик прерывания 1ch
new_int8       proc far
               push ax
               push bx
               push cx
               push dx
               push si
               push di
               push ds
               push es
               mov ax,cs
               mov ds,ax
               cmp iniflag,0
               jz      exit8          ; Нет запроса
               test outflag,0ffh
               jnz     exit8          ; Файл уже выводится
               jnz     exit8          ; DOS занята
               les     bx,_crit
               test byte ptr es:[bx],0ffh
               jnz     exit8          ; DOS занята
; iniflag=1, outflag=0, crit=0
               mov outflag,0ffh