Hacker News

Сколько регистров имеет процессор x86-64? (2020)

Сколько регистров имеет процессор x86-64? (2020) Это исследование углубляется во многие аспекты, исследуя их значение и потенциал в Mewayz Business OS.

1 минута чтения

Mewayz Team

Editorial Team

Hacker News

Процессор x86-64 имеет 16 регистров общего назначения, но полный файл регистров намного больше — он включает более 100 архитектурных регистров, если вы включаете регистры с плавающей запятой, SIMD, сегментные, управляющие и специфичные для модели регистры. Понимание полной картины важно независимо от того, пишете ли вы низкоуровневый код, отлаживаете производительность системы или просто удовлетворяете свое любопытство относительно того, что происходит под операционной системой.

Что такое 16 регистров общего назначения в x86-64?

64-битное расширение архитектуры x86 (AMD64/Intel 64) удвоило исходные 8 регистров общего назначения IA-32 до 16. Это рабочие лошадки повседневных вычислений, используемые для арифметики, адресации памяти, аргументов функций и возвращаемых значений.

RAX, RBX, RCX, RDX — исходные регистры «аккумулятора», «базы», «счетчика» и «данных», теперь расширенные до 64-битной ширины.

RSI, RDI — индекс источника и индекс назначения, часто используемые для строковых операций и аргументов функций.

RSP, RBP — указатель стека и базовый указатель, критически важные для управления стеком вызовов и кадрами стека.

От R8 до R15 — восемь совершенно новых регистров, представленных в x86-64, отсутствующих в 32-битной архитектуре, что дает компиляторам гораздо большую гибкость для оптимизации.

Каждый из этих 64-битных регистров обратно совместим, что означает, что вы можете адресовать младшие 32 бита (например, EAX), 16 бит (AX) или даже отдельные 8-битные половины (AH, AL) — наследие дизайна, восходящее к Intel 8086 1978 года.

Сколько всего регистров на самом деле имеет x86-64?

💡 ЗНАЕТЕ ЛИ ВЫ?

Mewayz заменяет 8+ бизнес-инструментов в одной платформе

CRM · Выставление счетов · HR · Проекты · Бронирование · eCommerce · POS · Аналитика. Бесплатный тариф доступен навсегда.

Начать бесплатно →

Это число существенно возрастает, если выйти за рамки регистров общего назначения. Современный процессор x86-64 предоставляет несколько различных классов регистров как программам пользовательского пространства, так и ядру операционной системы:

Регистр RFLAGS — это одиночный 64-битный регистр, в котором хранятся коды условий — нулевой флаг, флаг переноса, флаг переполнения — которые управляют условным ветвлением после каждой арифметической или логической операции. Регистр RIP (указатель инструкции) отслеживает адрес следующей выполняемой инструкции и не подлежит непосредственному изменению большинством инструкций.

Шесть сегментных регистров (CS, DS, ES, FS, GS, SS) остались от модели сегментированной памяти более ранних архитектур x86. В 64-битном режиме большинство из них являются рудиментарными, но FS и GS по-прежнему активно используются операционными системами для указания на структуры данных локального хранилища потока и локального процессора ядра.

Кроме того, в SSE появилось 16 регистров XMM (XMM0–XMM15), каждый шириной 128 бит. В AVX они становятся 256-битными регистрами YMM, а в AVX-512 они расширяются до 512-битных регистров ZMM, добавляя еще 32 регистра к файлу на поддерживаемом оборудовании. Устаревшие 8 регистров FPU x87 (ST0–ST7), организованные в виде стека, выполняют 80-битные вычисления с плавающей запятой повышенной точности.

Ключевая информация: общее количество регистров, видимых для кода пользовательского пространства в типичном процессе x86-64, составляет около 40–50 (регистры общего назначения, флаги, указатель инструкций, сегмент и регистры XMM). Когда вы добавляете регистры управления режимом ядра, регистры отладки и сотни регистров, специфичных для модели (MSR), полное пространство архитектурных регистров исчисляется тысячами, большинство из которых никогда не затрагиваются обычным программным обеспечением.

Почему x86-64 удвоил счетчик регистров общего назначения?

Переход с 8 на 16 регистров общего назначения был одним из наиболее практических улучшений, которые AMD сделала при разработке расширения x86-64 в начале 2000-х годов. Исходные 8 регистров создавали серьезное узкое место: компиляторы были вынуждены постоянно сбрасывать переменные в память (стек), потому что регистров просто не хватало для хранения промежуточных значений. Такое разбрасывание генерирует дополнительные инструкции загрузки и сохранения, сжигая как время, так и пропускную способность памяти.

Благодаря 16 регистрам общего назначения соглашение о вызовах x86-64 (System V AMD64 ABI в Linux/macOS, Microsoft x64 ABI в Windows) может передавать первые несколько аргументов функции полностью в регистрах — шесть целочисленных аргументов в Linux (RDI, RSI, RDX, RCX, R8, R9) — вообще не затрагивая стек.

Streamline Your Business with Mewayz

Mewayz brings 207 business modules into one platform — CRM, invoicing, project management, and more. Join 138,000+ users who simplified their workflow.

Start Free Today →

Попробуйте Mewayz бесплатно

Единая платформа для CRM, выставления счетов, проектов, HR и многого другого. Банковская карта не требуется.

Начните управлять своим бизнесом умнее уже сегодня.

Присоединяйтесь к 30,000+ компаниям. Бесплатный тариф навсегда · Без кредитной карты.

Нашли это полезным? Поделиться.

Готовы применить это на практике?

Присоединяйтесь к 30,000+ компаниям, использующим Mewayz. Бесплатный тариф навсегда — кредитная карта не требуется.

Начать бесплатный пробный период →

Готовы действовать?

Начните ваш бесплатный пробный период Mewayz сегодня

Бизнес-платформа все-в-одном. Кредитная карта не требуется.

Начать бесплатно →

14-дневный бесплатный пробный период · Без кредитной карты · Можно отменить в любой момент