ARM7TDMI 勉強中

ARM7TDMI の仕様書を読んで、いろいろ勉強中。


こいつは命令パイプラインを持っていて、フェッチ、デコード、実行の3段パイプラインになっているらしい。
なので、メモリからロードしたりストアしたりするときは、ロード・ストア命令の1クロック前にそのメモリへのアクセス要求が送られるらしい。
ということは、例えば、

loop:   LDR     r0,[r1] ; r0 = *r1
        SUBS    r2,r2,1 ; r2--;
        BNE     loop    ; if( r2 != 0 ) goto loop

こうやって書くと、ジャンプの時点でパイプラインがクリアされて、LDR でよけいに時間を取ってしまうけれども、

loop:   SUBS    r2,r2,1 ; r2--;
        LDR     r0,[r1] ; r0 = *r1
        BNE     loop    ; if( r2 != 0 ) goto loop

こうすれば、LDR でメモリ要求してる間にも SUBS を実行することが出来て( ゚Д゚)ウマー


……なのかな?
この辺詳しくないからものすごく自信無かったり(;´Д`)