• 検索結果がありません。

SH-2A、SH2A-FPU

4. 命令の特長

4.1 RISC 方式

命令は

RISC

方式です。特長は次のとおりです。

(1) 16ビット固定長命令

基本命令は16ビット固定長です。これによりプログラムのコード効率が向上します。

(2) 32ビット固定長命令の追加

SH-2A/SH2A-FPUでは、32ビット固定長の命令が追加されています。これにより、性能およ

び使い勝手が向上します。

(3) 1命令/1ステート

パイプライン方式を採用し、基本命令は、1命令を1ステートで実行できます。

(4) データサイズ

演算の基本的なデータサイズはロングワードです。メモリのアクセスサイズは、バイト/ワ ード/ロングワードを選択できます。メモリのバイトとワードのデータは符号拡張後、ロン グワードで演算されます。イミディエイトデータは算術演算では符号拡張後、論理演算では ゼロ拡張後、ロングワードで演算されます。

4.1 ワードデータの符号拡張

SH-2A/SH2A-FPU CPU 説明 他のCPUの例

MOV.W @(disp,PC),R1 ADD R1,R0 ・・・・・・・・

.DATA.W H'1234

32ビットに符号拡張され、R1H'00001234 なります。次にADD命令で演算されます。

ADD.W #H'1234,R0

【注】 @(disp,PC)でイミディエイトデータを参照します。

(5) ロードストアアーキテクチャ

基本演算はレジスタ間で実行します。メモリとの演算は、レジスタにデータをロードし実行 します(ロードストアアーキテクチャ)。ただし、ANDなどのビットを操作する命令は直接 メモリに対して実行します。

(6) 遅延分岐

無条件分岐命令などは、一部の命令を除き遅延分岐命令です。遅延分岐命令の場合、遅延分 岐命令の直後の命令を実行してから、分岐します。これにより、分岐時のパイプラインの乱 れを軽減しています。

遅延分岐においては、分岐という動作そのものは、スロット命令の実行後に発生しますが、

命令の実行(レジスタの更新など)は、あくまでも遅延分岐命令→遅延スロット命令の順に 行われます。たとえば遅延スロットで分岐先アドレスが格納されたレジスタを変更しても、

変更前のレジスタ内容が分岐先アドレスとなります。

4.

命令の特長

Rev.4.00 2011.02.22 4-2 R01US0031JJ0400

SH-2A、SH2A-FPU

4.2 遅延分岐命令

SH-2A/SH2A-FPU CPU 説明 他のCPUの例

BRA TRGET ADD R1,R0

TRGETに分岐する前にADDを実行します。 ADD.W R1,R0 BRA TRGET

7

) 遅延スロットなし無条件分岐命令の追加

SH-2A/SH2A-FPU

では、遅延スロット命令を実行しない無条件分岐命令を追加しました。こ

れにより、不要な

NOP

命令の削減が可能となり、コードサイズを削減できます。

8

) 乗算/積和演算

16×16

32

の乗算を

1

2

ステート、

16×16

64

64

の積和演算を

2

3

ステートで実行します。

32×32

64

の乗算や、

32×32

64

64

の積和演算を

2

4

ステートで実行します。

9

T

ビット

比較結果はステータスレジスタ(

SR

)の

T

ビットに反映し、その真、偽によって条件分岐し ます。必要最小限の命令によってのみ

T

ビットを変化させ、処理速度を向上させています。

4.3 T

ビット

SH-2A/SH2A-FPU CPU 説明 他のCPUの例

CMP/GE R1,R0 BT TRGET0 BF TRGET1

R0≧R1のときTビットがセットされます。

R0≧R1のときTRGET0

R0<R1のときTRGET1へ分岐します。

CMP.W R1,R0 BGE TRGET0 BLT TRGET1 ADD #-1,R0

CMP/EQ #0,R0 BT TRGET

ADDではTビットが変化しません。

R0=0のときTビットがセットされます。

R0=0のとき分岐します。

SUB.W #1,R0 BEQ TRGET

10

)イミディエイトデータ

バイトのイミディエイトデータは命令コードの中に配置します。ワードとロングワードのイ ミディエイトデータは命令コードの中に配置せず、メモリ上のテーブルに配置します。メモ リ上のテーブルはディスプレースメント付き

PC

相対アドレッシングモードを使ったイミデ ィエイトデータのデータ転送命令(

MOV

)で参照します。

また

SH-2A/SH2A-FPU

では、

17

28

ビットのイミディエイトデータを命令コードの中に配置 することも可能です。ただし、

21

28

ビットのイミディエイトデータについては、レジスタ 転送後、

OR

命令を実行する必要があります。

4.4

イミディエイトデータによる参照

区分 SH-2A/SH2A-FPU CPU 他のCPUの例 8ビットイミディエイト MOV #H'12,R0 MOV.B #H'12,R0 16ビットイミディエイト MOVI20 #H'1234, R0 MOV.W #H'1234,R0 20ビットイミディエイト MOVI20 #H'12345, R0 MOV.L #H'12345,R0 28ビットイミディエイト MOVI20S #H'12345, R0

OR #H'67, R0

MOV.L #H'1234567,R0

32ビットイミディエイト MOV.L @(disp,PC),R0 ・・・・・・・・

.DATA.L H'12345678

MOV.L #H'12345678,R0

【注】 @(disp,PC)でイミディエイトデータを参照します。

4.

命令の特長

Rev.4.00 2011.02.22 4-3 R01US0031JJ0400 SH-2A、SH2A-FPU

(11) 絶対アドレス

絶対アドレスでデータを参照するときは、あらかじめ絶対アドレスの値を、メモリ上のテー ブルに配置しておきます。命令実行時にイミディエイトデータをロードする方法で、この値 をレジスタに転送し、レジスタ間接アドレッシングモードでデータを参照します。

また、SH-2A/SH2A-FPUでは、28ビット以下の絶対アドレスでデータを参照するとき、命令 コード中に配置したイミディエイトデータをレジスタに転送し、レジスタ間接アドレッシン グモードでデータを参照することも可能です。ただし、21~28ビットの絶対アドレスでデー タを参照するときは、レジスタ転送後、OR命令を使用する必要があります。

4.5 絶対アドレスによる参照

区分 SH-2A/SH2A-FPU CPU 他のCPUの例 20ビット以下 MOVI20 #H'12345, R1

MOV.B @R1, R0

MOV.B @H'12345,R0

21~28ビット MOVI20S #H'12345, R1 OR #H'67, R1

MOV.B @R1, R0

MOV.B @H'1234567,R0

29ビット以上 MOV.L @(disp,PC),R1 MOV.B @R1,R0

・・・・・・・・

.DATA.L H'12345678

MOV.B @H'12345678,R0

(12) 16ビット/32ビットディスプレースメント

16ビットまたは32ビットディスプレースメントでデータを参照するときは、あらかじめディ

スプレースメントの値をメモリ上のテーブルに配置しておきます。命令実行時にイミディエ イトデータをロードする方法で、この値をレジスタに転送し、インデックス付きレジスタ間 接アドレッシングモードでデータを参照します。

4.6 ディスプレースメントによる参照

区分 SH-2A/SH2A-FPU CPU 他のCPUの例 16ビットディスプレースメン

MOV.W @(disp,PC),R0 MOV.W @(R0,R1),R2 ・・・・・・・・

.DATA.W H'1234

MOV.W @(H'1234,R1),R2

4.

命令の特長

Rev.4.00 2011.02.22 4-4 R01US0031JJ0400

SH-2A、SH2A-FPU

関連したドキュメント