- •Домашняя контрольная работа по дисциплине «Микропроцессоры»
- •1. Электронная система на «жесткой логике» (структурная схема, достоинства, недостатки, область применения).
- •2. Классификация мп по числу одновременно выполняемых программ.
- •3. Микрокомпьютеры (конструктивное исполнение, системная шина контроллера, возможность подключения внешних устройств, область применения).
- •4. Описать назначение выводов m/io, dt/r мп к1810вм86
- •5. Структура мп к1810вм86
- •7. Реализация конвейера. Основные стадии обработки машинных команд.
- •8. Сегментация памяти, ее назначение, вычисление адреса в процессорах Pentium, к какому объему памяти позволяет обратиться такой режим.
- •1 Масштабирование индекса возможно только при 32-битной адресации
- •9. Найти значение физического адреса ячейки памяти [ds:si], если базовый адрес сегмента данных равняется 65abcdh, а содержимое регистра si–f789h
- •10. Назначение входа intr мп1810вм86. Какие прерывания подаются на этот вход и как они обрабатываются мп.
7. Реализация конвейера. Основные стадии обработки машинных команд.
Разработчики архитектуры компьютеров издавна прибегали к методам проектирования, известным под общим названием "совмещение операций", при котором аппаратура компьютера в любой момент времени выполняет одновременно более одной базовой операции. Этот общий метод включает два понятия: параллелизм и конвейеризацию. Хотя у них много общего и их зачастую трудно различать на практике, эти термины отражают два совершенно различных подхода. При параллелизме совмещение операций достигается путем воспроизведения в нескольких копиях аппаратной структуры. Высокая производительность достигается за счет одновременной работы всех элементов структур, осуществляющих решение различных частей задачи.
Конвейеризация (или конвейерная обработка) в общем случае основана на разделении подлежащей исполнению функции на более мелкие части, называемые ступенями, и выделении для каждой из них отдельного блока аппаратуры. Так обработку любой машинной команды можно разделить на несколько этапов (несколько ступеней), организовав передачу данных от одного этапа к следующему. При этом конвейерную обработку можно использовать для совмещения этапов выполнения разных команд. Производительность при этом возрастает благодаря тому, что одновременно на различных ступенях конвейера выполняются несколько команд. Конвейерная обработка такого рода широко применяется во всех современных быстродействующих процессорах.
Для иллюстрации основных принципов построения процессоров будем использовать простейшую архитектуру, содержащую 32 целочисленных регистра общего назначения (R0,...,R31), 32 регистра плавающей точки (F0,...,F31) и счетчик команд PC. Будем считать, что набор команд нашего процессора включает типичные арифметические и логические операции, операции с плавающей точкой, операции пересылки данных, операции управления потоком команд и системные операции. В арифметических командах используется трехадресный формат, типичный для RISC-процессоров, а для обращения к памяти используются операции загрузки и записи содержимого регистров в память.
Выполнение типичной команды можно разделить на следующие этапы:
выборка команды - IF (по адресу, заданному счетчиком команд, из памяти извлекается команда);
декодирование команды / выборка операндов из регистров - ID;
выполнение операции / вычисление эффективного адреса памяти - EX;
обращение к памяти - MEM;
запоминание результата - WB.
8. Сегментация памяти, ее назначение, вычисление адреса в процессорах Pentium, к какому объему памяти позволяет обратиться такой режим.
Память для 32-разрядных процессоров 80x86 подразделяется на байты (8 бит), слова (16 бит), двойные слова (32 бит). Слова записываются в двух смежных байтах, начиная с младшего. Адресом слова является адрес его младшего байта. Двойные слова записываются в четырех смежных байтах, опять-таки начиная с младшего байта, адрес которого и является адресом двойного слова.
Более крупными единицами являются страницы и сегменты. Память может логически организовываться в виде одного или множества сегментов переменной длины (в реальном режиме — фиксированной).
Сегменты могут выгружаться на диск и по мере необходимости с него подкачиваться в физическую память. Кроме сегментации, в защищенном режиме возможно разбиение (Paging) логической памяти на страницы размером 4 Кбайт, каждая из которых может отображаться на любую область физической памяти. Начиная с 5-го поколения, появилась возможность увеличения размера страницы до 4 Мбайт. Сегментация и разбиение на страницы могут применяться в любых сочетаниях. Сегментация является средством организации логической памяти, используемым на прикладном уровне. Разбиение на страницы применяется на системном уровне для управления физической памятью.
Применительно к памяти различают три адресных пространства: логическое, линейное и физическое. Основным режимом работы 32-разрядных процессоров считается защищенный режим, в котором работают все механизмы преобразования адресных пространств .
Формирование адреса памяти 32-разрядных процессоров в защищенном режиме
Логический адрес, также называемый виртуальным, состоит из селектора сегмента (в реальном режиме – просто адреса сегмента) и эффективного адреса называемого также смещением (offset). Эффективный адрес формируется суммированием компонентов base, index, displacement с учетом масштаба scale. Поскольку каждая задача может иметь до 16 К селекторов, а смещение, ограниченное размером сегмента, может достигать 4 Гбайт, логическое адресное пространство для каждой задачи может достигать 64 Тбайт. Все это пространство виртуальной памяти в принципе доступно программисту (при условии поддержки со стороны операционной системы). Блок сегментации транслирует логическое адресное пространство в 32-битное пространство линейных адресов. Линейный адрес образуется сложением базового адреса сегмента с эффективным адресом. Базовый адрес сегмента в реальном режиме образуется умножением содержимого используемого сегментного регистра на 16 (как и в 8086). В защищенном режиме базовый адрес загружается из дескриптора, хранящегося в таблице, по селектору, загруженному в используемый сегментный регистр. 32-битный физический адрес памяти образуется после преобразования линейного адреса блоком страничной переадресации. Он выводится на внешнюю шину адреса процессора. В простейшем случае (при отключенном блоке страничной переадресации) физический адрес совпадает с линейным. Включенный блок страничной переадресации осуществляет трансляцию линейного адреса в физический страницами размером 4 Кбайт (для старших поколений процессоров также возможны страницы размером 2 или 4 Мбайт). Блок обеспечивает расширение разрядности физического адреса процессоров шестого поколения до 36 бит. Блок переадресации может включаться только в защищенном режиме.
Для обращения к памяти процессор (совместно с внешней схемой) формирует шинные сигналы MEMWR# (Memory Write) и MEMRD# (Memory Read) для операций записи и чтения соответственно. Шина адреса разрядностью 32 бита позволяет адресовать 4 Гбайт физической памяти, но в реальном режиме доступен только 1 Мбайт, начинающийся с младших адресов.
В реальном режиме адресации памяти обеспечивается совместимость с процессором 8086, который своей 16-разрядной адресной шиной охватывает пространство физической памяти в 1 Мбайт. Для совместимости с 80286 32-разрядные процессоры повторяют его ошибку, связанную с переносом, возникающим при сложении адреса сегмента с эффективным адресом. При вычислении физического адреса (рис. 6.8) возможно возникновение переноса, который вызовет появление единицы на линии А20 шины адреса. Максимальное значение адреса в реальном режиме 1OFFEF достигается при Seg=FFFFh и E4=FFFFh. Для обеспечения полной программной совместимости с 8086 в PC используется вентиль Gate À20, принудительно обнуляющий бит А20 системной шины адреса. Вентиль в PC управляется через программно-управляемый бит контроллера клавиатуры 8042 или более быстрым способом (Gate À20 Fast Control), определяемым чипсетом системной платы. В реальном режиме размер сегмента фиксирован — как и у 8086, он составляет 64Кбайт (FFFFh). Попытка использования эффективного адреса, выходящего за границу сегмента, при 32-битной адресации вызывает исключение #GP. При 16-битной адресации при вычислении эффективного адреса возможный перенос в разряд А16 игнорируется и сегмент «сворачивается в кольцо» (как и в 8086). Средства контроля следят и за переходом через границу сегмента во время обращения по «приграничному» адресу. При попытке адресации к слову, имеющему смещение FFFFh, или двойному слову со смещением FFFDh-FFFFh(их старшие байты выходят за границу сегмента), или выполнения инструкции, хотя бы один байт которой не умещается в данном сегменте, процессор вырабатывает исключение #GP.
При попытке выполнения инструкции сопроцессора (ESCAPE) с операндом памяти, не умещающимся в сегменте, вырабатывается исключение 9 —Processor Extension Segment Overrrun Interrupt (только для 80386).
Формирование физического адреса памяти процессором 8086/8088
Система команд 32-разрядных процессоров предусматривает 11 режимов адресации. При этом только в двух случаях операнды не связаны с памятью. Это операнд-содержимое регистра, которое берется из любого 8-, 16- или 32-битного регистра процессора, и непосредственный операнд (8, 16 или 32 бит), который содержится в самой команде. Остальные девять режимов так или иначе обращаются к памяти.
При обращении к памяти эффективный адрес вычисляется с использованием следующих компонентов:
• Смещение (Displacement или Disp) — 8-, 16- или 32-битное число, включенное в команду.
• База (Base) — содержимое базового регистра. Обычно используется для указания на начало некоторого массива.
• Индекс (Index) — содержимое индексного регистра. Обычно используется для выбора элемента массива.
• Масштаб (Scale) — множитель (1, 2, 4 или 8), указанный в коде инструкции. Этот элемент используется для указания размера элемента массива, доступен только при 32-битной адресации. Эффективный адрес вычисляется по формуле
ЕА = Base + Index х Scale + Disp
Отдельные слагаемые в этой формуле могут отсутствовать.
Процессор может работать с 32- или 16-битной адресацией, 16-битная адресация работает так же, как и в процессорах 8086 и 80286, при этом в качестве компонентов адреса используются младшие 16 бит соответствующих регистров. При 32-битной адресации используются расширенные 32-разрядные регистры и применяются дополнительные режимы с масштабированием индекса.
В реальном режиме по умолчанию используется 16-битная адресация, но с помощью префикса изменения разрядности адреса (Address Length Prefix) для текущей инструкции можно переключиться на 32-битную. При этом появляются дополнительные возможности адресации (масштабирование), но вычисляемое значение эффективного адреса все равно не может преодолеть 64-килобайтный барьер — при попытке обратиться по такому эффективному адресу генерируется исключение #GP General Protection Fault.
В защищенном режиме адресация по умолчанию определяется битом D дескриптора используемого кодового сегмента: при D=0 — 16 бит, при D=1 — 32 бита. Префикс разрядности адреса переключает разрядность для текущей инструкции на противоположную.
Режим |
Адрес |
Прямая адресация (Direct Mode) |
EA=Disp |
Косвенная регистровая адресация(Register IndirectMode) |
EA=Base |
Базовая адресация (Base Mode) |
EA=Base+Disp |
Индексная адресация (Index Mode) |
EA=Index+Disp |
Масштабированная индексная адресация (Scaled Index Mode) |
EA=Scale*Index+Disp1 |
Базово-индексная адресация (Based-Index Mode) |
EA=Base+Index |
Масштабированная базово-индексная адресация(Based Scaled Index Mode) |
EA=Base+Scale*Index1 |
Базово-индексная адресация со смещением (Based-Index Mode with Displacement) |
EA=Base+Index+Disp |
Масштабированная базово-индексная адресация со смещением (Based Scaled Index Mode with Displacement) |
EA=Base+Scale*Index+Disp1 |
Режимы адресации памяти 32-разрядных процессоров
