- •Цель работы:
- •Общие сведения:
- •Многократно запуская программу по команде g100, фиксировать в отчете значения регистров irr и isr главного контроллера.
- •Установить в программе, в команде помеченной меткой м, режим опроса состояния контроллера.
- •Запустить программу по команде g100, зафиксировать в отчете значения слова состояния и регистра isr. При зависании машины выполнить перезагрузку и вернуться в afd. Объяснить причину зависания.
- •Порядок выполнения работы:
- •Загрузить отладчик afd;
- •Прочитать содержимое регистров маски: 21h - главный контроллер, a1h - подчиненный контроллер.
- •Установить маску на системный таймер, не изменяя маски остальных источников прерываний. Код новой маски записать в отчет. Выйти из afd и убедится, что системные часы остановлены.
- •Вернуться в afd.
- •Набрать, начиная с адреса 100, текст программы:
- •Изучить возможности аfd для установки контрольных точек программы (нажать клавиши f4, f5 ). Установить контрольную точку останова на метке l2.
- •Рассчитать адрес вектора прерывания системного таймера следуя формуле :
- •Начиная с адреса 100 набрать текст пр-мы обработки прерываний таймера:
Порядок выполнения работы:
Загрузить отладчик afd;
С помощью HELP <F4> изучить команды отладчика “i”, ”o”;
Команда i<номер порта> (например, i21) чтение содержимого порта
Команда o i<номер порта>,<новое значение> (например, o21,B9) запись значения B9 в порт 21.
Прочитать содержимое регистров маски: 21h - главный контроллер, a1h - подчиненный контроллер.
Расшифровать содержимое регистров, результаты записать в отчет.
Порт 21h – содержимое B8h
Расшифровка:
B8h=10111000
INT 8 = 0
INT 9 = 0
Уровень 2 = 0
INT B = 1
INT C = 1
INT D = 1
INT E = 0
INT F = 1
Прерывания по адресам Bh,Ch,Dh,Fh запрещены.
Порт A1h – содержимое 8Fh
Расшифровка:
8Fh=01111111
INT 70 = 1
INT 71 = 1
INT 72 = 1
INT 73 = 1
INT 74= 1
INT 75 = 1
INT 76 = 1
INT 77 = 0
Установить маску на системный таймер, не изменяя маски остальных источников прерываний. Код новой маски записать в отчет. Выйти из afd и убедится, что системные часы остановлены.
Код новой маски – B9 = 10111001. Команда O21,B9 останавливает системные часы.
Вернуться в afd.
Набрать, начиная с адреса 100, текст программы:
CLI
MOV CX , FFFF
L1: NOP
NOP
LOOP L1 ;при наборе вместо L1 установить фактический адрес
M : MOV AL , 0A ; команда управления
OUT [20] , AL
IN AL , [20] ;чтение регистра IRR или слова состояния
MOV BL , AL ; в BL содержимое регистра IRR или слова состояния
MOV AL , 0B
OUT [20] , AL
IN AL , [20] ;чтение регистра ISR
STI
L2: NOP ; установить контрольную точку останова
Программа позволяет читать внутренние регистры контроллера используя команду OSW1.
Изучить возможности аfd для установки контрольных точек программы (нажать клавиши f4, f5 ). Установить контрольную точку останова на метке l2.
Для установки контрольной точки останова необходимо указать ее адрес (CS:120) в поле Адрес BRK, в поле действие ввести STOP.
Многократно запуская программу по команде g100, фиксировать в отчете значения регистров irr и isr главного контроллера.
В программу был добавлен дополнительный вложенный цикл для того, чтобы получить в регистрах запросы прерывания, иначе на современном компьютере, запрос не успеет появиться.
CLI
MOV CX , FFFF
L1: NOP
MOV DX,FFFF
L3: DEC DX
CMP DX,0
JNZ L3:
NOP
LOOP L1 ;при наборе вместо L1 установить фактический адрес
M : MOV AL , 0A ; команда управления
OUT [20] , AL
IN AL , [20] ;чтение регистра IRR или слова состояния
MOV BL , AL ; в BL содержимое регистра IRR или слова состояния
MOV AL , 0B
OUT [20] , AL
IN AL , [20] ;чтение регистра ISR
STI
L2: NOP ; установить контрольную точку останова
Значение регистров:
ISR = 0000h
Расшифровка 0000 0000
IRR = 0003h
Расшифровка 0000 0011
Был получен запрос прерывания по входам:
IRQ0 - прерывание интервального таймера, возникает 18,2 раза в секунду
IRQ1 - прерывание от клавиатуры. Генерируется, когда пользователь нажимает и отжимает клавиши. Используется для чтения данных из клавиатуры
Установить в программе, в команде помеченной меткой м, режим опроса состояния контроллера.
Запустить программу по команде g100, зафиксировать в отчете значения слова состояния и регистра isr. При зависании машины выполнить перезагрузку и вернуться в afd. Объяснить причину зависания.
В отчете расшифровать содержимое регистров внутренних регистров IRR, ISR и слова состояния контроллера. Формат регистров IRR, ISR соответствует формату регистра маски.
