ISA の仕様

Tue, 07 Nov 2017 22:53:58 JST (38d)

このページではプロセッサとして実装すべきISAの概要を示します。

最終的に下のような命令の動作を行うプロセッサが実装できればOKです。

 

下の表はこの教科書の90ページの表を並べなおしたもので内容は同じです。

命令形式

命令形式は下の三種類で最大 2-read/1-write のオペランドを持ちます。

optype.png

R形式の命令

算術演算命令、シフト命令、レジスタ間接ジャンプがR形式の命令にあたります。

ニーモニック命令形式オペコードAUXの値動作説明
ADDR00rd <- rs+rt
SUBR02rd <- rs-rt2の補数でrd <- rs+(~rt+1)
ANDR08rd <- rs&rt
ORR09rd <- rs|rt
XORR010rd <- rs^rt
NORR011rd <- ~(rs|rt)
SLLR016rd <- rs << aux[10:6]論理左シフト
SRLR017rd <- rs >> aux[10:6]論理右シフト
SRAR018rd <- rs >>> aux[10:6]算術右シフト
JRR42PC <- rsレジスタ間接ジャンプ

I形式の命令

即値算術演算命令、ロード/ストア命令、条件分岐命令がI形式の命令にあたります。

即値はマイナスが存在するもの(算術演算等)では符号拡張、マイナスになりえないもの(論理演算等)ではゼロ拡張を行います。

ニーモニック命令形式オペコードAUXの値動作符号拡張/ゼロ拡張説明
ADDII1immrt <- rs+imm符号拡張
LUII3immrt <- imm<<16
ANDII4immrt <- rs&immゼロ拡張
ORII5immrt <- rs|immゼロ拡張
XORII6immrt <- rs^immゼロ拡張
LWI16offsetrt <- mem[rs+offset]符号拡張Word(32bit)読み出し
LHI18offsetrt <- mem[rs+offset]符号拡張Half Word(16bit)読み出し(なくてもよい)
LBI20offsetrt <- mem[rs+offset]符号拡張Byte(8bit)読み出し(なくてもよい)
SWI24offsetmem[rs+offset] <- rt符号拡張Word(32bit)書き込み
SHI26offsetmem[rs+offset] <- rt符号拡張Half Word(16bit)書き込み(なくてもよい)
SBI28offsetmem[rs+offset] <- rt符号拡張Byte(8bit)書き込み(なくてもよい)
BEQI32offsetif rs==rt then
PC <- NPC+offset
符号拡張等しければ相対アドレスジャンプ
BNEI33offsetif rs!=rt then
PC <- NPC+offset
符号拡張等しくなければ相対アドレスジャンプ
BLTI34offsetif rs<rt then
PC <- NPC+offset
符号拡張未満であれば相対アドレスジャンプ
BLEI35offsetif rs<=rt then
PC <- NPC+offset
符号拡張以下であれば相対アドレスジャンプ

A形式の命令

絶対アドレスジャンプとジャンプアンドリンク命令がA形式の命令にあたります。

ニーモニック命令形式オペコードAUXの値動作説明
JA40addrPC <- addr絶対アドレスジャンプ
JALA41addrR31 <- NPC
PC <- addr
ジャンプアンドリンク
HALTA63処理の停止

添付ファイル: fileoptype.png 197件 [詳細]