Система команд


У нас будут команды двух-, одно- или нульместные. Основной формат команды будет 8-ми битный.

1. Двухоперандная команда:

Закодируем следующим образом

Закодируем следующим образом:

00 – команда сложения (ADD), которая работает следующим образом Rb¬Ra+Rb

01 – LOAD (чтение из памяти), которая работает следующим образом: в регистр Rb заносится содержимое ячейки памяти по адресу Ra: Rb¬M[Ra]

10 – store (сохранение, запись), алгоритм: M[Ra]¬Rb

11 – признак однооперандной команды.

2. Понятно что для однооперандной команды у нас требуется наличие какого-то одного регистра в качестве хранителя этого операнда поэтому мы в качестве хранителя этого операнда поэтому мы в качестве него мы выберем регистр В,

clip_image004

а 3 освободившихся разряда будем использовать для кодирования кода операции однооперандной операции, где

000 – CLR(команда очистки), алгоритм: Rb¬0

001 – NOT(команда отрицания),алгоритм выполнения: Rb¬~Rb

010 – INC(команда увеличения на 1) алгоритм: Rb¬Rb+1

011 – LOADI (загрузка непосредственно) за командой непосредственно следуют 4 байта загружаемых данных алгоритм: Rb¬M[PC+1]

100 – SHL (сдвиг влево) алгоритм:Rb¬Rb<<1

101 – SHR алгоритм: Rb¬Rb>>1

110 – JC(переход если установлен флаг переноса) алгоритм:PC¬CF?Rb:PC+1

111 – префикс нульместной операции

3. Нульоперандная команда:

clip_image006

У нас есть операции только условного перехода.Для того чтобы сделать безусловный переход мы должны установить операции сброса установки флага. Если мы сбросим флаг, а потом выполним JC, то понятно, что у нас будет переход по содержимому регисра В, а если мы сбросим, то это команда будет называться «нет операции», состоящая из 2 байт.

000 – STC(установка флага переноса) алгоритм:CF¬1

001 — CLC(сброс флага переноса) алгоритм: CF¬0

010 – STI(установка флага прерывания)

011 – CLI(сброс флаго прерывания)

100 – CPO флаг переполнения

101 – CPZ флаг нуля

110 – CPS флаг знака

алгоритм: CF¬{O,Z,S}F в флаг переноса записывается флаг переполнения нуля знака результа. Эти флаги получаются на предыдущей операции. Эти флаги изменяют только 4 команды:сложения, сдвига.

Загрузка...