
- •Замковец с.В. Левин н.А. Попкова е.Я. Архитетура микропроцессоров
- •Удк 681.3.06
- •Классификация микропроцессоров по архитектуре
- •Архитектура микропроцессоров 80х86
- •2.1. Используемые типы данных
- •2.2. Регистры микропроцессоров
- •2.3. Режимы адресации
- •2.4. Управление стеками
- •2.5. Сегментная организация памяти
- •Система команд микропроцессоров
- •3.2.Команды передачи данных
- •Команды двоичной арифметики
- •Команды десятичной арифметики
- •Логические команды
- •Команды сдвигов
- •Команды обработки бит и байт
- •Команды обработки цепочек
- •Команды передачи управления
- •3.9.1. Команды условных переходов
- •3.9.2 Команды безусловных переходов
- •3.9.3 Команды вызова подпрограмм
- •3.9.4 Команды возврата из подпрограмм
- •4. Прерывания
- •4.1. Прерывания в реальном режиме
- •Защита по привилегиям
- •5.1. Определение уровней привилегий
- •Вычисления с плавающей запятой
- •6.1. Форматы чисел с плавающей запятой
- •6.3. Регистры сопроцессора
- •Mmx архитектура
- •7.1. Форматы представления данных
- •7.2. Арифметика с насыщением
- •7.3. Mmx регистры
- •7.4. Система команд mmx
- •1. Классификация микропроцессоров по архитектуре ... 8
- •2. Архитектура микропроцессоров 80х86 ………………...10
3.9.4 Команды возврата из подпрограмм
Каждая подпрограмма должна содержать команду возврата RET, которая возвращает управление вызывающей подпрограмме. Такая передача управления осуществляется путем извлечения из стека адреса возврата, включенного в стек командой CALL. Сама команда RET не содержит никакой адресной информации, неявно адресуя вершину стека.
В соответствии с типом команды вызова (Near или Far) имеются команды возврата двух типов - внутрисегментные и межсегментные. Команда NEAR RET реализует возврат внутри сегмента: адрес возврата извлекается из стека только в регистр EIP. Действия этой команды заключаются в том, что верхнее слово (или двойное слово) стека передается в регистр EIP, а содержимое регистра ESP увеличивается на 2 или 4. Команда FAR RET извлекает из стека адрес возврата в регистр CS и в регистр EIP.
4. Прерывания
Прерывания – это особые ситуации, которые заставляют процессор приостановить текущую программу и переключиться на выполнение другой, более срочной или важной программы. Причинами прерываний могут быть:
- внешний сигнал по входу маскируемого или немаскируемого прерывания;
- аномальная ситуация, сложившаяся при выполнении конкретной команды и препятствующая нормальному продолжению программы;
- находящаяся в программе команда прерывания INT n.
Первая из указанных причин относится к аппаратным прерываниям, а две другие – к программным. Аппаратные прерывания по времени своего появления непредсказуемы и могут возникнуть в любой момент времени. С помощью аппаратных прерываний осуществляется взаимодействие процессора с периферийными устройствами (клавиатурой, дисками, таймером и т.д.). Реагируя на внешние прерывания, процессор должен идентифицировать его источник, сохранить минимальный контекст текущей программы и переключиться на выполнение специальной программы - обработчик прерываний. Действия обработчика прерываний, называемые обслуживанием прерывания, заключаются в том, чтобы правильно отреагировать на прерывание от конкретного источника: поместить символ с клавиатуры в буфер, считать сектор с диска, произвести инкремент системных часов и т.д. После обслуживания прерывания процессор должен возвратиться к прерванной программе так, как будто прерывания не было.
Программные прерывания, связанные с возникновением аномальных ситуаций, называются особыми случаями (exceptions). Такие случаи возникают, например, при нарушении защиты по привилегиям, превышении границы сегмента, выходе за границы массива, делении на нуль и т.д. Общая реакция процессора на особый случай аналогична представленной реакции на аппаратные прерывания: необходимо сохранить контекст программы, идентифицировать причину особого случая и переключиться на обработчик особого случая (exception handler).
Ниже представлены некоторые типы особых случаев.
Тип 0 – ошибка деления, происходит при переполнении результата деления или при попытке разделить на ноль.
Тип 2 – немаскируемое аппаратное прерывание – это результат наличия сигнала на входном выводе NMI микропроцессора.
Тип 4 – переполнение – при этом типе команда INTO прерывает программу и вызывает обработчик прерывания при условии, что флаг переполнения OF установлен.
Тип 6 – недействительный код операции – происходит при появлении в программе неопределенного кода операции.
Тип 8 – двойная ошибка – активизируется, если по одной и той же команде происходит два отдельных прерывания.
Тип 11 – сегмент отсутствует – этот особый случай происходит, когда бит P в дескрипторе указывает на то, что сегмент отсутствует в оперативной памяти.
Тип 13 – общая защита – происходит при большинстве случаев нарушениях защиты в защищенном режиме.