
- •Предисловие
- •Введение
- •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.2.2. Команды арифметических операций
Команды данной группы приведены в табл. 2.16. При выполнении команд производится установка признаков OF, SF, ZF, AF, DF, CF в регистре EFLAGS в соответствии с табл. 2.17.
Таблица 2.16
Команды сложения, вычитания (ADD, SUB) и сложения, вычитания с переносом/заемом (ADC, SBB), учитывающие значение признака CF, имеют несколько модификаций для различных вариантов адресации операндов. Отметим, что при операциях, использующих 16- или 32-разрядный операнд, хранящийся в регистре или памяти, и непосредственно заданный 8-разрядный операнд \tr\8, производится его знаковое расширение до разрядности слова или двойного слова.
При выполнении команды сравнения СМР производится вычитание содержимого адресуемых регистров и ячеек памяти без их изменения, и устанавливаются значения признаков в регистре EFLAGS, определяющих результат сравнения. При равенстве операндов устанавливается значение ZF = 1, при неравенстве -ZF = 0. Если при сравнении операндов
без знака уменьшаемое выше (больше) вычитаемого, то устанавливается значение CF = О, если уменьшаемое ниже (меньше) вычитаемого, то CF = 1. Если при сравнении операндов со знаком уменьшаемое больше вычитаемого, то устанавливаются значения SF = OF = 0 или SF = OF = 1; если меньше, то SF = О, OF = 1 или SF = 1, OF = 0.
Для умножения 8-, 16- или 32-разрядных операндов используются одноадресная команда MUL и команда IMUL, имеющая одно-, двух- или трехадресную форму. Команда MUL служит для умножения без знаковых операндов, команда IMUL -для умножения операндов со знаком.
В одноадресных командах MUL и IMUL один из сомножителей и произведение размещаются в аккумуляторе: AL, АХ или ЕАХ в соответствии с разрядностью операндов. Так как разрядность произведения может вдвое превышать разрядность операндов, то для его размещения производится расширение аккумулятора AL -> АХ, АХ -> DX:AX, ЕАХ -> EDX: EAX. При этом 16-разрядное произведение 8-разрядных операндов заносится в AL (младшие разряды), АН (старшие разряды), 32-разрядное произведение - в АХ (младшие разряды), DX (старшие разряды), 64-разрядное произведение - в ЕАХ (младшие разряды), EDX (старшие разряды).
При двух- и трехадресной формах команды IMUL операндами служат 16- или 32-разрядные числа. Один операнд выбирается из регистра, в качестве второго операнда при двухадресной форме служит либо содержимое регистра или адресуемой ячейки памяти, либо непосредственный операнд im. При трехадресной форме содержимое регистра или ячейки памяти является вторым сомножителем, а непосредственный операнд-третьим. Если в качестве непосредственного операнда используется 8-разрядное число im8, то оно преобразуется до заданной разрядности (16 или 32) путем расширения знака. Произведение размещается в 16- или 32-разрядном регистре, указанном в поле операнда. Так как при этом старшие 16-го или 32-го разряда произведения теряются, то после умножения следует проверять значение признака переполнения OF.
При выполнении команд MUL, IMUL признаки OF, CF устанавливаются в единицу, если разрядность результата превышает разрядность регистров, используемых для его размещения. Команды MUL, IMUL различаются условиями установки этих признаков. При выполнении без знакового умножения командой MUL устанавливаются значения OF = CF = 1, если старшая половина произведения не равна нулю, OF = CF = 0, если все разряды старшей половины равны нулю. При выполнении знакового умножения командой IMUL устанавливаются значения OF = CF = 1, если старшая половина произведения не является расширением знака младшей половины, OF = CF = 0, если во всех разрядах старшей половины повторяются значения старшего бита (знака) младшей половины.
Команды деления DIV и IDIV имеют только одноадресную форму, причем разрядность делимого, которое размещается в аккумуляторе с расширением, должна вдвое превышать разрядность делителя (8,16 или 32 разряда). Реализуемое при этом размещение делимого, результата и остатка указано в табл. 2.16. Знак остатка при выполнении команды IDIV устанавливается равным знаку делимого. Дробное частное округляется до целого значения отбрасыванием его дробной части. Если делитель равен нулю или разрядность частного превышает разрядность аккумулятора (AL, АХ или ЕАХ), то выполняется прерывание типа #DE (ошибка деления).
Команды CBW/CWDE и CWD/CDQ осуществляют преобразование хранящегося в аккумуляторе байта (AL), слова (АХ) или двойного слова (ЕАХ) соответственно в одинарное, двойное или четверное слово (16,32 или 64 разряда) путем расширения знакового разряда. При выполнении команд CBW, CWDE расширенный операнд остается в аккумуляторе: AL в АХ или АХ в ЕАХ. При выполнении команд CWD, CDQ расширение АХ, ЕАХ производится в регистры DX или EDX, куда заносится старшая половина (расширенный знак) результата. Команды CBW, CWD реализуются, когда процессор работает в режимах реальных адресов или виртуального 8086 (обработка 16-разрядных слов). Команды CWDE, CDQ выполняются в защищенном режиме (обработка 32-разрядных слов). Эти операции обычно производятся перед выполнением команды IDIV для образования из 8-, 16- или 32-разрядных операндов делимого удвоенной разрядности.
Команды ААА, AAS, AAM, AAD обеспечивают получение правильного результата арифметических операций над неупакованными двоично-десятичными числами (от 0 до 9), значение которых представляется одним байтом. Такое представление чисел используется в коде ASCII (КОИ-7), который в младшей тетраде содержит двоичный код соответствующего десятичного числа (0 - 9), а в старшей тетраде - код 0011. Для получения правильного результата перед обработкой таких чисел в старшей тетраде устанавливается код 0000. Результат арифметических операций над двоично-десятичными числами размещается в ре- гистре АХ. После сложения, вычитания, умножения выполняются команды коррекции ААА, AAS, ДАМ, после чего в младшей тетраде регистра AL образуется двоичный код младшего десятичного разряда результата, а в младшей тетраде регистра АН - двоичный код старшего разряда результата. Например, после умножения чисел 9 и 7, которые в неупакованной двоично-десятичной форме задаются кодами 0000 1001 и 0000 0111, в регистре AL будет содержаться произведение 001111111 =63, которое после коррекции с помощью команды ААМ будет представлено в регистре АХ в следующем виде: (АН) = 00000110, (AL) = 00000111 (соответственно 6 и 3 в двоично-десятичном коде). Команда AAD, в отличие от ААА, AAS, ААМ, выполняется перед командой DIV. При этом двоично-десятичное число, старший десятичный разряд которого расположен в регистре АН, а младший - в регистре AL, преобразуется таким образом, чтобы после команды DIV содержимое AL, АН представляло младший и старший десятичные разряды частного в неупакованной двоично-десятичной форме.
Команды DAA и DAS осуществляют коррекцию результата сложения и вычитания чисел в упакованной двоично-десятичной форме. При этом старшая и младшая тетрады байта содержат двоичные коды старшего и младшего разряда двухразрядного десятичного числа. Например, число 63 в данной форме будет представлено в регистре AL кодом 01100011. После сложения упакованных двоично-десятичных чисел 63=0110 0011 и 18 = 00011000 в регистре AL будет получен код 01111011, который после выполнения команды DAA преобразуется в двоично-десятичную форму 10000001 = 81. При выполнении команд DAA и DAS учитывается значение признака переноса между тетрадами AF. После их выполнения устанавливается AF = 0. Следует отметить, что при использовании двоично-десятичного представления чисел соответствующие команды коррекции должны выполняться и после команд INC, DEC.
Команда NEG изменяет знак операнда, преобразуя его в дополнительный код. Комплексная команда XADD осуществляет обмен содержимым между регистром и регистром или ячейкой памяти, после чего выполняет их сложение, результат которого размещается в регистре или ячейке памяти.
Данная группа команд включает также комплексные команды сравнения/пересылки CMPXCHG, CMPXCHG8B. Команда CMPXCHG производит сравнение содержимого аккумулятора (AL, АХ или ЕАХ) и заданного в команде регистра или ячейки памяти г/т. В случае их равенства устанавливается значение признака ZF = 1, и содержимое регистра или ячейки памяти пересылается в 8-, 16- или 32-разрядный регистр, указанный в команде. В случае неравенства устанавливается значение ZF = 0, и содержимое регистра или ячейки памяти г/т пересылается в аккумулятор AL, АХ или ЕАХ (в зависимости от заданной разрядности). Команда CMPXCHG8B оперирует с 8-байтными (счетверенными) словами. Она сравнивает значение счетверенных слов, хранящихся в паре регистров EDX:ECX и адресованной ячейке памяти. При их равенстве устанавливается значение ZF = 1, и по указанному адресу в ячейку памяти пересылается содержимое пары регистров ECX:EDX. При неравенстве устанавливается значение ZF = 0, и содержимое адресованной ячейки памяти пересылается в пару регистров EDX:ECX. Отметим, что при выполнении команды CMPXCHG производится установка всех признаков в соответствии с результатом сравнения, а при выполнении команды CMPXCHG8B устанавливается толь ко признакZF (см. табл. 2.17).