Рассмотрим двухоперандные команды:
Рис. 2.12. Двухоперандная команда
Закодируем следующим образом:
00 – команда сложения (ADD), которая работает следующим образом Rb¬Ra+Rb
01 – LOAD (чтение из памяти), которая работает следующим образом: в регистр Rb заносится содержимое ячейки памяти по адресу Ra: Rb¬M[Ra]
10 – STORE (сохранение, запись), алгоритм: M[Ra]¬Rb
11 – признак однооперандной команды.
Рис. 2.13. Однооперандная команда
Понятно что для однооперандной команды у нас требуется наличие какого-то одного регистра в качестве хранителя этого операнда регистр В, а 3 освободившихся разряда будем использовать для кодирования кода операции однооперандной команды, где
000 – CLR(команда очистки), алгоритм: Rb¬0
001 – NOT(инверсия разряда),алгоритм выполнения: Rb¬~Rb
010 – INC(команда увеличения на 1) алгоритм: Rb¬Rb+1
011 – LOADI (загрузка непосредственно) за командой непосредственно следуют 4 байта загружаемых данных. Алгоритм: Rb¬M[PC+1], PC ¬ PC+n/8
100 – SHL (сдвиг влево) алгоритм: Rb¬Rb<<1
101 – SHR алгоритм: Rb¬Rb>>1
110 – JC(переход, если установлен флаг переноса) алгоритм: PC¬CF?Rb:PC+1
111 – префикс нульместной операции
Нульоперандная команда:
Рис. 2.14. Нульоперандная команда
У нас есть операции только условного перехода. Для того чтобы сделать безусловный переход мы должны установить операции сброса установки флага. Если мы сбросим флаг, а потом выполним JC, то понятно, что у нас будет переход по содержимому регистра В, а если мы сбросим, то эта команда будет называться «нет операции», состоящая из 2 байт.
000 – STC(установка флага переноса) алгоритм: CF¬1
001 – CLC(сброс флага переноса) алгоритм: CF¬0
010 – STI(установка флага прерывания)
011 – CLI(сброс флага прерывания)
100 – CPO флаг переполнения
101 – CPZ флаг нуля
110 – CPS флаг знака
Функциональная схема
Рис. 2.15. Функциональная схема RISC процессора
Недостатки:
- Значительная загрузка логического интерфейса процессора.
· Двунаправленность ШД, ША, ШУ.
- Сложность программирования.
- Значительная доля времени тратится на дешифрацию команд.
