Изучение основных принципов организации и обслуживания аппаратных прерываний в ОС DOS и QNX, страница 7

main:

      call  dispdate

      ;сохраняем адрес старого обработчика (прерывание №8, от таймера)

      mov   ax, 035 by 9

      int   021

      mov w       old_addr, bx

      mov w old_addr+2, es

      ;загружаем адрес нового обработчика (прерывание №8, от таймера)

      lea   dx, klavIsr

      mov   ax, 025 by 9

      int   021  

      ;ждем нажатия клавиши Esc

wait_esc:

      cmp   flag, 1

      jne   wait_esc

      ;восстанавливаем старый обработчик

      lds   dx, old_addr

      mov   ax, 025 by 9

      int   021

      int   020

;собственный обработчик

klavIsr:

      push  ax, ds, es

      in    al, 60h

      cmp   al, 1

      jne   ch_time

      mov   flag, 1

      jmp   IsrEnd

ch_time:

      cmp   al, 20

      jne   IsrEnd

      call  disptime

IsrEnd:

      pop   ax, ds, es

      ;переход на системный обработчик (cs - нужно??..)

      cs jmp      old_addr

disptime:

      ;читаем часы

      mov   al, 4

      out   70h, al

      in    al, 71h

      ;печатаем часы

      print_sm 20, al

      print 24, ':'

      ;читаем минуты

      mov   al, 2

      out   70h, al

      in    al, 71h

      ;печатаем минуты

      print_sm 26, al

      print 30, ':'    

      ;читаем секунды

      mov   al, 0

      out   70h, al

      in    al, 71h

      ;печатаем секунды

      print_sm 32, al  

      ret

dispdate:

      ;читаем день

      mov   al, 7

      out   70h, al

      in    al, 71h

      ;печатаем день

      print_sm 0, al

      print 4, '.'

      ;читаем месяц

      mov   al, 8

      out   70h, al

      in    al, 71h

      ;печатаем месяц

      print_sm 6, al

      print 10, '.'    

      ;читаем год

      mov   al, 9

      out   70h, al

      in    al, 71h

      ;печатаем год

      print_sm 12, al  

      ret

Результаты испытаний:

До нажатия на кнопку t:

После нажатия на кнопку t:

4. Выводы.

В данной лабораторной работе были исследованы возможности обработки аппаратных прерываний в операционных системах DOS и QNX. Были разработаны программы, использующие прерывания от таймера и клавиатуры, была рассмотрена возможность маскирования прерываний. Все требуемые программы были разработаны как на языке C для ОС QNX, так и на языке Assembler ОС DOS.