1.2: Порівняння комп'ютерних архітектур
- Page ID
- 28214
Ця монографія є першою в серії монографій, які охоплюватимуть різні типи процесорів, де дві великі відмінності між типами процесорів - це адресний формат інструкцій, а також те, як розділена пам'ять команд та даних для процесора. У цьому наступному розділі буде розглянуто адресний формат інструкції. У наступному розділі будуть розглянуті проекти, де пам'ять інструкцій та даних об'єднані (архітектура фон Неймана) вірші окремої інструкції та пам'яті даних (архітектура Гарварду).
1.2.1 Нуль-, Одно- і Дво/Три- Адресна архітектура
Основна різниця між 0-, 1- та 2/3- адресною комп'ютерною архітектурою полягає в тому, звідки беруться операнди для ALU. У цьому розділі буде окреслено кожну з цих архітектур.
Зверніть увагу, що у всіх цих архітектурах операнди можуть надходити з регістров/пам'яті, або операнди можуть бути частиною самої інструкції. Наприклад, значення, яке використовується в інструкції додати A в одноадресному комп'ютері, надходить з комірки пам'яті за адресою, відповідною мітці A, а інструкція додає значення в пам'яті розташування A до $ac. В інструкції addi 5 значення операнда входить в інструкцію, і іменується як безпосереднє значення. У цій серії монографій оператори, які використовують негайне значення, будуть додані «i». Наприклад, як показано вище, інструкція add використовує значення пам'яті, а addi - негайне значення.
1.2.1.1 0-Адресна архітектура
При обговоренні адресної архітектури комп'ютера центральне питання полягає в тому, як витягуються аргументи до АЛУ, і де зберігаються результати з АЛУ? Архітектура 0-адреси витягує (вискакує) два аргументи з верхньої частини стека операндів, виконує операцію, а потім зберігає (відштовхує) результат назад у стеку операндів. Два операнди до ALU маються на увазі як два операнди у верхній частині стека, і операція, в даному випадку add, не вказує жодних операндів. Оскільки оператор не приймає ніяких явних операндів, 0 адрес включаються як частина операції, і це називається архітектурою 0 адрес. Зауважте, що архітектуру з 0 адресами часто називають архітектурою стека, оскільки вона використовує стек для операндів в/з ALU.

Під час написання коду збірки для цієї архітектури операнди спочатку надсилаються на стек (з пам'яті або негайних значень) за допомогою двох операцій push. Виконується операція, яка полягає у вискакуванні двох операндів зі стека, запуску ALU та натискання результату назад у стек. Відповідь потім зберігається в пам'яті за допомогою операції pop. Наступна програма, яка додає значення змінної A і value 5, потім зберігає результат назад у змінну B, ілюструє просту програму 0-адреса.
Program 1-1: 0-address program to add two numbers PUSH A PUSHI 5 ADD POP B
Історично існували комп'ютери, реалізовані з використанням архітектури 0 адрес, таких як Burroughs 6500 і 7500 серії, але це рідко, якщо коли-небудь використовується в сучасних апаратних архітектурах.
Однак більшість сучасних мов, що працюють на віртуальних машинам (VM), таких як віртуальна машина Java (JVM) або Net Common Language Runtime (CLR), реалізують архітектури 0-адреси або стека.
1.2.2 Одноадресна архітектура
В одноадресній архітектурі в ЦП зберігається спеціальний регістр, званий акумулятором або $ac. $ac завжди мається на увазі вхідний операнд ALU, а також мається на увазі призначення результату операції ALU. Другий вхідний операнд - це значення змінної пам'яті або негайне значення. Це показано на наступній схемі.

Нижче наведено просту одноадресну комп'ютерну програму, щоб додати значення 5 і значення змінної A, і зберегти результат назад у змінну B.
Program 1-3: one-address program to add two numbers CLR //SettheACto0 ADDI 5 // Add 5 to the $AC. Since it was previously 0, this loads 5 ADD A // Add A+5, and store the result in the $AC STOR B // Store the value in the $AC to the memory variable B
Оскільки в інструкції оператора ALU вказано лише одне значення, цей тип архітектури називається одноадресної архітектурою. Оскільки одноадресна архітектура завжди має акумулятор, її ще називають архітектурою акумулятора.
Історично багато ранніх процесорів використовували одноадресні конструкції, включаючи Intel 8080 і PDP-8, використовували архітектури акумуляторів. Через їх простоту і можуть бути швидшими, ніж інші архітектури, деякі мікрокомп'ютерні конструкції все ще використовують архітектуру акумуляторів, хоча більшість комп'ютерів реалізують проекти реєстрів загального призначення.
1.2.3 Дво/Три - Адресна архітектура
Двоадресні та триадресні архітектури називаються архітектурами реєстру загального призначення. Двоадресні та триадресні конструкції працюють аналогічно. Обидві архітектури мають певну кількість регістрів загального призначення, які можна використовувати для вибору двох входів до АЛУ, а результат роботи ALU записується назад до регістрів загального призначення. Різниця полягає в тому, як вказується результат операції АЛУ (регістр призначення). У триадресній архітектурі 3 регістри - це призначення (куди записувати результати з АЛУ), R d та два регістри джерела, що забезпечують значення ALU, R s та R t. Це показано на наступному малюнку.

2-адресна архітектура схожа на 3-адресну архітектуру, і єдина відмінність полягає в тому, що в інструкції вказано тільки 2 регістри, перший використовується як для призначення операції, так і для першого джерела АЛУ.

Як показано на діаграмах, процесор вибирає два регістри загального призначення - значення для відправки в АЛУ, а інший вибір робиться для запису значення з АЛУ назад в регістр. При такій конструкції всі значення, що передаються АЛУ, повинні надходити з реєстру загального призначення, а результати АЛУ повинні зберігатися в реєстрі загального призначення. Це вимагає доступу до пам'яті за допомогою операцій завантаження та зберігання, а правильне ім'я для комп'ютера з двома або трьома адресами є «комп'ютер завантаження/зберігання два-три адреси».
Наступні дві програми виконують ту ж програму, B=A+5, як і в попередніх прикладах. У першому прикладі використовується 3-адресний формат, а в другому використовується формат 2-адреси.
Program 1-4: 3-address program for adding two numbers LOAD $R0, A LOADI $R1, 5 ADD $R0, $R0, $R1 STORE B, $R0
Program 1-5: 2-address program for adding two numbers LOAD $R0, A LOADI $R1, 5 ADD $R0, $R1 STORE B, $R0
