- •Предисловие
- •Введение
- •1. Системный анализ задачи - выделяются процессы и функции, реализация которых будет возложена на мк или ип.
- •Алгоритмизация процессов и функций - разрабатываются алгоритмы решения задачи.
- •Области использования мк
- •Глава 1основы микропроцессорной техники
- •1.1. Классификация микропроцессоров, основные варианты их архитектуры и структуры
- •1.2. Общая структура и принципы функционирования микропроцессорных систем
- •1.3. Система команд и способы адресации операндов
- •Начиная с младшего байта («Little-Endian»);
- •Начиная со старшего байта («Big-Endian»).
- •1.4. Интерфейсы микропроцессорных систем
- •1.4.1. Основные понятия
- •1.4.2. Магистраль vme
- •Verbs находит широкое применение в:
- •VmEbus обеспечивает наилучшее соотношение цена - производительность для системы в целом и предоставляет практически неограниченные возможности наращивания всех ресурсов.
- •1.5. Шина usb
- •На их основе
- •2.1. Структура и функционирование процессоров intel p6
- •2.1.1. Суперскалярная архитектура и организация конвейера команд
- •2.1.2. Режимы работы процессора и организация памяти
- •2.1.3. Регистровая модель
- •1. Функциональные основные регистры:
- •Iopl -уровень привилегий ввода/вывода, задает максимальную величину уровня привилегий текущей программы, при котором разрешается выполнение команд ввода/вывода;
- •2.3 Режимы работы процессора
- •2.1.4. Внутренняя кэш-память
- •8 Зон по 64 Кбайт, занимающих диапазон адресов 0-7fffFh (512 Кбайт);
- •16 Зон по 16 Кбайт, занимающих диапазон адресов 80000h-8ffffh (256 Кбайт);
- •8 Зон размером от 4 Кбайт до максимального размера физической памяти, которые могут размещаться в любой позиции адресного пространства.
- •2.1.5. Форматы команд и способы адресации
- •Содержимого базового регистра евр (вр) или евх (вх);
- •Содержимого индексного регистра esi (si) или edi (di);
- •Disp команды (см. Рис. 2.11).
- •2.2. Система команд: операции над целыми числами
- •Пересылка данных и адресов
- •Xchg - Обмен между регистрами или памятью и регистром
- •Xlat-Преобразование кодов
- •Imul-Знаковое (целочисленное) умножение аам- ascii-коррекция результата умножения
- •Idiv-Знаковое (целочисленное) деление
- •2.2.1. Команды пересылки
- •2.2.2. Команды арифметических операций
- •2.2.3. Команды логических операций и сдвигов
- •2.2.4. Команды битовых и байтовых операций
- •2.2.5. Команды операций со строками символов
- •2.3. Система команд: операции управления
- •Управление программой
- •Прерывания
- •Int3 - Прерывание в контрольной точке
- •Iret-Возврат из подпрограммы обслуживания прерывания
- •2.3.1. Команды управления программой
- •2.3.3. Команды организации защиты памяти
- •2.3.4. Команды управления процессором
- •2.3.5. Префиксные байты
- •2.4. Система команд: операции над числами с плавающей точкой
- •2.4.3. Команды пересылки данных
- •2.4.4. Команды арифметических операций
- •2.4.6. Команды специальных операций
- •2.4.7. Команды управления fpu
- •Команды преобразования
- •Арифметические команды
- •Inub'- Нахождение меньшего значения (беззнаковые байты) Команды сравнения
- •Команды логических операций
- •2.5.1. Форматы представления данных и выполнение операций
- •2.5.2. Команды пересылки и преобразования данных
- •1 2.5.3. Команды арифметических операций '
- •2.5.4. Команды логических операций и сдвигов
- •2.5.5. Команды сравнения и нахождения максимума/минимума
- •2.6. Система команд: операции sse
- •Команды пересылки данных
- •Команды преобразования данных
- •Арифметические команды
- •Команды нахождения максимума и минимума.
- •Команды преобразования формата чисел.
- •Команды управления
- •2.6.1. Форматы представления данных и выполнение операций
- •2.6.2. Команды пересылки и преобразования данных
- •2.6.3. Команды арифметических операций
- •2.6.6. Команды преобразования формата чисел
- •2.6.7. Команды управления
- •2.6.8. Команды пересылки данных с управлением кэшированием
- •2.7. Работа процессора в защищенном и реальном режимах
- •2.7.1. Сегментация памяти в защищенном режиме
- •2.7.2. Страничная организация памяти
- •2.7.3. Защита памяти
- •2.7.4. Поддержка многозадачного режима
- •2.7.5. Реализация режима виртуального 8086 (v86)
- •2.7.6. Функционирование процессора в реальном режиме
- •2.8. Реализация прерываний и исключений. Обеспечение тестирования и отладки
- •2.8.1. Виды прерываний и исключений, реализация их обслуживания
- •2.8.2. Причины возникновения исключений
- •2.8.3. Средства обеспечения отладки
- •2.8.4. Реализация тестирования и контроля функционирования
- •2.9. Risc-микропроцессоры и risc-микроконтроллеры семейств powerpc (мрс60х, мрс50х)
- •2.9.1. Risc-микропроцессоры семейства мрс60х (powerpc)
- •I (invalid) - недостоверное (аннулированное) содержимое строки.
- •2.9.2. Risc-микроконтроллеры семейства мрс5хх ( power pc)
- •3.1. Общие принципы организации кэш-памяти
- •3.1.1. Понятия тега, индекса и блока
- •3.1.2. Механизм кэш-памяти с прямым отображением данных
- •3.1.3. Механизм кэш-памяти
- •3.1.4. Обновление информации в кэш-памяти
- •1.5. Согласованность кэш-памяти
- •3.2.2. Внутренние кэш-памяти команд и данных
- •3.2.3. Алгоритм кэш-замещений
- •3.2 4. Состояния кэш-памяти данных
- •1.При блокированном чтении:
- •3.2.5. Согласованность внутренних кэш-памятей
- •1) Хранить таблицы страниц и директорий в не копируемой в кэш-память области основной памяти или использовать режим сквозной записи страниц;
- •Процессор может быть заменен (возможен upgraded) без изменения памяти и других подсистем мп вс;
- •Без особого снижения общих характеристик системы могут быть использованы более медленные и менее емкие устройства памяти и устройства ввода/вывода.
- •3.3. Функционирование памяти
- •1) Трансляция сегмента, при которой логический адрес, состоящий из селектора сегмента и смещения (относительного адреса внутри сегмента), преобразуется в линейный адрес.
- •3.3.1. Трансляция сегментов
- •Глобальной таблице дескрипторов (gdt);
- •Локальной таблице дескрипторов (ldt).
- •3.3.2. Адресация физической памяти
- •3.3.4. Комбинирование сегментной и страничной трансляции
- •3.4. Защита памяти
- •3.4.1. Зачем нужна защита?
- •Устанавливает различие между разными форматами дескрипторов;
- •Специфицирует функциональное назначение сегмента.
- •1 Поле предела называют также полем границы.
- •2 Байты сегмента размещены в оп в порядке возрастания адресов памяти или в обратном порядке. Такое размещение также называют соответственно по принципу «младший» и «старший крайний».
- •Cpl (текущий уровень привилегий);
- •Rpl (уровень привилегий источника обращений к сегменту) из селектора, используемый для спецификации сегмента назначения;
- •3)Dpl дескриптора сегмента назначения.
- •Загрузить регистр сегмента данных селектором несогласованного, с разрешением чтения кодового сегмента;
- •Загрузить регистр сегмента данных селектором кодового сегмента, который является согласованным и разрешенным для чтения;
- •Использовать префикс переопределения cs, чтобы прочитать разрешенный для чтения кодовый сегмент, селектор которого уже загружен в cs регистр.
- •Для команды call (или для команды jmp для согласованного сегмента) должны быть выполнены следующие правила привилегий:
- •Привилегированные команды, которые нужны для систем управления вычислительным процессом;
- •Чувствительные команды (Sensitive Instructions), которые используются для ввода/вы вода и для действий, связанных с вводом/выводом.
- •1) Проверка того, имеет ли назначение, специфицированное указателем право доступа к
- •Проверка того, соответствует ли тип сегмента заданному использованию;
- •Проверка указателя на соответствие границе сегмента.
- •Verw (Verify for Writing) - проверка доступности по записи обеспечивает те же самые возможности, что и verr для проверки доступности по чтению.
- •3.4.4. Уровень защиты страниц
- •1) Ограничение адресуемой области; 2) проверка типа страницы.
- •3.4.5. Комбинирование защиты сегментов и страниц
- •Глава 4
- •4.1. Структура современных 8-разрядных микроконтроллеров
- •4.1.1. Модульный принцип построения
- •Tiny avr - mk в 8-выводном корпусе низкой стоимости;
- •Classic avr - основная линия мк с производительностью до 16 mips, Flash память программ объемом до 8 Кбайт и статическим озу данных 128. ..512 байт;
- •Mega avr - мк для сложных приложений, требующих большого объема памяти (Flash пзу до 128 Кбайт), озу до 4 Кбайт, производительностью до 6 mips.
- •4.1.4. Резидентная память мк
- •4.1.5. Порты ввода/вывода
- •Однонаправленные порты, предназначенные в соответствие со спецификацией мк только для ввода или только для вывода информации.
- •Двунаправленные порты, направление передачи которых (ввод или вывод) определяется в процессе инициализации системы.
- •4.1.6. Таймеры и процессоры событий
- •Импульсную последовательность с выхода управляемого делителя частоты fBijs;
- •Внешнюю импульсную последовательность, поступающую на один из входов мк.
- •Простое увеличение числа модулей таймеров; этот путь характерен для части мк компаний «Pfilips» и «Atmel» со структурой msc-51, для мк компаний «Mitsubishi» и «Hitachi».
- •Изменение логического уровня с 0 на 1 (нарастающий фронт сигнала);
- •Изменение логического уровня с 1 на 0 (падающий фронт сигнала);
- •Любое изменение логического уровня сигнала.
2.8.2. Причины возникновения исключений
В предыдущих главах рассмотрены основные случаи, при которых реализуются различные виды исключений (табл. 2.60). Поэтому в данном разделе ограничимся кратким обзором причин их возникновения.
Исключение 0 -деление на нуль (#DE). Возникает при выполнении команд DIV, IDIV, если делитель равен нулю или если результат не может разместиться в операнд-приемник (превышает разрядность приемника).
Исключение 1 - исключение для отладки (#DB). Возникает в пошаговом режиме (при значении признака TF = 1 в регистре EFLAGS) после выполнения каждой команды; при переключении на задачу, в сегменте TSS которой установлен, бит Т=1; при достижении аппаратных точек останова, устанавливаемых с помощью регистров DRO-DR3. В зависимости от типа аппаратной точки останова исключение #DB может обслуживаться как ошибка или как ловушка.
Прерывание 2 - немаскируемое прерывание. Возникает при поступлении внешнего сигнала NMI=1 на вход NMI процессора или приеме соответствующего сообщения по шине APIC. Это прерывание может быть вызвано как программное с помощью команды INT п, где п = 2.
Исключение 3 - исключение программной точки останова (#ВР). Имеет место при выполнении однобайтной команды INT3. Команда INT3 обычно вводится в текст отлаживаемой программы для ее останова и контроля текущих результатов выполнения.
Исключение 4 - переполнение (#OF). Это исключение вызывается с помощью команды INTO. Команда INTO проверяет признак OF в регистре EFLAGS и реализует исключение #OF, если значение этого признака OF = 1.
Исключение 5 - превышение границы массива (#BR). Имеет место при выполнении команды BOUND, если содержимое проверяемого регистра выходит за указанные пределы.
Исключение 6 - недействительный код операции (#UD). Возникает при попытке выполнить команду, в коде которой обнаружено какое-либо из следующих нарушений:
указан неиспользуемый (резервированный) код операции;
используется неправильный способ адресации операнда;
указан код ММХ- или SSE-команд при установленном в регистре CRO значении бита ЕМ = 1;
выбраны коды команд LLDT, SLOT, LTR, SIR, LSL, ARPL, VERR, VERW при работе процессора в реальном режиме или режиме виртуального 8086;
префикс LOCK используется с командой, при выполнении которой не должен производиться захват шины;
выбран код команды UD2, которая служит для вызова подпрограммы обслуживания данного исключения.
Исключение 7- процессор FPU недоступен (#NM). Реализуется в следующих случаях:
при попытке выполнить команду FPU, когда в регистре CRO установлено значение бита ЕМ = 1;
при попытке выполнить FPU-, ММХ- или SSE-команду, когда в регистре CRO установлено значение бита TS = 1;
попытка выполнить команду WAIT или FWAIT, когда в регистре CRO установлено значение битов МР = TS = 1.
Исключение 8 - двойная ошибка (#DF). Реализуется в случае, когда при вызове подпрограммы обслуживания одного исключения выявляется другое. Если процессор не может обработать такие исключения последовательно, то генерируется исключение #DF. При этом в стек заносится код ошибки с нулевым значением всех битов. Чтобы определить исключения, которые могут обрабатываться последовательно, они разбиты на три класса: А, В и С (см. табл. 2.60). В табл. 2.62 указано, какие классы исключений могут обрабатываться последовательно, а какие вызовут исключение #DF. Если при вызове исключения #DF обнаруживается другое исключение, то процессор переходит в отключенное состояние (shutdown).
Исключение 10 - недействительный сегмент TSS (#TS). Это исключение может иметь место при переключении задач. В табл. 2.63 указаны случаи, когда сегмент TSS считается недостоверным. При вызове исключения #TS процессор включает в стек код ошибки. Если в коде ошибки установлен, бит ЕХТ = 1, то это означает, что переключение на неверную задачу произошло не программным путем, а от внешнего прерывания через шлюз задачи. Исключение #TS должно обрабатываться только через шлюз задачи!
Исключение 11 -отсутствие сегмента (#NP). Реализуется при обращении к дескриптору, который имеет значение бита присутствия Р. = 0. Такая ситуация возникает в следующих случаях:
попытка загрузить сегментные регистры CS, DS, ES, GS или FS селекторами дескрипторов, у которых бит Р = 0 (загрузка регистра SS приводит к исключению #SS); этот случай может иметь место при переключении задач;
попытка загрузить регистр LDTR с помощью команды LLDT селектором дескриптора, у которого бит Р = 0;
попытка загрузить регистр TR с помощь команды LTR селектором дескриптора TSS, у которого бит Р = 0;
попытка использовать дескриптор шлюза или дескриптор TSS, для которых бит присутствия Р. = 0
Код ошибки содержит индекс селектора, приведшего к возникновению #NP. Если в коде ошибки установлен, бит ЕХТ = 1, то это означает, что в результате внешнего прерывания произошло обращение к отсутствующему объекту (например, шлюз прерывания ссылается на отсутствующий сегмент). Если в коде ошибки значение бита IDT = 1, то это означает, что индекс кода ошибки ссылается на дескрипторную таблицу ЮТ (например, команда INT n выбирает шлюз, у которого бит присутствия Р = 0).
Исключение 12 - ошибка при обращении к стеку (#SS). Возникает при неправильном обращении к стеку, которое имеет место в следующих ситуациях:
нарушение границы сегмента стека, на который ссылается регистр SS; команды, которые могут вызвать нарушение границы стека: POP, PUSH, CALL, RET, IRET, ENTER и LEAVE, а также команды, у которых один из операндов находится в сегменте стека (например, MOVCX, [ВР+8] или MOV EDX, SS:[EAX+6]);
попытка загрузить сегментный регистр S3 селектором дескриптора, у которого бит присутствия Р = 0; это нарушение может возникнуть: при переключении задач, при переходе с одного уровня привилегий на другой с помощью команды CALL, при возврате с другого уровня привилегий, при выполнении команды LSS, при загрузке регистра SS с помощью команд MOV или POP.
Исключение 13 - нарушение общей защиты (#GP). Возникает во всех случаях нарушения защиты, которые не вызывают исключений #NP, #SS, #PF или #TS. К таким случаям относятся:
нарушение границы сегмента при обращении к сегментам, на которые ссылаются регистры CS, DS, ES, GS и FS;
нарушение границы дескрипторной таблицы (кроме случаев переключения задач и переключения стека);
передача управления невыполняемому сегменту; л "• - ->• •*•»" "• t ->c
запись в сегмент кода или в сегмент данных, для которого разрешено только чтение;
чтение из сегмента кода, для которого разрешено только выполнение;
попытка загрузить сегментный регистр SS селектором сегмента, для которого разрешено только чтение (кроме случая переключения задач);
загрузка сегментных регистров SS, DS, ES, FS или GS селекторами системных дескрипторов;
загрузка сегментных регистров DS, ES, FS или GS селекторами сегментов кода, допускающих только выполнение;
загрузка сегментного регистра SS нуль-селектором или селектором сегмента кода;
загрузка сегментного регистра CS нуль-селектором или селектором сегмента данных;
обращение к памяти с использованием сегментных регистров DS, ES, FS или GS, когда они содержат нуль-селекторы;
переключение на занятую задачу;
переключение на незанятую задачу при выполнении команды IRET;
использование селектора, который ссылается на дескриптор TSS в LDT (дескрипторы TSS могут находиться только в GDT);
нарушение правил защиты сегментов;
превышение длины команды в 15 байт (такая ситуация может возникнуть при использовании излишних префиксов);
загрузка в регистр управления CRO содержимого, в котором бит PG = 1 (страничное преобразование разрешено) при значении бита РЕ = 0 (защищенный режим запрещен).
загрузка в регистр управления CRO содержимого, в котором бит NW = 1 и бит CD - 0;
использование элемента таблицы ЮТ, который не является шлюзом прерывания, шлюзом ловушки или шлюзом задачи;
попытка в режиме виртуального 8086 передать управление обработчику прерывания через шлюз ловушки или шлюз прерывания, когда сегмент кода программы-обработчика имеет DPL > 0;
попытка записать «1» в зарезервированные биты регистры управления CR4;
попытка выполнить привилегированную команду, когда CPL № 0;
попытка записать «1» в зарезервированные биты MSR регистров;
использование шлюза, который содержит нуль-селектор;
выполнение команды /Л/Гп, когда CPL > gDPL выбираемого шлюза;
использование в дескрипторе шлюза селектора, который не ссылается на сегмент команд;
использование в команде LLDT операнда, который не является селектором LDT или имеет значение бита TI = 1;
использование в команде LTR операнда, который является локальным селектором или ссылается на занятую задачу;
попытка использовать нуль-селектор для межсегментных переходов;
выборка процессором, работающим в режиме расширенной адресации (установлено значение бита РАЕ = 1 в регистре CR4), указателя каталога страниц, в зарезервированных полях которого имеются «1».
Исключение 14- ошибка обращения к странице (#PF). Имеет место при страничном преобразовании адресов в следующих случаях:
бит присутствия Р = 0 в указателе таблицы или страницы;
нарушение правил защиты страниц.
Формат кода ошибки для этого исключения (рис. 2.62) содержит биты, которые имеют следующее назначение:
Р = 0, если исключение вызвано отсутствием страницы, Р - 1, если исключение вызвано нарушением правил защиты для страниц;
W/R = 0, если исключение произошло при чтении страницы, W/R = 1, если - при записи на страницу;
U/S = 0, если исключение произошло при работе процессора в режиме супервизора, U/S = 1, если исключение произошло при работе в режиме пользователя;
RSVD = 0, если исключение #PF произошло из-за того, что процессор обнаружил «1» в зарезервированных полях указателя таблицы или указателя страницы; RSVD = 1 при других причинах исключения.
В регистр CR2 процессор заносит линейный адрес, приведший к исключению #PF.
Исключение 16 - исключение FPU (#MF). Реализуется при различных видах ошибок при обработке чисел с плавающей точкой.
Исключение 17 - ошибка выравнивания (#АС). Возникает при нарушении правил выравнивания операндов, которые процессор проверяет, если в регистре EFLAGS установлено значение признака АС = 1, и в регистре CRO бит AM = 1. Исключение реализуется в случае нарушения следующих правил формирования адреса операнда:
адрес должен быть кратным 2 при выборке слова, селектора или 32-разрядного дальнего (far) указателя;
адрес должен быть кратным 4 при выборке двойного слова, числа с плавающей точкой одинарной точности, 48-разрядного дальнего (far) указателя, 32-разрядного ближнего (near) указателя или битовой строки;
адрес должен быть кратным 8 при выборке числа с плавающей точкой двойной точности или числа с плавающей точкой расширенной точности.
Процессор всегда заносит в стек нулевой код ошибки при вызове исключения #АС. д Исключение 18 - машинный контроль (#МС). Обеспечивает контроль работы процессора с помощью специализированных (модельно-специфических) регистров MSR.
Исключение 19 - исключение SSE (#ХМ). Реализуется при различных видах ошибок, возникающих при выполнении SSE-команд.