サポート命令
区分 | 命令 | 例 | 意味 | 備考 |
算術演算 | add | add R1,R2,R3 | R1 <= R2 + R3 | 加算 |
subtract | sub R1,R2,R3 | R1 <= R2 - R3 | 減算 | |
論理演算 | and | and R1,R2,R3 | R1 <= R2 and R3 | 各ビットごとにAND |
or | or R1,R2,R3 | R1 <= R2 or R3 | 各ビットごとにOR | |
データ転送 | load word | lw R1, 100(R2) | R1 <= メモリ[R2+100] | メモリからレジスタへの転送 |
store word | sw R1, 100(R2) | メモリ[R2+100] <= R1 | レジスタからメモリへの転送 | |
条件分岐 | branch on equal | beq R1,R2,25 | if (R1=R2) go to PC+4+100 | 等しい時にPC相対分岐 |
set on less than | slt R1,R2,R3 | if (R2<R3) R1<=1 else R1<=0 | ||
無条件ジャンプ | jump | j 2500 | go to 10000 | 絶対アドレスジャンプ |
命令 | フォーマット名 | 例 | 備考 | |||||
6ビット | 5ビット | 5ビット | 5ビット | 5ビット | 6ビット | |||
add | R形式 | 0 | 2 | 3 | 1 | 0 | 32 | add R1, R2, R3 |
sub | 0 | 2 | 3 | 1 | 0 | 34 | sub R1, R2, R3 | |
and | 0 | 2 | 3 | 1 | 0 | 36 | and R1, R2, R3 | |
or | 0 | 2 | 3 | 1 | 0 | 37 | or R1, R2, R3 | |
slt | 0 | 2 | 3 | 1 | 0 | 42 | slt R1, R2, R3 | |
lw | I形式 | 35 | 2 | 1 | 100 | lw R1, 100(R2) | ||
sw | 43 | 2 | 1 | 100 | sw R1, 100(R2) | |||
beq | 4 | 1 | 2 | 25 | beq R1, R2, 25 | |||
j | J形式 | 2 | 2500 | j 2500 |
ここで扱う9つの命令は以下のような共通の動作をする。
このプログラムを例にとって動作を説明する。
図1 分岐のないプログラムの場合
以下のプログラムを例にとって動作を説明する。
図2 分岐のあるプログラムの場合
1) 図1に示すメモリ内の5命令を実行した時の各ステップ(PC=8、12,16,20,24)
におけるデータの流れとメモリ、レジスタファイル、インストラクションレジスタの値を記入せよ!
図1のようなダイアグラムが5枚必要である!
2) 図2に示すメモリ内の5命令を実行した時の各ステップ(PC=8から24)
におけるデータの流れとメモリ、レジスタファイル、インストラクションレジスタの値を記入せよ!
図2のようなダイアグラムが13枚必要である!
3) ALUに加算の機能が含まれているが、それ以外に加算の機能が必要なところはどこか?
以上