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 を実行することが出来て( ゚Д゚)ウマー
……なのかな?
この辺詳しくないからものすごく自信無かったり(;´Д`)