第12回LSIデザインコンテスト・イン沖縄  設計仕様書 - 2

2.サポート命令

以下表1に9つのサポート命令を示します。算術演算、論理演算、データ転送、条件分岐、無条件分岐の5種類に区分されています。

R1,R2のような記号はレジスタファイルのアドレスを示しています。Rnではアドレスはnです。SRPでは32ビットレジスタを32個搭載しており、R0からR31が存在します。

[注意]SRPでの通常のRISCコンピュータに従って、R0は特別なレジスタでとしており、書き込みはすることができず、常にALL0の値を保持しています。ALL0すなわち、0は、プログラムでよくつかわれる数値であるので、レジスタファイルの0番地をその特別な数値として使用しています。


                 

表1  サポート命令

Formula1

表1で、R1<=R2+R3 というような表記がありますが、レジスタファイルのアドレス2番地に保持されている値とアドレス3番地に保持されている値をALUにて加算を行い、アドレス1番に書き戻すということを意味しています。命令セットでは算術演算および論理演算として、+、−、and、orの演算をサポートしています。

Load word命令はデータメモリ内の32ビットのデータをレジスタファイルに転送する命令です。表の例である“lw R1, 100(R2)”は、レジスタファイルのアドレス2番に保持されている値と命令中に指定された100という整数値の加算をALUにて行い、その結果をデータメモリのアドレス値としてデータメモリから値を読みだします。そして、その値をレジスタファイルのアドレス1番に書き戻すという意味です。

逆に、“sw R1, 100(R2)”で示されるStore word命令は、レジスタファイルのアドレス1番から値を読みだし、レジスタファイルのアドレス2番に保持されている値と命令中に指定された100という整数値の加算をALUにて行い、その結果をデータメモリのアドレス値としてデータメモリに値を書き込みます。命令の違いは最初のswかlwかだけですが、データの転送方向は逆方向です。


              

次に、branch on equalですが、これはレジスタファイル内の2つの値が同じかどうか比較して(減算してその答えが0かどうか)、同じであれば、分岐を行います。

先に説明しましたが、プログラムカウンタPCが命令メモリ内の実行する命令のアドレス番地を示します。通常分岐がない場合に、メモリ内の次番地にある命令が実行されます。後ほど、図で説明しますが、コンピュータでは一般的に、8ビット単位(バイト単位)のアドレスが付けられています。ここでは、命令もデータも32ビットを想定していますので、4アドレス番地分でひとつの命令もしくはデータが記憶されています。したがって、次の命令の番地は現在実行中の命令のアドレス+4となります。


さて、branch on equalの説明に戻りますが、” beq R1,R2,25”ではR1レジスタとR2レジスタの値を比較します。同じであれば、次の命令のアドレス(現状のPC+4)値を変更します。この例では命令中に25という整数がありますが、これは25先の命令に分岐するという意味です(この数値が負の場合は戻ることになる)。これはアドレスを計算すると、PC+4+25*4となります。1命令の大きさが4アドレス分ですので、4倍が必要なわけです。

” slt R1,R2,R3”はset on less thanという命令で、R2の値<R3の値であれば、R1の値を“1”にセットし、そうでなければ“0”にリセットするものです。set on less thanとbranch on equalをうまく使えば多彩な条件分岐が実現できます。


最後に無条件分岐(jump)命令を説明します。先ほどの条件分岐では、PC+4の値に対して値を加算(負の数の加算も想定)していましたが、”j 2500”はメモリでの絶対的なアドレスで0番地からみて、2500個目の命令への分岐を示しています。先ほども説明しましたが、メモリのアドレスはバイト単位(バイトアドレシング)を想定していますので、実際のメモリのアドレス値では4倍の2500*4=10000番地への無条件のJUMPということになります。

<<Back                 Next>>