Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы / 9091_Боброва_лаб_2.docx
Скачиваний:
28
Добавлен:
07.08.2024
Размер:
21 Кб
Скачать
☆

Порядок выполнения работы:

  1. Загрузить отладчик afd;

  2. С помощью HELP <F4> изучить команды отладчика “i”, ”o”;

Команда i<номер порта> (например, i21) чтение содержимого порта

Команда o i<номер порта>,<новое значение> (например, o21,B9) запись значения B9 в порт 21.

  1. Прочитать содержимое регистров маски: 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

  1. Установить маску на системный таймер, не изменяя маски остальных источников прерываний. Код новой маски записать в отчет. Выйти из afd и убедится, что системные часы остановлены.

Код новой маски – B9 = 10111001. Команда O21,B9 останавливает системные часы.

  1. Вернуться в afd.

  2. Набрать, начиная с адреса 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.

  1. Изучить возможности аfd для установки контрольных точек программы (нажать клавиши f4, f5 ). Установить контрольную точку останова на метке l2.

Для установки контрольной точки останова необходимо указать ее адрес (CS:120) в поле Адрес BRK, в поле действие ввести STOP.

  1. Многократно запуская программу по команде 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 - прерывание от клавиатуры. Генерируется, когда пользователь нажимает и отжимает клавиши. Используется для чтения данных из клавиатуры

  1. Установить в программе, в команде помеченной меткой м, режим опроса состояния контроллера.

  2. Запустить программу по команде g100, зафиксировать в отчете значения слова состояния и регистра isr. При зависании машины выполнить перезагрузку и вернуться в afd. Объяснить причину зависания.

В отчете расшифровать содержимое регистров внутренних регистров IRR, ISR и слова состояния контроллера. Формат регистров IRR, ISR соответствует формату регистра маски.

Соседние файлы в папке Лабораторные работы