Ю.Н. Пронкин - Лекции по ЭВМ (2-3 семестры) (972268), страница 4
Текст из файла (страница 4)
5.1BX-(Base - база) – предполагается, что регистр может использоваться для базирования (см. рис.5.2). Но онимеет двоякую роль, так как может хранить как числовые аргументы, так и базы. Его двоякость называетсяасимметрией.Рис. 5.2.Напоминание: mov Dst, SrcDst Srcmov AX, Src1mov DX, Src2add AX, DXУказатель командIP (Instruction pointer)1) Хранит адрес следующей команды2) Адрес следующей команды заносится в IP сразу после декодирования текущей командыАдресные регистрыРегистры индекса (Рис. 5.3.)SI (Source Index)DI (Destination Index)Регистры управления стекомSP (Stack Pointer)BP (Base Pointer)Команды работы со стекомPush SrcРис. 5.3SP Sp – z – добавить в стек(SP) SrcPop DstDst (SP) – взять из стекаSP SP+2Pusha – добавить в стек все регистры общего назначенияPopa (читать ПОП А) – Загрузить из стека –«Pushf – добавить в стек содержимое регистров флагов (PSW)Popf – загрузить PSW с вершины стекаРис.5.4Слово состояния программы (Program Status Word)Мы рассматривали ранее только универсальные флажки, приемлимые всем системам.
Каждая системаможет добавлять свои.Рис 5.5CF (Carry flag) – флаг переносаPF (Paring flag) – флаг паритетаZF (Zero flag) – флаг нулевого результатаSF (Sign flag) – флаг отрицательного результатаOF (Overflow flag) – флаг переносаЛекция №625.09.2010AF (Aux Flag) – вспомогательный флаг переноса. Полный аналог флага CF, только относительно четвертогобита результата (если четвертый бит переполнен, то это фиксируется в третьем бите).Двоично-кодированные десятичные числа.0 = 00002:79 = 0111.10019 = 10012Флаги управления1) DF (Direction Flag) – флаг направления (к примеру для цепочечной команды пересылки данныхmovs)рис.6.1Если DF = 0, то цепочечные команды исполняются в направлении возрастания адресов.
Если DF =0, то цепочечные команды выполняются в направлении убывания адресов. Stol – командаустановки DF; clol – команда сброса DF.2) IF (Interrupt Flag) – флаг прерываний.Концепция прерываний. ,Код прерываний – мы останавливаем процессор, выполняем команду сбольшим приоритетом.Рис.6.2 (историческая идеология –режим регулярного кругового опроса).На старых моделях процессор останавливался примерно каждые 5 секунд, чтобы опросить всеустройства о необходимости выполнения каких-либо команд.
Общее: выполняется сканирование иопрос; разница: кто и когда это делает (в первом это зашито в ОП, для второго это часть семантикимашинных команд)1. Реакция на запросы на прерывание встроена в семантику машинных команд.2. Переход по прерыванию выполняется до начала использования текущей задачи.Рис.6.3Если IF = 0, то переходы по прерываниям запрещены.Если IF = 1, то переходы по прерываниям разрешены.Команды управления флагом IF:1. sti – установить флаг2.
cli – сбросить флаг3) TF (Trace Flag) – флаг трассировкиЕсли TF = 1, то прерывание возбуждается после каждой машинной команды (режим трассировки).Режим работы микропроцессора, дающий возможность для работы отладчика. Команд для работы сфлагом TF нет: изменение состояния TF возможно только путем его записи в стек (см.
Pushf и Popf)Регистры управления памятью (сегментные регистры – Segment Registers)CS (Code Segment) – сегмент кодаDS (Data Segment) – сегмент данныхSS (Stack Segment) – сегмент стека (также именуемый SUPER Segment)ES (Extra Segment) – дополнительный сегмент данныхСегмент – некоторая область памяти, в которой расположена целевая информация.
(логическая единица приразрезании памяти)8086Регистры: 16 битЛиния данных: 16 бит(рис.6.4)Линия адреса: 20 битБазы сегментов (разделенные на 16) хранят адреса сегментов различного типа.Модель формирования исполнительного адресаSR – Segment RegisterSR16 << 4 =+ SR’20Offset (рис.6.5)Рис. 6.4.Рис.6.5.Лекция №72.10.2010Теперь будем говорить, что в SP лежит не полный адрес. К нему необходимо добавить базовый адрес SS:SS: SP – адресация стекаCS: IP – адресация командDS и ES управляют операциями пересылки памяти.Одним из главных видов передачи управления (при надежде на возвращение обратно) являются функции(подпрограммы).Виды передачи управленияРабота с подпрограммамиПодпрограмма; Функция; Процедура (хотя слово «процедура» используется обычно только внутрипрограммы, так там нет необходимости конкретизировать этот вопрос).Имя команды не несет никакого значения.Подпрограмма – p(a, b), но нельзя q = p(a, b)Функция – y = Sin(x)Главная программа, на самом деле, тоже кем-то запускается.
Она вызывается ОС.Рекурсивный вызов (рекурсия) – вариант вызова, когда подпрограмма перезапускает сама себя.RET – выполняет возврат в ОС.Основой для создания рекурсивных вызовов является стековая модель памяти. Единственная проблематакой модели – рекурсивный момент должен быть конечен, иначе в некоторый момент времени стек,использующийся для данной процедуры, закончится.Семантика программы CALLВызовы:1) прямой (адрес явно указан в аргументе команды)2) косвенный (в аргументе стоит ссылка на место, откуда можно забрать адрес команды).Например, в языке С: int **p; (указатель)Если А напрямую ссылается на В, то все хорошо.
Но если А ссылается сначала на С, то необходимо сохранитьСегмент 1, перейти в Сегмент 2, а потом вернуться. Короткий переход – внутрисегментный. Длинныйпереход – межсегментный.И прямой, и косвенный вызовы делятся на короткие и длинные переходы.Шаги команды CALL:1. Сохранение адреса возврата в стеке. Значение указателя стека меняется на величину командногослова.SP SP-2; (SP) CS; SP SP-2; SP IPCS Segment (адрес перехода)IP Offset (адрес перехода)RET – автоматически вытекает из CS и IP.2.
Загрузка адреса перехода из аргумента команды.Семантика команды RET1. Восстановление адреса команды из стека.IP (SP); SP SP+2; CS (SP); IP SP+2;Лекция №806.10.2010В машинном языке нет понятия параметра. Там существует «философия условного места» Перед тем,как вызвать процедуру В, процедура А кладет в некую область параметры, а потом вызывает В. Но этаобласть не контролируется ни А, ни В. То есть, В не знает, что туда необходимо положить, а А не знает, что оттуда будут брать.Как область передачи параметров берется стек.Вызывающая процедура (А)Вызываемая процедура (В)Push pPush q (кладем их в наш стек)proe farpush BPCall BCs и Ip кладутся в стек, как результат Callmov BP, SPmov AX, [BP+8]mov DX, [BP+6]Far – межсегментный вызовadd AX, DXNear – внутрисегментный вызовBP – адрес базыТеперь необходимо начинать подготовку к возвратуpop BPДалее применяем команду RET (описанную в пр.
лекции)RET 4Заканчиваем выполнение процедурыEnd pРеальные Компиляторы настолько суровые, что используют RET вообще без параметра.Прерывание. Программа обработки прерываний.Прерывание дало возможность реагирования на внешние события.При выполнение команды выполняются следующие этапы: 1. Декодирование команды2. Опрос подсистемы прерываний3.
Выполнение командыПрерывания:1) Программные (активируются посредством машинных команд)2) Аппаратные (запрос приходит от аппаратуры)2.1) Внутренние (реагирования на исключительные ситуации внутри процессора,например деление на 0). Отказы на реагирование в этом случае не принимаются.2.2) Внешние. Процессор имеет право не реагировать, если не считает это необходимым.2.2.1) Маскируемые – можно отменить2.2.2) Немаскируемые – отменить нельзяЛекция №99.10.2010Продолжаем разговор о прерыванияхОбщая команда прерыванийint k, где k – номер обработчика прерыванийОднобайтовое прерываниеint ~ int3Прерывания по переполнениюint0 ~ int4, но только если OF=1рис. 9.1Таблица векторов прерыванийРис. 9.2Зарезервированные векторы прерываний(режим реального адреса х86)Вектор 0:ошибка деленияВектор 1:прерывание одношаговой работы(TF=1)Вектор 2:немаскируемое прерываниеВектор 3:команда intВектор 4:команда int0Мы связали некоторые вектора с событиями.
И такимобразом создали маршрутзащиты реакции. Вопрос: зачеммогут понадобится реакции стакими векторами?Подставляем в нашу программу команду с векторами прерываний:Рис. 9.3Рассмотрим MS Dos.Рис . 9.4Наша программа не может работать без ОС – так как она дополняет ее.Семантика прерываний последовательность прерываний1) Сохранение PSW в стеке2) Сброс IF и TF3) Сохранение CS: IP в стеке4) Загрузка адреса перехода по требованию из вектора с №kСемантика CALL1) Сохранение адреса возврата в стеке (для х86 CS: IP)2) Загрузка адреса перехода из аргумента командыРис . 9.5Если TF не сбросить, то трассировка может распространиться на прерываниеПример с сохранением: нажатие клавиши на клавиатуре прерывание на короткое время.Лекция №1016.10.2010Напомним: Последовательность прерываний1.2.3.4.Сохранение PSW в стекеСброс флагов TF и IFСохранение в стеке адреса возврата (CS:IP)Загрузка CS:IPиз вектора прерывания.Рис.
10.1 (Модель обработки прерывания)Команда возврата из прерываний iret1. Восстановление адреса возврата из стекаIP (SP)SP SP + 2CS (SP)SP SP + 22. Загрузка PSW из стекаОбработка внешних аппаратных прерыванийРис. 10.2 (Модели I и II, IIIсвязи ВУ с процессором)I – проблема в синхронизации устройств.II – проблема в обработке прерываний.III – Контроллер прерываний. Эта модель будет основной моделью нашего изучения.Процессор имеет три линии подключений – две входные и одну выходную.INTR – линия запрос на прерыванияINTA – линия подтверждения приема запросаNMI – линия запроса на немаскируемое прерываниеОбслуживание в режиме немаскируемых прерываний1. Схема контроля памяти2. Схема контроля каналов ввода/ вывода3. Сторожевые таймеры (зная приблизительные оценки времени срабатываний, ставим проверку повремени)Каждый контроллер имеет 8 линий подключений.