В большинстве случаев 64-разрядный режим использует плоское адресное пространство для кода, данных и стеков. В 64-битном режиме (при отсутствии переопределения размера адреса) размер эффективных вычислений адресов составляет 64 бита. Расчет эффективного адреса использует 64-разрядные базовые и индексные регистры и смещения с расширением знака до 64 бит.
В плоском адресном пространстве 64-битного режима линейные адреса равны эффективным адресам, так как базовый адрес равен нулю. Если сегменты FS или GS используются с ненулевой базой, это правило не выполняется. В 64-битном режиме добавляются эффективные компоненты адреса, а эффективный адрес усекается (см., Например, инструкцию LEA) перед добавлением полной базы 64-битного сегмента. База никогда не усекается, независимо от режима адресации в 64-битном режиме.
Указатель команд расширяется до 64 бит для поддержки смещения 64-битного кода. 64-разрядный указатель инструкции называется RIP. В таблице 3-1 показана взаимосвязь между RIP, EIP и IP.
|
|
Таблица 3-1. Размеры указателя команд
Биты 63:32 | Биты 31:16 | Биты 15:0 | |
16-битный указатель команд | Не изменено | IP | |
32-битный указатель команд | Нулевое расширение | EIP | |
64-битный указатель команд | RIP |
Как правило, перемещения и немедленные действия в 64-битном режиме не распространяются на 64 бита. Они по-прежнему ограничены 32 битами и расширенными знаками при вычислении эффективных адресов. Однако в 64-битном режиме поддерживается поддержка 64-битного смещения и немедленных форм инструкции MOV.
Все 16-битные и 32-разрядные вычисления адресов в режиме IA-32e с нулевым расширением для формирования 64-разрядных адресов. Вычисления адресов сначала усекаются до эффективного размера адреса текущего режима (режим 64-бит или режим совместимости), как переопределенный любым префиксом размера адреса. Затем результат будет равен нулю - до полной ширины 64-битного адреса. Из-за этого 16-разрядные и 32-разрядные приложения, работающие в режиме совместимости, могут получить доступ только к низким 4 ГБ эффективных адресов с 64-битным режимом. Аналогично, 32-разрядный адрес, сгенерированный в 64-битном режиме, может получить доступ только к низким 4 ГБ эффективных адресов 64-битного режима.