logo
AOM / Мельник А

3.3.2. Порівняльний аналіз форматів команд

Таким чином, як видно з попереднього пункту та прикладів із табл. 3.7, при роботі з основною пам'яттю в комп'ютерах використовуються нуль-, одно-, дво-, три- і чотири­адресні команди (рис. 3.20).

Розглянемо роботу комп'ютера з різними форматами команд на прикладі команди додавання двох чисел, яка найширше використовується. Нехай потрібно додати в АЛП число, яке знаходиться в пам'яті за адресою А, до числа, яке знаходиться в пам'яті за адресою В, і результат розмістити за адресою С:

С := [А] + [В].

В табл. 3.7 показана послідовність команд, які потрібно виконати при використанні трьох типів описаних архітектур для виконання операції додавання двох чисел.

Таблиця 3.7

Тип архітектури

Стекова

Акумуляторна

На основі регістрів загального призначення

Регістр-пам'ять

Регістр-регістр

Пам'ять-пам'ять

Push A

Load A

Load R1,A

Load Rl,A

Add A,B,C

Push В

Add В

Add Rl,B

Load R2,B

Add

Store C

Store C,R1

Add R3,R1,R2

Рор С

Store C,R3

Тут А, В і C- адреси комірок пам'яті, в яких знаходяться числа А, В, С; Rl,R2і R3- адреси регістрів процесора.

При використанні триадресної команди та архітектури типу "пам'ять-пам'ять" вона символічно може бути записана наступним чином:

ADD A,B,C.

106

Якщо використовується двоадресна команда та архітектура типу "пам'ять-пам'ять", то для виконання поставленої задачі необхідно виконати дві команди:

ADDA,B,яка означає [А] := [А] + [В], MOVEА,С, яка означає [С] := [А],

або дві команди:

MOVEВ,С, яка означає [С]:= [В], ADDА,С, яка означає [С] := [А] + [В].

Тут при виконанні двоадресної команди результат розміщується за адресою одного з операндів.

Одноадресна команда може бути реалізована з використанням акумуляторної архі­тектури. В цьому випадку операція С := [А] + [В] може бути виконана послідовністю із трьох команд:

LOADА, яка означає АКК := [А],

ADDВ, яка означає АКК := [АКК] + [В],

STOREС, яка означає С := [АКК].

При використанні архітектури на снові регістрів загального призначення, кожен з цих регістрів може бути використаний як акумулятор. Якщо таких регістрів r (зазвичай r рівне 8, 16, 32, 64), в полі команди необхідно добавити log2r бітів (3 - 6 бітів) для адреса­ції регістрів, що беруть участь у виконанні операції. Це значно менше, ніж для адресації комірок пам'яті. Якщо Ri- і-й регістр регістрового файлу процесора, то команди з аку­мулятором можна замінити наступними:

LOADA,Ri,яка означає Ргі := [А], ADDB,Ri,яка означає Ргі := [Ргі] + [В], STORERi,A,яка означає [А] := [Ргі].

Такого типу команди, коли одна частина адресного поля адресує основну пам'ять, а друга - регістровий файл, іноді називаються півтора адресними. Часто в комп'ютерах використовуються команди, в адресній частині яких вказуються тільки номери регі­стрів, наприклад:

ADDRi,Rj,яка означає Rj:=Ri+Kj

В цьому випадку команда є найкоротшою в порівнянні з іншими, та виконується в процесорі найшвидше.

Головні критерії вибору формату команд :

■ чим коротша команда, тим менша ємність пам'яті потрібна для її зберігання і тим менша розрядність шини команд;

107

■ чим більша адресність команди, тим менше відбувається звернень до пам'яті, тобто тим більша швидкодія комп'ютера.

Зазвичай шукається компромісне (оптимальне) рішення, і враховується, що розмір команди повинен бути узгодженим з розміром даних, оскільки вони зберігаються в од­ній пам'яті.

В перших комп'ютерах використовувалась архітектура на основі регістрів загально­го призначення типу "пам'ять-пам'ять". Але оскільки з розвитком елементної бази утво­рився великий розрив між швидкодією основної пам'яті та процесора, ця архітектура стала неефективною.

Після 1985 року більшість комп'ютерів будуються на основі архітектури типу ре-гістр-пам'ять або регістр-регістр. Цьому є дві причини:

В цьому випадку найважливішим є те, що регістри можуть бути використані для зберігання змінних. Тоді зменшується об'єм обміну з пам'яттю і прискорюється вико­нання програми, оскільки регістри швидші пам'яті. Крім того, зменшується формат ко­манди, оскільки адреса регістра коротша адреси пам'яті, тому що ємність регістрового файлу менша ємності ОП. Розробнику компілятора простіше працювати коли всі регі­стри регістрового файлу еквівалентні і загальнодоступні. В комп'ютерах перших поко­лінь регістри закріплювалися для конкретних цілей і тим самим число регістрів значно зменшувалось.

Яка кількість регістрів загального призначення є ефективною? Відповідь залежить від того, як вони використовуються компілятором. Більшість компіляторів використо­вують по декілька регістрів для роботи з формулами, зберігання параметрів та змінних.

Приклади комп'ютерів, в яких використовуються описані архітектури: