Регистры сегментов в 64-битном режиме — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Регистры сегментов в 64-битном режиме

2017-12-21 211
Регистры сегментов в 64-битном режиме 0.00 из 5.00 0 оценок
Заказать работу

Флаги состояния

Флаги состояния (бит 0, 2, 4, 6, 7 и 11) регистра EFLAGS указывают результаты арифметических команд, таких как инструкции ADD, SUB, MUL и DIV. Функции флага статуса:

CF (бит 0) Флаг переноса - установить, если арифметическая операция генерирует перенос или заимствование из самого важного бита результата; очищается в противном случае. Этот флаг указывает условие переполнения для арифметики без знака. Он также используется в арифметике с несколькими точками.

PF (бит 2) Флаг четности - задайте, если младший байт результата содержит четное число из 1 бита; очищается в противном случае.

AF (бит 4) Флаг вспомогательной несущей - устанавливается, если арифметическая операция генерирует перенос или заимствование из бит 3 результата; очищается в противном случае. Этот флаг используется в двоично-кодированной десятичной (BCD) арифметике.

ZF (бит 6) Флаг нуля - установить, если результат равен нулю; очищается в противном случае.

SF (бит 7) Флаг знака - устанавливается равным самому значащему биту результата, который является битом знака целого числа со знаком. (0 указывает положительное значение, а 1 указывает отрицательное значение.)

OF (бит 11) Флаг переполнения - задайте, если целочисленный результат является слишком большим положительным числом или слишком маленьким отрицательным числом (исключая знаковый бит) для размещения в операнде назначения; очищается в противном случае. Этот флаг указывает условие переполнения для арифметики с подписью-целым числом (два дополнения).

Из этих флагов статуса только флаг CF может быть изменен напрямую, используя инструкции STC, CLC и CMC. Также битовые инструкции (BT, BTS, BTR и BTC) копируют указанный бит в флаг CF.

Флаги состояния позволяют одной арифметической операции создавать результаты для трех разных типов данных: целые числа без знака, целые числа со знаком и целые числа BCD. Если результат арифметической операции рассматривается как целое без знака, флаг CF указывает условие вне диапазона (перенос или заимствование); если обрабатывается как целое число со знаком (номер дополнения 2), флаг OF указывает перенос или заимствование; и если он рассматривается как цифра BCD, флаг AF указывает на перенос или заимствование. Флаг SF указывает знак целого числа со знаком. Флаг ZF указывает либо ноль с подписью или без знака.

При выполнении арифметики с высокой точностью для целых чисел флаг CF используется совместно с инструкцией addwithcarry (ADC) и вычитанием с помощью заимствования (SBB) для распространения переноса или заимствования из одного вычисления в другое.

Инструкции по условию Jcc (переход на код условия cc), SETcc (байт, установленный в коде условия cc), LOOPcc и CMOVcc (условное перемещение) используют один или несколько флажков состояния в качестве кодов условий и проверяют их для ветви, setbyte или условия конечного цикла.

Флаг DF

Флаг направления (DF, расположенный в бите 10 регистра EFLAGS) управляет строковыми инструкциями (MOVS, CMPS, SCAS, LODS и STOS). Установка флага DF приводит к автоматическому декременту строковых инструкций (для обработки строк с высоких адресов на низкие адреса). Очистка флага DF приводит к тому, что строковые инструкции автоматически увеличиваются (строки процесса от низких адресов до высоких адресов).

Инструкции STD и CLD устанавливают и очищают флаг DF, соответственно.

Системные флаги и поле IOPL

Системные флаги и поле IOPL в операционной системе регистрации регистров EFLAGS или исполнительных операциях. Они не должны модифицироваться прикладными программами. Функции системных флагов следующие:

TF (бит 8) Флаг ловушки - установить для включения одношагового режима для отладки; чтобы отключить одношаговый режим.

IF (бит 9) Флаг включения прерывания - управляет ответом процессора на маскируемые запросы прерываний. Установите для ответа на маскируемые прерывания; очищается для блокировки маскируемых прерываний.

IOPL (бит 12 и 13) Поле уровня привилегий ввода-вывода - указывает уровень привилегий ввода-вывода для текущей программы или задачи. Текущий уровень привилегий (CPL) текущей выполняемой программы или задачи должен быть меньше или равен уровню привилегий ввода-вывода для доступа к адресному пространству ввода-вывода. Инструкции POPF и IRET могут изменять это поле только при работе с CPL 0.

NT (бит 14) Вложенный флаг задачи - управляет цепочкой прерываний и вызываемых задач. Установить, когда текущая задача связана с ранее выполненной задачей; очищается, когда текущая задача не связана с другой задачей.

RF (бит 16) Возобновить флаг - управляет ответом процессора на исключения отладки.VM (бит 17) Флаг режима Virtual-8086 - включить режим виртуального 8086; чтобы вернуться в защищенный режим без семантики режима виртуального 8086.

AC (бит 18). Флаг проверки выравнивания (или контроля доступа). Если бит AM установлен в регистре CR0, проверка выравнивания доступа к данным в режиме пользователя разрешена тогда и только тогда, когда этот флаг равен 1. Если бит SMAP установлен в регистре CR4 допускаются явные режимы доступа к данным на страницах пользовательского режима, если и только если этот бит равен 1. См. раздел 4.6 «Права доступа» в Руководстве разработчика программного обеспечения Intel® 64 и IA-32, Том 3А.

VIF (бит 19). Виртуальный флаг прерывания - виртуальное изображение флага IF. Используется вместе с флагом VIP. (Чтобы использовать этот флаг и флаг VIP, расширения виртуального режима активируются установкой флага VME в управляющий регистр CR4.)

VIP (бит 20) Флаг ожидающего ожидания виртуального прерывания - установить, чтобы указать, что прерывание ожидает; очистить, когда прерывание не ожидается. (Программное обеспечение устанавливает и очищает этот флаг, процессор читает его только.) Используетсявместе с флагом VIF.

ID (бит 21). Идентификационный флаг. Способность программы устанавливать или очищать этот флаг означает поддержку инструкции CPUID.

Операнды регистров

Исходными и целевыми операндами могут быть любые из следующих регистров, в зависимости от выполняемой команды:

• 32-разрядные регистры общего назначения (EAX, EBX, ECX, EDX, ESI, EDI, ESP или EBP)

• 16-разрядные регистры общего назначения (AX, BX, CX, DX, SI, DI, SP или BP)

• 8-битные регистры общего назначения (AH, BH, CH, DH, AL, BL, CL или DL)

• регистры сегментов (CS, DS, SS, ES, FS и GS)

• Регистр EFLAGS

• регистры FQU x87 (ST0 - ST7, слово состояния, управляющее слово, слово тега, указатель операнда данных и указатель команд)

• Регистры MMX (от MM0 до MM7)

• Регистры XMM (от XMM0 до XMM7) и регистр MXCSR

• регистры управления (CR0, CR2, CR3 и CR4) и регистры указателей системной таблицы (GDTR,LDTR, IDTR и регистр задач)

• регистры отладки (DR0, DR1, DR2, DR3, DR6 и DR7)

• Регистры MSR

В некоторых инструкциях (например, в инструкциях DIV и MUL) используются операнды quadword, содержащиеся в паре 32-разрядных регистров. Регистровые пары представлены двоеточием, разделяющим их. Например, в паре регистров EDX: EAX, EDX содержит биты высокого порядка, а EAX содержит младшие биты четверного операнда.

Для загрузки и хранения содержимого регистра EFLAGS предусмотрено несколько инструкций (например, инструкции PUSHFD и POPFD) или для установки или очистки отдельных флагов в этом регистре. Другие инструкции (например, инструкции Jcc) используют состояние флагов состояния в регистре EFLAGS в качестве кодов условий для ветвления или других операций принятия решений.

Процессор содержит набор системных регистров, которые используются для управления памятью, обработки прерываний и исключений, управления задачами, управления процессорами и отладочных действий. Некоторые из этих системных регистров доступны с помощью прикладной программы, операционной системы или исполнительной власти с помощью набора системных инструкций. При обращении к системному регистру с системной инструкцией регистр обычно является подразумеваемым операндом команды.

Определение смещения

Смещение части адреса памяти может быть задано непосредственно как статическое значение (называемое смещением) или путем вычисления адреса, состоящего из одного или нескольких из следующих компонентов:

• Смещение - 8-, 16- или 32-битное значение.

• Base - значение в регистре общего назначения.

• Индекс - значение в регистре общего назначения.

• Масштабный коэффициент - значение 2, 4 или 8, умноженное на значение индекса.

Смещение, возникающее в результате добавления этих компонентов, называется эффективным адресом. Каждый из этих компонентов может иметь либо положительное, либо отрицательное (2s дополнение) значение, за исключением коэффициента масштабирования. На рисунке 3-11 показаны все возможные способы объединения этих компонентов для создания эффективного адреса в выбранном сегменте.

Рисунок 3-11. Вычисление смещения (или эффективного адреса)

Использование регистров общего назначения в качестве базовых или индексных компонентов ограничено следующим образом:

• Регистр ESP не может использоваться как индексный регистр.

• Когда в качестве базы используется регистр ESP или EBP, сегмент SS является сегментом по умолчанию. Во всех остальных случаях сегмент DS является сегментом по умолчанию.

Компоненты базы, индекса и смещения могут использоваться в любой комбинации, и любой из этих компонентов может быть NULL. Масштабный коэффициент может использоваться только при использовании индекса. Каждая возможная комбинация полезна для структур данных, обычно используемых программистами на языках высокого уровня и ассемблере.

Следующие режимы адресации предполагают использование общих комбинаций адресных компонентов.

• Смещение⎯Однотолькосмещениепредставляетсобойпрямое (несоизмеримое) смещениекоперанду. Посколькуперемещение кодируется в инструкции, эта форма адреса иногда называется абсолютным или статическим адресом. Он обычно используется для доступа к статически распределенному скалярному операнду.

• База⎯Толькобазапредставляетсобойкосвенноесмещениеоперанда. Поскольку значение в базовом регистре может измениться, оно может использоваться для динамического хранения переменных и структур данных.

• База + смещение ⎯Базовыйрегистрисмещениемогутиспользоватьсявместедлядвухразличныхцелей:

- Как индекс в массив, когда размер элемента не равен 2, 4 или 8 байтам. Компонент смещения кодирует статическое смещение в начале массива. Базовый регистр содержит результаты вычисления для определения смещения для определенного элемента в массиве.

- Для доступа к полю записи: базовый регистр содержит адрес начала записи, а смещение - статическое смещение в поле.

Важным частным случаем этой комбинации является доступ к параметрам в записи активации процедуры. Запись активации процедуры представляет собой фрейм стека, созданный при вводе процедуры. Здесь регистр EBP является лучшим выбором для базового регистра, поскольку он автоматически выбирает сегмент стека. Это компактная кодировка для этой общей функции.

• (Индекс * Масштаб) + Смещение⎯Этотрежим адресов предлагает эффективный способ индексирования в статический массив, когда размер элемента равен 2, 4 или 8 байтам. Перемещение определяет начало массива, индексный регистр содержит индекс требуемого элемента массива, и процессор автоматически преобразует индекс в индекс, применяя масштабный коэффициент.

• Base + Index + Displacement⎯Использованиедвухрегистроввместеподдерживаетлибодвумерныймассив (смещениесодержитадресначаламассива), либоодинизнесколькихэкземпляровмассивазаписей (смещение является смещением к полю в пределах записи).

• Base + (Index * Scale) + Displacement⎯Использованиевсехкомпонентовадресациивместепозволяетэффективноиндексироватьдвумерныймассив, когдаэлементымассиваимеютразмер 2, 4 или 8 байтов.


Поделиться с друзьями:

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.025 с.