Next: , Previous: SimpleProcessor, Up: Top


2 命令コード

SimpleProcessorの命令列は,32bit固定長であり,以下のような内容で構成される.

命令 rD,rN,rM
8bitの命令と,レジスタ番号rD,rN,rM.
命令 rN,rM
8bitの命令とレジスタ番号,rNとrM.
命令 rN
8bitの命令とレジスタ番号,rN.
命令 rD,imm
8bitの命令とレジスタ番号,16bitの即値imm.
命令 imm
8bitの命令と16bitの即値imm.
HALT
プログラムの終了を指示します.この命令を読みこむと,SimpleProcessorはプログラムカウンタを進めません.
NOP
何もせず,プログラムカウンタを更新します.
ADD rD,rN,rM
レジスタDにレジスタNの内容とレジスタMの内容の和を代入します.
ADDI rD,imm
レジスタDにレジスタDの内容と即値immを加算した結果を代入します.
SUB rD,rN,rM
レジスタDにレジスタNの内容とレジスタMの内容の差を代入します.
SUBI rD,imm
レジスタDにレジスタDの内容から即値immを引いた値を代入します.
MULT rD,rN,rM
レジスタNとレジスタMの積を求め,その下位16bitをレジスタDに,上位16bitをレジスタ(D+1)に代入します.
DIV rD,rN,rM
レジスタNとレジスタMの除算を行い,その商をレジスタDに,余を16bitをレジスタ(D+1)に代入します.
OR rD,rN,rM
レジスタDにレジスタNとレジスタMの各ビットでの論理和を代入します.
AND
レジスタDにレジスタNとレジスタMの各ビットでの論理積を代入します.
JMP rN
レジスタNのアドレス番地にプログラムカウンタをセットします.
JMPI imm(16bit)
即値で指定したアドレス番地にプログラムカウンタをセットします.
JCC rN
SimpleProcessor内のconditionフラグが真の場合にレジスタNのアドレス番地にプログラムカウンタをセットします.
JCCI imm
SimpleProcessor内のconditionフラグが真の場合にimm番地にプログラムカウンタをセットします.
EQ rD,rN,rM
レジスタNとレジスタMの値が等しい場合にconditionフラグを真にし,レジスタDに0を代入する.
NEQ rD,rN,rM
レジスタNとレジスタMの値が等しくない場合にconditionフラグを真にし,レジスタDに0を代入する.
LT rD,rN,rM
レジスタNがレジスタMより小さい場合にconditionフラグを真にし,レジスタDに0を代入する.
GT rD,rN,rM
レジスタNがレジスタMより大きい場合にconditionフラグを真にし,レジスタDに0を代入する.
LEQ rD,rN,rM
レジスタNがレジスタM以下の場合にconditionフラグを真にし,レジスタDに0を代入する.
GEQ rD,rN,rM
レジスタNがレジスタM以上の場合にconditionフラグを真にし,レジスタDに0を代入する.
LDR rN,rM
レジスタNの番地のデータを読み込み,レジスタMに代入する.外部Channelへのリクエストの場合,writeback()でレジスタMにデータは書き戻される.
STR rN,rM
レジスタNの番地にレジスタMのデータを書き込む.
MOV rD,rN
レジスタNの値をレジスタDに転送する.
MOVI rD,imm
レジスタDに即値immを転送する.
POP rD
スタックからデータをpopし,レジスタDに転送する.
PUSH rN
スタックにレジスタNの値をpushする.
CALL rN
レジスタN番地からの命令を呼び出す.現在のプログラムカウンタはスタックにpushされる.
CALLI imm
即値imm番地からの命令を呼び出す.現在のプログラムカウンタはスタックにpushされる.
RET
スタックから値をpopし,その値をプログラムカウンタとする
LDA rD,imm
フレームポインタの値から即値immで指定したオフセット位置の番地の値を読み込みレジスタDに書き込む.
STA rN,imm
フレームポインタの値から即値immで指定したオフセット位置の番地にレジスタNの値を書き込む.