Аппаратные прерывания
Архитектура компьютера. Распределение памяти
Распределение памяти PC, непосредственно адресуемой процессором, приведено на рис. 5.1 и представляется следующим образом:
Ø 00000h-9FFFFh – Conventional (Base) Memory, 640 Кбайт – стандартная память, доступная DOS и программам реального режима. Иногда верхние 128 Кбайт стандартной памяти (80000h-9FFFFh) называют Extended Conventional Memory;
Ø A0000h- FFFFFh – Upper Memory Area (UMA), 384 Кбайт – верхняя память, зарезервированная для системных нужд;
Ø Память выше 100000h – Extended Memory – дополнительная (расширенная) память, непосредственно доступная только в защищенном режиме.
Рис. 5.1. Распределение памяти PC.
Стандартная память распределяется следующим образом:
Ø 00000h-003FFh – Interrupt Vectors – векторы прерываний (256 двойных слов);
Ø 00400h-004FFh – BIOS Data Area – область переменных BIOS;
Ø 00500h-00xxxh – DOS Area – область DOS;
Ø 00xxxh-9FFFFh – User RAM – память, предоставленная пользователю (до 638 Кбайт).
Стандартное распределение верхней памяти следующее:
Ø A0000h-BFFFFh – Video RAM, 128 Кбайт – видеопамять;
Ø C0000h-DFFFFh – Adapter ROM, Adapter RAM, 128 Кбайт – резерв для адаптеров, использующих собственные модули ROM BIOS или специальное ОЗУ, разделяемое с системной шиной;
Ø E0000h-EFFFFh – свободная область, 64 Кбайт, иногда занятая под System BIOS;
Ø F0000h- FFFFFh – System BIOS, 64 Кбайт, ROM на системной плате;
Ø FD000h- FDFFFh – Extended System Configuration Data – область энергонезависимой памяти, используемая для конфигурирования устройств Plug and Play.
В области UMA практически всегда присутствует графический адаптер. В зависимости от модели он занимает следующие области:
Ø MDA RAM – B0000h- B0FFFh;
Ø CGA RAM – B8000h- BBFFFh;
Ø EGA ROM – C0000h- C3FFFh/C7FFFh;
Ø VGA ROM – C0000h- C7FFFh;
Ø EGA, VGA RAM – A0000h- BFFFFh, в зависимости от видеорежима используются следующие области:
o Graphics – A0000h-AFFFFh;
o Color Text – B8000h-BFFFFh;
o Mono Text – B0000h-B7FFFh;
Формат команд
Программирование на уровне машинных команд – это минимальный уровень, на котором еще возможно программирование компьютера. Каждая машинная команда состоит из двух частей: операционной части, определяющей «что делать», и операндной части, определяющей объекты обработки, т.е. то, «над чем делать».
Важной особенностью машинных команд является то, что они не могут оперировать одновременно с двумя операндами, находящимися в оперативной памяти.
В общем виде команду можно записать так:
{<префикс>} <команда> {<операнд>, <операнд>}
Аппаратные прерывания
Прерывание означает временное прекращение основного процесса вычислений для выполнения некоторых действий, вызываемых работой аппаратуры или программ. Различают четыре источника прерываний:
Ø внутренние прерывания процессора;
Ø немаскируемые внешние прерывания;
Ø маскируемые внешние прерывания;
Ø программно–вызываемые прерывания.
Последние из этого списка в прямом смысле прерываниями не являются, поскольку представляют собой лишь специфический способ вызова процедур – не по адресу, а по номеру в таблице.
При обработке прерывания процессор сохраняет в стеке слово состояния (регистры флагов, кодового сегмента и указатель следующей инструкции), сбрасывает флаг разрешения прерываний IF и вызывает процедуру обслуживания, точка входа в которую описана в таблице прерываний, хранящейся в ОЗУ. Процедура обработки завершается инструкцией IRET, по которой из стека восстанавливаются регистры, и процессор переходит к следующей команде.
Прерывания могут быть и вложенными, если процедура обслуживания установит флаг IF. Но тогда возникает опасность переполнения стека, поскольку каждое «вложение» будет использовать его для своих целей. Переполнение стека также может быть причиной зависаний. Длинные процедуры обработки со сброшенным флагом IF могут привести к потере системного времени, поскольку часы операционной системы используют аппаратные прерывания от таймера.
Немаскируемые прерыванияобрабатываются процессором независимо от состояния флага IF. К ним относятся прерывания, приходящие по линии NMI (немаскируемое прерывание), а также по линии SMI#.
Сигнал на линию NMI приходит от схем контроля паритета памяти, от линии SERR# (системная ошибка) шины PCI. Если во время обработки немаскируемого прерывания появляется сигнал NMI, то вложенного прерывания не будет – повторный вызов обработчика NMI возможен только после исполнения инструкции IRET.
Прерывание SMI возникает от схем чипсета, участвующих в управлении энергопотреблением. Это прерывание имеет наивысший приоритет. Процессор не выполняет вызов процедур, описанный в таблице прерываний, а переходит в режим SMM (режим системного управления). В памяти SMRAM (а не в стеке!) сохраняется контекст процессора, после чего начинается исполнение кода системного управления. В режиме SMM обычные прерывания, в том числе немаскируемые, запрещены. Выход из режима SMM происходит по выполнении завершающей инструкции RSM.
Обработка маскируемых прерыванийможет запрещаться инструкцией DI (командой cli) и разрешаться – EI (sti). Эти прерывания обслуживаются контроллером, программно–совместимым с микросхемой 8259А. Такой контроллер имеет 8 входов запросов прерывания IRQ# от внешних источников и выход запроса INTR, по которому запрос поступает на одноименный вход процессора. При обработке запроса INTR процессор формирует шинный цикл подтверждения прерывания INTA, в котором контроллер передает по шине данных 8-битный вектор прерывания. Этот вектор и является номером, по которому ссылка на процедуру обработки хранится в таблице прерываний.
Таблица 5.1. Аппаратные прерывания
Имя | Вектор | Описание | Приоритет |
NMI | 02h | контроль канала, паритет | |
IRQ0 | 08h | таймер | |
IRQ1 | 09h | клавиатура | |
IRQ2 | 0Ah | каскад IRQ8 – IRQ15 | |
IRQ8 | 70h | CMOS RTS – часы реального времени | |
IRQ9 | 71h | резерв | |
IRQ10 | 72h | резерв | |
IRQ11 | 73h | резерв | |
IRQ12 | 74h | PS/2 мышь | |
IRQ13 | 75h | сопроцессор | |
IRQ14 | 76h | контроллер HDD | |
IRQ15 | 77h | резерв | |
IRQ3 | 0Bh | COM2, COM4 | |
IRQ4 | 0Ch | COM1, COM3 | |
IRQ5 | 0Dh | LPT2 | |
IRQ6 | 0Eh | контроллер FDD | |
IRQ7 | 0Fh | LPT1 |
Для запросов прерывания с шины PCI используются 4 линии запросов прерывания, которые обозначают как INTR A, B, C, D. Эти линии работают по низкому уровню и независимо коммутируются на доступные линии IRQ# с помощью конфигурационных регистров чипсета.
<== предыдущая лекция | | | следующая лекция ==> |
Модель памяти реального режима | | | Арифметические команды |
Дата добавления: 2020-02-05; просмотров: 537;