
- •Методические указания
- •1. Цель и практическое содержание методических указаний
- •2.2. Регистры и стек 32-разрядных процессоров Регистры
- •Регистры общего назначения
- •2.3. Организация памяти
- •Типы адресов
- •Режимы адресации
- •2.4. Прерывания и исключения
- •2.5. Основные понятия Защищенного режима работы процессора
- •2.6. Механизмы страничной переадресации
- •Базовый механизм страничной переадресации.
- •Режим pse
- •Режим pae.
- •2.7. Примеры команд 32-разрядного процессора
- •3. Задание на выполнение работы
- •Варианты задания
- •4. Содержание отчета по курсовой работе
- •5. Оформление пояснительной записки
Режимы адресации
Система команд 32-разрядных процессоров предусматривает 11 режимов адресации. При этом только в двух случаях операнды не связаны с памятью. Это операнд-содержимое регистра, которое берется из любого 8-, 16- или 32-битного регистра процессора, и непосредственный операнд (8, 16 или 32 бит), который содержится в самой команде. Остальные режимы, так или иначе, обращаются к памяти.
При обращении к памяти эффективный адрес вычисляется с использованием следующих компонентов.
Смещение(DisplacementилиDisp) - 8-, 16- или 32-битное число, включенное в команду.
База(Base) - содержимое базового регистра. Обычно используется для указания на начало некоторого массива.
Индекс (Index) - содержимое индексного регистра. Обычно используется для вы6ора элемента массива.
Масштаб(Scale) - множитель (1,2, 4 или 8), указанный в коде инструкции. Этот элемент используется для указания размера элемента массива, доступен только при 32-битной адресаций.
Эффективный адрес вычисляется по формуле:
EA=Base+IndexScale+Disp
Отдельные слагаемые в этой формуле могут отсутствовать. Возможные режимы адресации приведены в таблице 4.
Табл. 4.
Режимы адресации памяти.
Режим |
Адрес |
Прямая адресация (DirectMode) |
EA=Disp |
Косвенная регистровая адресация (Register Indirect Mode) |
EA=Base |
Базовая адресация (BasedMode) |
EA=Base+Disp |
Индексная адресация (IndexMode) |
EA=Index+Disp |
Масштабированная индексная адресация (ScaledIndexMode) |
EA=ScaleIndex+Disp |
Базово-индексная адресация (Based Index Mode) |
EA=Base+Index |
Масштабированная базово-индексная адресация (Based Scaled Index Mode) |
EA=Base+ScaleIndex |
Базово-индексная адресация со смещением (BasedIndexModewithDisplacement) |
EA=Base+Index+Disp |
Масштабированная базово-индексная адресация со смещением (Based Scaled Index Mode with Displacement) |
EA=Base+ScaleIndex+Disp |
Процессор может работать с 32-разрядной или 16-разрядной адресацией. 16-разрядная адресация функционирует так же, как и в процессорах 8086 и 80286, при этом в качестве компонентов адреса используются младшие 16 бит соответствующих регистров. При 32-разрядной адресации применяются расширенные 32-разрядные регистры и дополнительные режимы с масштабированием индекса. Различия 16- и 32-разрядных режимов адресации приведены в таблице 5.
Табл. 5.
Различия режимов адресации.
Компонент |
16-битная адресация |
32-битная адресация |
Базовый регистр |
BX[0:15] илиBP[0:15] |
Любой 32-битный регистр общего назначения |
Индексный регистр
Масштаб Смещение |
SI[0:15] илиDI[0:15]
Нет (всегда 1) 0, 8 или 16 бит |
Любой 32-битный регистр общего назначения, кроме ESP[0:31] 1, 2, 4 или 8 0, 8 или 32 бит |
При обращениях к памяти использование сегментных регистров по умолчанию определяется типом обращения. Для большинства типов обращения при необходимости на время текущей инструкции возможно указание альтернативного сегментного регистра, что обеспечивает префикс замены сегмента (CS:,ES:,SS:,FS: илиGS:) перед кодом инструкции (таблица 6).
Табл. 6.
Использование сегментных регистров при обращении к памяти.
Тип обращения к памяти |
Сегментный регистр | |
по умолчанию |
Альтернативный | |
Выборка команд Стековые операции Строка-приемник Любые другие ссылки на память, кроме тех, которые используют в качестве базового регистр BP[0:15],EBP[0:31] илиESP[0:31] Ссылки на память, использующие в качестве базового регистр BP[0:15],EBP[0:31] илиESP[0:31] |
CS SS ES DS
SS |
Нет Нет Нет CS, ES, SS, FS, GS
CS, DS, ES, FS, GS |
Плоская и многосегментная модели памяти
32-разрядные процессоры позволяют реализовать различные модели памяти. Простейшей организацией памяти в защищенном режиме является плоская модель памяти: вся память представляется единой линейной последовательностью байт. Это классическая реализация фон-неймановской архитектуры - здесь хранятся и данные, и коды. Ответственность за корректное использование памяти ложится целиком на прикладного программиста - он должен заботиться о том, чтобы данные не затерли коды или на них не «наехал» растущий стек. Чтобы получить плоскую модель, достаточно все сегментные регистры загрузить селектором дескриптора, описывающим одну и ту же область памяти, но с разными свойствами для кода, стека и данных. Плоская модель не может быть использована в реальном режиме - в ней не вся адресуемая память будет доступной.
Противоположностью плоской модели является сегментированная защищенная модель памяти для защищенного режима работы процессора. Распределением памяти ведает ОС. Память в данном случае состоит из независимых сегментов. Каждой программе в любой момент предоставляется сегмент кода, сегмент стека и до четырех сегментов данных. Сегменты выбираются селекторами из таблиц, подготовленных ОС.
Некорректные обращения приложений к памяти блокируются системой защиты, которая управляется операционной системой. Принцип хранимости пpoграмм соблюдается, но для записи или чтения кодов в качестве данных требуются некоторые искусственные приемы (переопределение сегментов).
Промежуточное положение занимает модель памяти реального режима. Здесь память организуется в виде сегментов, но независимости и защищенности сегментов нет. Эта модель была вынужденной, она требовалась, чтобы обеспечить возможность адресации к объёму памяти 1 Мбайт при помощи 16-разрядных регистров. Такую модель сих пор используют приложения, написанные для операционных систем реального режима типаMSDOS.