命令セットアーキテクチャ I


3.1.1 操作とオペランド

〇命令はひとつずつ順に実行される。

·         操作 : 動作を指定する

·         オペランド : 操作の対象

 

ソース1

ソース2

ソース3

ソース4

デスティネーション

命令の例

Register 1

Register 2

 

 

Register 3

加算・減算など

メモリアドレス

 

 

 

Register 3

メモリからRFへの転送

Register 3

 

 

 

メモリアドレス

RFからメモリへの転送

PC(プログラムカウンター)

即値

 

 

PC

PCの変更 (JUMP命令)

Register 1

Register 2

即値

PC(プログラムカウンター)

PC

PCの条件付変更
BRANCH命令)

クイズ1:メモリからレジスタファイル(RF)もしくは、レジスタファイル(RF)からメモリへの転送命令では、メモリアドレスがソースオペランドの一つである。3.1.2の実際の例では、メモリアドレス=レジスタの値+即値 のように計算するが、これはどのようなメリットがあるのか?

 

3.1.2 命令の表現形式 (命令を32ビットのビット列でどのように表現するか?)

ソース1

ソース2

ソース3

ソース4

デスティネーション

命令の例

Register 1

Register 2

 

 

Register 3

加算・減算など

メモリアドレス

 

 

 

Register 3

メモリからRFへの転送

Register 3

 

 

 

メモリアドレス

RFからメモリへの転送

PC(プログラムカウンター)

即値

 

 

PC

PCの変更 (JUMP命令)

Register 1

Register 2

即値

PC(プログラムカウンター)

PC

PCの条件付変更
BRANCH命令)

ソース1

ソース2

ソース3

ソース4

デスティネーション

命令の例

命令形式

Register 1

Register 2

 

 

Register 3

加算・減算など

R

メモリアドレス

 

 

 

Register 3

メモリからRFへの転送

I

Register 3

 

 

 

メモリアドレス

RFからメモリへの転送

I

PC(プログラムカウンター)

即値

 

 

PC

PCの変更 (JUMP命令)

A

Register 1

Register 2

即値

PC(プログラムカウンター)

PC

PCの条件付変更
BRANCH命令)

I

 

図3.1 命令形式

 

3.1.3 命令フィールド

図 3.2

 

 

クイズ2:レジスタファイルの大きさが64、命令セットの大きさが64の場合の命令フィールド構成案を作成せよ。

クイズ3:図3.2のA形式でJUMPできるメモリ空間はどこからどこまでか?

クイズ4:メモリアドレスがバイト(8ビット)ごとに、付けられているシステムでは、32ビット命令を示すPCの値は

0−>4−>8−>12…のように4づつ上昇します。これを利用して何かの改善はできるか?

クイズ5:32ビットアドレス空間の0番地から最大アドレス4G-1JUMPしたければどうすればよいか?

3.1.4 アセンブリ言語

図 3.3

 


HW2 学籍番号 名前 日付 を書いて 提出すること! 

(1)    LW, SW命令ではメモリアドレスの計算は (レジスタ値)+dpl であった
単に、dplのみを使う場合、単に(レジスタ値)を使う場合と比較して、 (レジスタ値)+dpl を使うメリットを述べよ。

(2)    レジスタファイルの大きさが64ワード(64X32ビット)、命令セットの大きさが64の場合の、命令フィールドの構成案を示せ。

(3)    AタイプのJUMP命令で、JUMPできるメモリ空間はどこから、どこまでか?

(4)    メモリアドレスがバイト(8ビット)ごとに付けられているシステムでは、32ビット長命令のアドレスを示すPCの値は
0−>4−>8−>12、のように分岐しない場合は、4ずつ上昇する。
これを利用して、上記(3)のメモリ空間を拡大する方法を述べよ。

(5)    32ビットのアドレス空間0から4G-1 (Gはギガであり230)番地の最大アドレスにJR命令を使わずに、J(JUMP命令)だけで
JUMPしたければどのような工夫をすればよいか?

(6)    MEM(2108)=MEM(2100)−MEM(2104)なる計算するアセンブラプログラムを示せ。ただし、MEM(2108)とはアドレス2108番地のメモリ内のデータを示す。

以上