Я знаю, что 32-битные регистры были названы как 16-битные регистры с префиксом «E», что означает «расширенный». Я всегда предполагал, что это означает расширение с 16 до 32 бит, хотя я никогда не видел этого в явном виде.
Я пытался выяснить, что означает «R», но мои навыки Google подвели меня. Кто-нибудь знает?
architecture
x86
Matt
источник
источник
Ответы:
Это означает зарегистрироваться , и это не все по историческим причинам.
Историческая часть заключается в том, что Intel приобрела привычку перечислять регистры буквами с 8008 (от A до E плюс H и L). Эта схема была более чем адекватной в то время, потому что микропроцессоры имели очень мало регистров и вряд ли могли получить больше, и большинство разработок делали это. Тогда преобладало мнение, что программное обеспечение будет переписано для новых процессоров по мере их появления, поэтому изменение схемы именования регистров между моделями не было бы большой проблемой. Никто не предвидел превращение 8088 в «семью» после включения в IBM PC, и ярмо обратной совместимости в значительной степени вынудило Intel принять схемы типа «E» для 32-битных регистров для его поддержки.
Неисторическая часть практична. Использование букв для регистров общего назначения ограничивает вас числом 26, если вы отсеиваете те, которые могут вызвать путаницу с именами регистров специального назначения, такими как счетчик программ, флаги или указатель стека.
У меня нет источника, чтобы подтвердить это, но я подозреваю, что выбор
R
префикса и введение R8-R15 на 64-битных процессорах сигнализирует о переходе к пронумерованным регистрам, что было нормой среди 32-битных и -большая архитектура не выводится из 8008 почти полвека. IBM сделала это в 1960-х годах с 360-ым, за ним последовали PowerPC, DEC Alpha, MIPS, SPARC, ARM, Intel i860 и i960 и множество других, которые давно забыты.Вы заметите, что существующие регистры прекрасно вписались бы в R0 - R7, если бы они существовали, и меня не удивит немного, если они будут обрабатываться таким образом внутри. Существующие длинные регистры (RAX / EAX / AX / AL, RBX / EBX / BX / BL и т. Д.), Вероятно, будут оставаться до тех пор, пока не сгорит солнце.
источник
r0
-r7
или используяUAX
вместоr8
и т.д. . «Выяснение того, как лучше назвать регистры, было на самом деле одной из самых сложных частей расширения регистра». (См. Stackoverflow.com/a/35619528/224132 для некоторой другой аккуратной истории x86-64.) Кроме того, порядок не RAX / RBX / ... в двоичной кодировке, это AX, CX, DX, BXВ более ранних процессорах не все регистры были равны:
Таким образом, допущение, что один конкретный регистр всегда был задействован, когда использовался сумматор, делало чип менее сложным, а коды операций короче.
Например, 6510 (используемый в Commodore 64) может быть добавлен только с использованием регистра A, а для индексации используются X или Y. Есть инструкции INC X и INC Y, но нет INC A.
Поскольку регистры имели различное использование, были выбраны мнемоники, отражающие их использование. Например, A, X и Y в 6510 (вместо A, B и C).
Имена в 8086 выбраны так, чтобы отражать их использование. С 4 регистрами общего назначения было логично назвать их AX, BX, CX и DX. Дополнительные регистры индексации назывались BP и SP (мнемоника: базовый указатель, указатель стека).
Поскольку многие коды операций были расширены до 16 битов, было место для указания, какой из четырех регистров использовался. Однако некоторые исторические причины все еще применялись, поскольку CX был немного особенным: REP и лайки, которые являются 8-битными кодами операций, всегда используют CX в качестве счетчика. Простая мнемоника CX = Counter помогает запомнить, какая из них используется.
Операционные коды для преемников 8086 должны были быть обратно совместимыми, и это беспорядок в результате использования операционных кодов переменной длины. Когда 32-битные шины стали более распространенными, были опробованы процессоры с фиксированной длиной кода операции. Это упрощает декодирующую часть ЦП, которая высвобождает пространство, которое можно использовать, например, для большего количества регистров.
Процессоры, которые придерживались этой идеи, называются процессорами RISC (CPU с уменьшенным набором инструкций), в отличие от CISC (CPU с комплексным набором инструкций).
Чем больше регистров, тем меньше перетекания в память. По сути, регистры - это самый быстрый доступный кэш, поэтому увеличение количества регистров является хорошей идеей даже в наши дни. Отсутствие специализированных инструкций было (возможно, более чем) компенсировано более быстрым выполнением простых инструкций.
32-битные операционные коды фиксированной длины имеют достаточно места для включения источника, второго источника, операции и места назначения. SPARC удалось сжать 5 битов для каждого из источника, второго источника и места назначения, и, следовательно, одновременно было доступно 32 регистра.
32 регистра слишком много, чтобы использовать буквы, и в любом случае они были в основном равны, поэтому нумерация их была очевидным выбором. Буква «R» использовалась для того, чтобы отличить их от констант 0..31, а буква «R» была легкой мнемоникой для Регистра. Следовательно: R0..R31.
На протяжении многих лет Pentium и его преемники поддерживали обратную совместимость. Тем не менее, многие из наиболее успешных идей RISC также были неоправданными. Часто эти новые RISC-подобные инструкции выполняются быстрее, чем обратно-совместимые версии.
Интел также увеличил количество регистров, чтобы уменьшить количество обращений к памяти.
И, видимо, Intel наконец начала использовать R-нотацию. Обратная совместимость гарантирует, что AX, BX, ... останутся, но я бы поспорил, что AX - это просто синоним, например, R0.
Отказ от ответственности : Выше мой взгляд на историю. Это будет неполным, так как я не был свидетелем ранних частей истории из первых рук. Тем не менее, я надеюсь, что это будет полезно для некоторых.
источник
INX
илиINY
, хотя код занимал дополнительный байт. Я написал много сборок для этого чипа, и на практике такое увеличение было редким, за исключением математики, которая в этом нуждалась.ADD 1
работает, поэтому не было необходимости в специализированном увеличении A. И я не припомню, чтобы мне это тоже было нужно.Это просто означает «зарегистрироваться». По историческим причинам.
источник