Сравнение архитектур IA-x86-32 и IA-x86-64

Страницы работы

Фрагмент текста работы

режиме long mode работа сегментации отличается в 64-разрядном режиме и режиме совместимости. В режиме совместимости сегментация работает так же, как и раньше, используя семантику защищённого режима. В 64-разрядном режиме сегментация в общем (но не окончательно) отключена, что создаёт плоское 64-разрядное адресное пространство. 64-разрядный режим трактует базу сегмента как ноль, поэтому логические адреса эквивалентны виртуальным адресам.

Исключение составляют сегменты FS и GS, сегментные регистры которых могут использоваться как дополнительные базовые регистры в адресных вычислениях. Эта особенность облегчает адресацию локальных данных потоков процесса и структур данных операционной системы.

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

Система команд

Размеры операндов в 64-разрядном режиме

Как описано выше, размер операнда по умолчанию в 64-разрядном режиме для большинства команд - 32 бита. Исключение составляют две группы команд:

  • ближние переходы (CALL, RET, JCC, JCXZ, JMP и LOOP);
  • все команды, за исключением дальних переходов, которые неявно ссылаются на указатель стека RSP.

Недействительные команды в 64-разрядном режиме

В 64-разрядном режиме ряд команд стал недействительным:

o  команды работы с двоично-десятичной арифметикой (в двоично-десятичной арифметике при 64-разрядных вычислениях нет надобности): AAA, AAD, AAM, AAS, DAA, DAS;

o  команды дальних переходов по абсолютным адресам (по причине того, что максимальный размер непосредственных значений остался 32 бит): CALL (far), JMP (far), RET (far);

o  некоторые команды работы с неиспользуемыми в 64-разрядном режиме сегментными регистрами: LDS, LES, POP DS, POP ES, POP SS, PUSH DS, PUSH ES, PUSH SS, PUSH CS;

o  ряд редко используемых, ненужных в 64-битном режиме или неоптимальных, с точки зрения исполнения, команд: BOUND, INTO, LAHF, POPA, POPAD, PUSHA, PUSHAD, SAHF, SALC;

o  системные команды, ставшие недействительными в режиме long mode в целом: SYSENTER, SYSEXIT.

В дополнение к этому, как указывалось выше, были переопределены однобайтные команды INC и DEC для использования в качестве REX-префикса.

Освободившиеся коды команд могут быть использованы для очередного расширения системы команд x86 (в рамках x86-64), если в будущем возникнет необходимость этого.

Другие расширения системы команд

В 64-разрядном режиме введена новая команда MOVSXD, расширяющая загружаемое 32-разрядное значение в 64-разрядный регистр. Напомню, беззнаковое расширение производится автоматически при загрузке операнда в младшую 32-битную половину регистра.

В 64-разрядном режиме расширены команды преобразования данных между XMM регистрами и регистрами общего назначения CVTSD2SI/CVTTSD2SI, CVTSS2SI/CVTTSS2SI, CVTSI2SD, CVTSI2SS. Когда размер операнда равен 64 битам, производится преобразование

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
320 Kb
Скачали:
0