Порівняння архітектур систем команд
Архітектура ЕОМ часто описується як n-бітова архітектура, де n найчастіше дорівнює 8, 16, 32, 64 і так далі, що фактично є сильним спрощенням. У архітектури ЕОМ часто є декілька більш-менш «природних» розмірів даних в наборі команд, але їх впровадження апаратними засобами може сильно відрізнятися. У багатьох архітектур є системи команд, що впливають на зменшення і/або збільшення удвічі розміру відповідних процесорів головного операційного автомата. Прикладами є Intel 8080, Zilog Z80, Motorola 68000, а також багато інших. На цьому типі реалізації удвічі ширший розмір операції, як правило, також займає удвічі більшу кількість тактів (що не є типовим для високоефективної реалізації). На 68000, наприклад, це означає, що замість 4 тиків годинника, їх було б 8. Цей чип може бути описаний як 32-бітова архітектура з 16-бітовою реалізацією. Зовнішня ширина шини даних часто не допомагає визначити ширину архітектури; NS32008, NS32016 та NS32032[en] є також 32-бітовими чипами з різними зовнішніми шинами даних. NS32764 мав 64-бітову шину, але використав 32-бітові регістри.
Ширина адресної шини в різних випадках може або відрізнятися від ширини шини даних, або бути такою ж. У ранніх 32-бітових мікропроцесорів часто була 24-бітова адресна шина, як це була, наприклад, у процесорах IBM System/360.
Число операндів - один з факторів, які можуть повідомити про виконання набору команд. Архітектура з трьома операндами дозволить
A: = B + C
бути вичисленим в одній інструкції. Архітектура з двома операндами дозволить
A: = A + B
бути вичисленим в одній інструкції, таким чином, дві системи команд повинні бути виконані, щоб моделювати єдину інструкцію з трьома операндами
A: = B
A: = A + C
Архітектура може використовувати порядок байтів "від старшого до молодшого" (англ. big - endian, дослівно: "тупокінцевий") або "від молодшого до старшого" (англ. little - endian, дослівно: "загострений"), так само може використати як обидва, так і бути налаштованою, щоб використовувати окремо кожен з них. При порядку від молодшого до старшого запис розпочинається з молодшого байта і закінчується старшим. Цей порядок запису прийнятий в пам'яті персональних комп'ютерів з x86-процесорами, у зв'язку з чим іноді його називають інтеловським порядком байтів (по назві фірми-творця архітектури x86). В протилежність до порядку "від старшого до молодшого", little-endian підтримують менше кросс-платформенних протоколів і форматів даних; істотними виключеннями є: USB, конфігурація PCI, таблиця розділів GUID, рекомендації FidoNet. Багато процесорів можуть працювати і в порядку від молодшого до старшого, і в зворотному (bi-endian), наприклад, ARM, PowerPC.
Кожен процесор має набір регістрів, які містять поточний стан процесора. Звичайне число регістрів є степенем числа два, наприклад, 8, 16, 32. В деяких випадках зашитий до нуля псевдорегістр, включений як "частина" файлів регістра архітектури, головним чином щоб спростити способи індексації. Ця таблиця тільки рахує ціле число "регістрів", які вживаються загальним набором команд у будь-який момент. Архітектура завжди включає регістри спеціального призначення, такі як покажчик програми (PC).
Слід зауважити, що у деякої архітектури, такої як SPARC, є вікна регістра; для цієї архітектури кількість нижче вказує, скільки регістрів доступні у вікні регістра. Крім того, неспроектовані регістри для перейменування регістра не пораховані.
Також варто відмітити, що загальний тип архітектури "завантаження-зберігання" є синонімом для "Регістра Регістра", вказаного в таблиці нижче і означає відсутність інструкцій доступу до пам'яті окрім спеціального - завантаження до регістра(ів) - і збереження з регістра(ів) - за можливими виключеннями атомних операцій по пам'яті для блокування.
Таблиця нижче порівнює основну інформацію про набори команд, які будуть здійснені в архітектурі центрального процесора:
Архітектура | Біти | Версія | Запроваджена | Макс. число Операндів | Тип | Дизайн | Процесори | Кодування команд | Обчислення переходу | Порядок байтів | Розширення | Відкрита | Безкоштовна |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Alpha | 64 | 1992 | 3 | Register Register | RISC | 32 (Включно "0") | Фіксоване (32-bit) | Condition register | Bi | MVI, BWX, FIX, CIX | Ні | Невідомий | |
ARM | 32/16 | ARMv7 та новіші | 1983 | 3 | Register Register | RISC | 7 in 16-bit thumb mode, 15 in 32-bit | Фіксоване (32-bit), Thumb: Фіксоване (16-bit), Thumb-2: Змінне (16- and 32-bit) | Condition code | Bi | NEON, Jazelle, VFP, TrustZone, LPAE | Невідомий | Ні |
ARMv8-A | 64/32 | ARMv8-A[1] | 2011[2] | 3 | Register Register | RISC | 31 | Фіксоване (32-bit). In ARMv7 compatibility mode: Thumb: Фіксована (16-bit), Thumb-2: Змінна (16- and 32-bit), A64 | Condition code | Bi | None (all extensions of ARMv7 are non-optional) | Невідомий | Ні |
AVR | 8 | 1997 | 2 | Register Register | RISC | 32 (16 on "reduced architecture") | Змінне (mostly 16-bit, four instructions are 32-bit) | Condition register, skip conditioned on an I/O or general purpose register bit, compare and skip | Little | Невідомий | Невідомий | ||
AVR32 | 32 | Rev 2 | 2006 | 2–3 | RISC | 15 | Змінне[3] | Big | Java Virtual Machine | Невідомий | Невідомий | ||
Blackfin | 32 | 2000 | RISC[4] | 8 | Little[5] | Невідомий | Невідомий | ||||||
Crusoe | 32 | 2000 | 1 | Register Register[6] | VLIW[6][7] | 1 in native push stack mode 6 in x86 emulation, 12 integer + 48 shadow in virtual stat [6][7] | Змінне (64- or 128-bit)[7] | Condition code[6] | Little | ||||
DLX | 32 | 1990 | 3 | RISC | 32 | Фіксоване (32-bit) | Big | Невідомий | Невідомий | ||||
eSi-RISC | 16/32 | 2009 | 3 | Register Register | RISC | 8–72 | Змінне (16- or 32-bit) | Compare and branch and condition register | Bi | User-defined instructions | Ні | Ні | |
Itanium (IA-64) | 64 | 2001 | Register Register | EPIC | 128 | Condition register | Bi (selectable) | Intel Virtualization Technology | Ні | Ні | |||
M32R | 32 | 1997 | RISC | 16 | Фіксоване (16- or 32-bit) | Bi | Невідомий | Невідомий | |||||
Motorola 68k | 32 | 1979 | 2 | Register Memory | CISC | 8 data and 8 address | Змінне | Condition register | Big | Невідомий | Невідомий | ||
Mico32 | 32 | 2006 | 3 | Register Register | RISC | 32[8] | Фіксоване (32-bit) | Compare and branch | Big | User-defined instructions | Так[9] | Так | |
MIPS | 64 (32→64) | 5 | 1981 | 1–3 | Register Register | RISC | 4–32 (Включно: "0") | Фіксоване (32-bit) | Condition register | Bi | MDMX, MIPS-3D | Невідомий | Ні |
MMIX | 64 | 1999 | 3 | Register Register | RISC | 256 | Фіксоване (32-bit) | Big | Так | Так | |||
6502 | 8 | 1975 | 1 | Register Memory | CISC | 1 | Змінне (8- to 32-bit) | Condition register | Little | ||||
65k | 64 (8→64)[10] | 2006? | 1 | Memory Memory[джерело?] | CISC | 1 | Змінне (8-bit to 256 bytes) | Compare and branch[джерело?] | Little | ||||
8051 | 32 (8→32) | 1977? | 1 | Register Register | CISC | 32 in 4-bit, 16 in 8-bit, 8 in 16-bit, 4 in 32-bit | Змінне (8-bit to 128 bytes) | Compare and branch | Little | ||||
NS320xx | 32 | 1982 | 5 | Memory Memory | CISC | 8 | Змінний алгоритм Хаффмана | Condition code | Little | BitBlt instructions | Невідомий | Невідомий | |
OpenRISC | 32, 64 | 2010 | 3 | Register Register | RISC | 16 or 32 | Фіксоване | Так | Так | ||||
PA-RISC (HP/PA) | 64 (32→64) | 2.0 | 1986 | 3 | Register Register | RISC | 32 | Фіксоване (32-bit) | Compare and branch | Big → Bi | Multimedia Acceleration eXtensions (MAX), MAX-2 | Ні | Невідомий |
PowerPC | 32/64 (32→64) | 2.07[11] | 1991 | 3 | Register Register | RISC | 32 | Фіксоване (32-bit), Variable | Condition code | Big/Bi | AltiVec, APU, VSX, Cell | Так | Ні |
Rx | 64/32/16 | 2000 | 3 | Memory Memory | CISC | 4 integer + 4 address | Змінне | Compare and branch | Little | Невідомий | Ні | ||
RISC-V | 32, 64, 128 | 2010 | Register Register | RISC | 32 (Включно: "0") | Змінне | Compare and branch | Little | Так | Так | |||
S+core | 16/32 | 2005 | RISC | Little | Невідомий | Невідомий | |||||||
SPARC | 64 (32→64) | OSA2015[12] | 1985 | 3 | Register Register | RISC | 32 (Включно: "0") | Фіксоване (32-bit) | Condition code | Big → Bi | VIS 1.0, 2.0, 3.0, 4.0 | Так | Так[13] |
SuperH (SH) | 32 | 1990-ті | 2 | Register Register / Register Memory | RISC | 16 | Фіксоване (16- or 32-bit), Variable | Condition code (single bit) | Bi | Невідомий | Невідомий | ||
System/360 / System/370 / z/Architecture | 64 (32→64) | 3 | 1964 | Register Memory / Memory Memory | CISC | 16 | Змінне | Condition code | Big | Невідомий | Невідомий | ||
Transputer | 32 (4→64) | 1987 | 1 | Stack machine | MISC | 0 | Змінне (8 ~ 120 bytes) | Compare and branch | Little | ||||
VAX | 32 | 1977 | 6 | Memory Memory | CISC | 16 | Змінне | Compare and branch | Little | VAX Vector Architecture | Невідомий | Невідомий | |
x86 | 16, 32, 64 (16→32→64) | 1978 | 2 (integer) 3 (AVX-512 only) |
Register Memory | CISC | 8 in 16/32-bit, 16 in 64-bit | Змінне | Condition code | Little | x87, IA-32, MMX, 3DNow!, SSE, SSE2, PAE, x86-64, SSE3, SSE4, SSE5, AVX, AES, FMA | Ні | Ні | |
Z80 | 8 | 1976 | 2 | Register Memory | CISC | 8 | Змінне (8 to 32 bits) | Condition register | Little | ||||
Архітектура | Біти | Версія | Запроваджена | Макс. число Операндів | Тип | Дизайн | Процесори | Кодування команд | Обчислення переходу | Порядок байтів | Розширення | Відкрита | Безкоштовна |
- ↑ ARMv8 Technology Preview (PDF). Архів оригіналу (PDF) за 10 червня 2018. Процитовано 27 жовтня 2015.
- ↑ ARM goes 64-bit with new ARMv8 chip architecture. Архів оригіналу за 3 березня 2012. Процитовано 26 травня 2012.
- ↑ AVR32 Architecture Document (PDF). Atmel. Процитовано 15 червня 2008.
- ↑ Blackfin Processor Architecture Overview. Analog Devices. Архів оригіналу за 22 травня 2009. Процитовано 10 травня 2009.
- ↑ Blackfin memory architecture. Analog Devices. Архів оригіналу за 16 червня 2011. Процитовано 18 грудня 2009.
- ↑ а б в г Crusoe Exposed: Transmeta TM5xxx Architecture 2. Real World Technologies.
- ↑ а б в Alexander Klaiber (January 2000). The Technology Behind Crusoe Processors (PDF). Transmeta Corporation. Процитовано 6 грудня 2013.
- ↑ LatticeMico32 Architecture. Lattice Semiconductor. Процитовано 18 грудня 2009.
- ↑ Open Source Licensing. Lattice Semiconductor. Процитовано 18 грудня 2009.
- ↑ The 65k Project. Advanced 6502. Процитовано 20 грудня 2013.
- ↑ Power ISA 2.07. IBM. Архів оригіналу за 29 жовтня 2015. Процитовано 12 серпня 2013.
- ↑ http://www.oracle.com/technetwork/server-storage/sun-sparc-enterprise/documentation/sparc-processor-2516655.html Oracle SPARC Processor Documentation
- ↑ http://sparc.org/technical-documents/#ArchLic SPARC Architecture License