Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
V_ostavsheysya_chasti_etoy_glavy_opisyvaetsya_organizatsia_pamyati_i_adresnogo_prostranstva.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
44.3 Кб
Скачать

3.3.7.1 Каноническая адресация

В 64-битном режиме адрес считается в канонической форме, если адресные биты 63 до самого значительного реализованного бита микроархитектурой установлены либо на все, либо на все нули.

Архитектура Intel 64 определяет 64-битный линейный адрес. Реализации могут поддерживать меньше. Первая реализация процессоров IA-32 с архитектурой Intel 64 поддерживает 48-битный линейный адрес. Это означает, что канонический адрес должен иметь биты с 63 по 48, установленные на нули или единицы (в зависимости от того, является ли бит 47 нулем или одним).

Хотя реализации не могут использовать все 64 бита линейного адреса, они должны проверять биты 63 через самый значительный реализованный бит, чтобы узнать, находится ли адрес в канонической форме. Если ссылка на линейную память не находится в канонической форме, реализация должна генерировать исключение. В большинстве случаев генерируется исключение общей защиты (#GP). Однако в случае явных или подразумеваемых ссылок на стек генерируется ошибка стека (#SS).

Инструкции, которые подразумевают ссылки на стек, по умолчанию используют регистр сегментов SS. К ним относятся PUSH / POPrelated инструкции и инструкции с использованием RSP / RBP в качестве базовых регистров. В этих случаях каноническая ошибка #SS.

Если инструкция использует базовые регистры RSP / RBP и использует префикс переопределения сегмента для указания сегмента без SS, каноническая ошибка генерирует #GP (вместо #SS). В 64-битном режиме в этой ситуации применимы только FS и GS-переопределения. Другие префикс переопределения сегмента (CS, DS, ES и SS) игнорируются. Обратите внимание, что это также означает, что переопределение SS-сегмента, примененное к ссылке на регистр «не стека», игнорируется. Такая последовательность все еще производит #GP для канонической ошибки (а не #SS).

3.4 Основные регистры выполнения программы

Архитектура IA-32 предоставляет 16 базовых регистров выполнения программ для использования в общем системном и прикладном программировании (см. Рис. 3-4). Эти регистры могут быть сгруппированы следующим образом:

• Регистры общего назначения. Эти восемь регистров доступны для хранения операндов и указателей.

• Регистры сегментов. Эти регистры содержат до шести сегментных селекторов.

• Регистр EFLAGS (статус программы и управление). Отчет регистра EFLAGS о статусе программы

выполняется и позволяет ограничить (уровень прикладной программы) управление процессором.

• Регистр EIP (указатель инструкции). Регистр EIP содержит 32-битный указатель на следующую команду, которая должна быть выполнена.

3.4.1 Регистры общего назначения

Предусмотрены 32-разрядные регистры общего назначения EAX, EBX, ECX, EDX, ESI, EDI, EBP и ESP для хранения следующих элементов:

• Операнды для логических и арифметических операций

• Операнды для расчета адресов

• Указатели памяти

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

Многие инструкции назначают определенные регистры для хранения операндов. Например, строковые инструкции используют содержимое регистров ECX, ESI и EDI в качестве операндов. При использовании сегментированной модели памяти некоторые инструкции предполагают, что указатели в определенных регистрах относятся к определенным сегментам. Например, некоторые инструкции предполагают, что указатель в регистре EBX указывает на ячейку памяти в сегменте DS.

Особое использование регистров общего назначения по инструкциям описано в главе 5 «Сводка инструкций» в этом томе. См. Также: Глава 3, глава 4 и глава 5 Руководства разработчика программного обеспечения для архитектуры Intel® 64 и IA-32, тома 2A, 2B и 2C. Ниже приводится сводка специальных применений:

• EAX - Аккумулятор для данных о операндах и результатах

• EBX - указатель на данные в сегменте DS

• ECX - счетчик для операций с строкой и контуром

• EDX - указатель ввода-вывода

• ESI - указатель на данные в сегменте, на который указывает регистр DS; указатель источника для строковых операций

• EDI - указатель на данные (или получатель) в сегменте, на который указывает ES-регистр; указатель назначения для строковых операций

• ESP - указатель стека (в сегменте SS)

• EBP - указатель на данные о стеке (в сегменте SS)

Как показано на рисунке 3-5, младшие 16 бит регистров общего назначения отображаются непосредственно в набор регистров, найденный в процессорах 8086 и Intel 286, и могут быть указаны с именами AX, BX, CX, DX, BP, SI , DI и SP. На каждый из двух нижних байтов регистров EAX, EBX, ECX и EDX могут ссылаться имена AH, BH, CH и DH (высокие байты) и AL, BL, CL и DL (низкие байты).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]