R3000特訓講座
第1号


更新日付 1998-02-18

R3000を毎日1時間、1週間でマスターしてしまおうという無謀な企画。
中学、高校と6年間かかっても英語は話せません。
でもあなた、生まれて3年で日本語はぺらぺらだったでしょ?

[戻る]


・R3000の話

初日はR3000の特徴である「遅延スロット」を覚えてもらいます。
たった一つです。楽勝でしょ?
なお、ここで登場するCPUの構造、命令などは、
架空のものであり、R3000とは関係ありません。

あなたはなぜか落花生を食べたくなりました。
というわけで「落花生を食べる」ことについて考えます。
落花生を食べる手順は以下のようになります。

(1)殻をむく
(2)落花生を食べる

あなたが高性能な落花生マシーンを目指すのであれば、
高速に殻をむき、高速に食べることが重要になります。
しかし、それでは限界が見えています。
速く殻をむき、速く食べるにも限度があります。
そして多くの人は、次のような方法をとるはずです。
「落花生をむきながら食べる」 食べている間に次の落花生をむけばいいのです。
こうすれば、「平均的」に2倍もの高速化が見込めます。
つまり処理を分けて各処理を並行に行なうということです。

キスをしながらブラウスのボタンを・・・。
あ、いえ。いいんですけど。

実はR3000も同じようなことをしています。
(1)命令の取り込み(フェッチ)...F
(2)命令の処理(ALU操作)...A
(3)メモリアクセス(R/W処理)...M
(4)書き込み処理(実際に書き込むまでの時間)...W

このように処理すれば、
一つの操作に1クロックかかるとして、1命令は四つの処理、
すなわち4クロックで実行されることになります。
よって「平均的」に見れば、何と4倍もの高速化となります。
RISC-CPUは命令が単純で高速だとか、
1命令を1クロックで実行できるなどといいますが、
それにはこのような仕掛けがあったのです。

このような仕組みにより、R3000は高速に動作します。
何といっても、1クロック1命令です。
しかし、これが原因でいくつかの特徴的な制限があります。
--------------------------------------------------------------------
	lda'	pochi		;pochi番地の内容をAレジスタにロード
	inc'	a		;A = A + 1
	sta'	pochi		;Aレジスタの内容をpochi番地にストア
--------------------------------------------------------------------
このような処理は許されません。
各命令は1段階の操作のずれで並行に処理されます。
「lda pochi」がまだ終わっていないのに、
Aレジスタの内容が+1されてしますのです。
これを避けるためには、
--------------------------------------------------------------------
	lda'	pochi		;pochi番地の内容をAレジスタにロード
	nop'			;何もしない命令
	inc'	a		;A = A + 1
	sta'	pochi		;Aレジスタの内容をpochi番地にストア
--------------------------------------------------------------------
このように何もしない命令「nop」を入れて、
ロードが完了するのを待たなければならないのです。
もう一つ、例を挙げておきます。
--------------------------------------------------------------------
	jsr'	tama		;サブルーチンtamaへ分岐
	lda'	#123		;Aレジスタに123をロード
--------------------------------------------------------------------
このようなプログラムも同じ現象が起こります。
サブルーチンtamaへ分岐するのはいいのですが、
実際にtamaへ分岐するときには、
すでに「lda #123」が実行されているのです。
こう覚えてください。
「分岐命令を実行すると勢い余って実行される命令がある。」
これを「遅延スロット」といいます。

よって、分岐命令は以下のように記述します。
--------------------------------------------------------------------
	jsr'	tama		;サブルーチンtamaへ分岐
	nop'			;何もしない命令
	lda'	#123		;Aレジスタに123をロード
--------------------------------------------------------------------
今日はこれで終わりです。
でも、ちょっと時間が余りましたね。
少しだけR3000についての知識をたくわえておきましょう。
以下のことを覚える必要はありませんが、
知っていると自慢できるかもしれません。


・このようなCPUを設計するには

(1)操作にかかる時間を統一
流れ作業では、誰かがもたつくとライン全体が遅れます。
ブラのホックがなかなかはずれないと、
女のコも困ってしまうかもしれません。
もっとも、あまり手際がいいのも問題かもしれません。

女のコ「あら、慣れているのね・・・」
あ、ばれているようです。

R3000では、掛け算や割り算のように時間がかかる処理を、
専用レジスタに任せています。
こうすればパイプラインが遅れるようなことはありません。

(2)命令長を統一
次々に命令を取り込むためには、
次に実行すべき命令がどこにあるか予想できなければなりません。
命令の長さが統一されていないと、命令を解読してからでないと、
次の命令がどこにあるのかわかりません。
R3000ではすべての命令が4バイトとなっているので、
分岐命令に出会うまで、次々に命令を取り出すことができます。

というわけで、今日はおしまい。
とにかく「遅延スロット」を覚えておいてください。

[戻る]


お仕事ください(笑)... koh@inetmie.or.jp