Re: ん?



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



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

In Reply to: Re: ん?

posted by 68user @ www1.saganet.ne.jp on 97/9/21 14:08:25

> > bne $21,$20,Loop
> > add $8,$8,$9�晦晦� # h += $9 (分岐による遅延スロット)
>
> これって、addがbneの後にあっても毎ループごとに
> 実行されるんですか? こういうのが遅延スロット
> っていうんでしょうか。

パイプラインはご存知ですね? 命令フェッチ、命令デコード等の各サイクルを流れ作業で行う事により、実質的な実行時間を短縮する技術です。

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

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


GNU Assemblerは遅延分岐を考慮した記述が出来ないようです。(アセンブラが分岐直前の命令を遅延スロットに入れてくれる)
BOKさんのアセンブラはどうですか? > BOKさん