Re: うーんむずかしい!



[ このメッセージへの返事 ] [ 返事を書く ] [ home.html ]



投稿者: 68user @ oryo.inforyoma.or.jp on 97/9/22 00:33:03

In Reply to: Re: ん?

posted by movem.l d0-d7/a0-a5,-(sp) @ h129.p066.iij4u.or.jp on 97/9/21 22:09:09

> パイプラインはご存知ですね?

まぁ、一応は知ってます。かなり怪しい知識ですけど。
1、命令フェッチ
2、命令デコード
3、演算
4、メモリアクセス、
5、演算結果のレジスタへの書き込み
ですよね (Oh!Xからの丸写しですけど…(^^;)

> 分岐命令の場合、アドレスの計算が終わるまで、次の命令が読み込めません。
> そこで、パイプラインを止めて待ち合わせを行わずに(プロセッサが複雑に
> なるため)、無条件でパイプラインに命令を放り込むようにしてあるようです。
> 当然、遅延スロットに入れるのは分岐命令とは無関係な命令でないといけません。

> MIPS(R3000)は、ロード命令と分岐命令で遅延スロットが発生するようです。
> それぞれロード遅延、分岐遅延というらしい)

あ、MIPSってR3000系なんですか? 初めて知ったっす(^^;

つまり

add ...
bne ...

とあると、bneの演算が終るまでaddのフェッチができない。これでは
パイプラインがストップしてしまう。そこで

bne ...
add ...

とすると bneのフェッチの間にbneとは無関係なadd命令をフェッチ
しておいて、bneの演算が終了したときにはジャンプ先のアドレスの
演算が終了している、と。結局パイプラインは止まらないという
ことでしょうか。

結局、

bne ...
??? ...

とある場合、???、bneの順に実行される、ということでよろしいですか?

でもでも

> でも、普通に書いたら
> �晦晦�bne $21,$20,Loop
>    nop
> �晦晦�add $8,$8,$9�晦晦� # h += $9
> と、認識されてしまった。いやはや、奥が深い。(^^;)

はどういうことでしょう。これはaddが実行されないような…