Формати інструкцій скалярного RISC процесора. Множина інструкцій RISC процесора.
Формати інструкцій подано наступним рисунком.
Пояснення щодо форматів інструкцій.
1. I - тип інструкції опрацьовує безпосередній операнд (Immediate ).
2. R - тип інструкції отримує пару операндів із джерельних регістрів (Registers) регістрового файла процесора та повертає результат знов таки до регістру призначення цього файла. 3. J – тип є інструкцією безумовного переходу (jump). 4. Opcode є полем коду операції, довжина 6 бітів. 5. rs1,rs2 є полями з довжиною 5 бітів, що визначають номери регістрів-джерел операндів (register of source) та програмно обираються серед регістрів R0..R31 регістрового файла. 6. rd є п'яти бітовим полем номера регістра призначення, приймача результату дії (register of destination), регістр призначення також обирають із множини R0..R31 регістрового файла.
7. Immediate - це 16-ти бітове поле, що містить безпосередній операнд; при цьому найлівіший розряд immediate розглядають як знаковий; при використанні безпосередній операнд знаково розширюють вліво за правилами доповняльного коду до 32-х бітів. 8. Function - це поле, що визначає функцію, яка розширює на 211 – 1 = 2047 комбінацій обмежену кількість дозволених кодів операції. 9. Offset added to PC - це 26-ти бітова константа, яку додають до вмістимого регістру наступної адреси при виконанні інструкції безумовного переходу.
Особливості поданих форматів інструкцій: 1. Довжина усіх форматів – 32 біти. 2. Реалізовано дизайн архітектури load/store. 3. Реалізовано фіксовану систему поділу форматів на поля. 4. Усі інструкції з погляду їхньої обробки поділено на три групи:
- АЛП операції,
- операції load/store,
- операції керування виконанням програми.
Формати АЛП операцій є три адресувальними, а саме, OP RX,RY,RZ. Вони є майже збіжними з форматами інструкцій М88X00 RICS-мікропроцесора фірми Motorola. Останній разом із IBM801 та AMD29000 у середині 80-х років утворив історично першу трійку серійних RICS-процесорів .
Інструкції керування виконанням програми, до яких належать умовні й безумовні переходи, і деякі інші інструкції, наприклад, TRAP (остання тимчасово, на короткий термін ніби "передовіряє" керування системою деякому модулю операційної системи), а також інструкція повернення з виключення (обробка особливої ситуації, що може виникнути при виконанні операції) RFE (Return From Exception).
Інструкції обробки чисел з рухомою комою, за допомогою яких виконується додавання, віднімання, множення, ділення й низка інших операцій над відповідними кодами, як правило, у двох варіантах, із стандартною та подвійною точністю.
Пересилання даних поміж регістрами та пам'яттю даних, або поміж регістрами цілих операндів і регістрів операндів із рухомою комою та спеціальними регістрами; адресування пам'яті виконують за допомогою лише однієї адресувальної моди (mode), де 16-бітовий зсув, що міститься у форматі інструкції, додають до вмістимого одного з регістрів загального призначення (тобто регістра, що містить базову адресу).
Ще раз пригорнемо увагу до того, що саме інструкції завантаження (load) чи збереження (store), які належать до цього типу, вивільнено від додаткової функції арифметичного, логічного чи будь-якого іншого опрацювання операндів. Це, по-перше, задовольняє необхідній умові створення множини інструкцій (машинних команд) RISC-архітектури, а, по-друге, дозволяє визнати архітектуру, що зараз розглядається як load/store.
Пояснимо на ілюстративному прикладі синтаксис запису алгоритмів виконання окремих машинних інструкцій DLX (див. таблицю 2). Розглянемо запис:
Regs[R19]16..31=16(DM[Regs[R8]]0 )8 ## DM [ Regs[R8]].
Запис фіксує наступне. Оновлюють лише 16 молодших (правих) бітів регістру R19. До них пересилають двобайтовий бінарний код, в якому молодший правий байт береться з пам’яті даних DM за адресою, що є збіжною з вмістимим регістру R8. Старший лівий байт утворюють вісімразовим повторюванням нульового (старшого) розряду щойно згаданого правого байта. Парою символів ## позначено операцію конкатенації (зчеплення) двох байтів до двох байтового напівслова.