- 締切済み
アセンブラ、、タイマルーチン
LOOP0: MOV.W @DATA1,RO ;6ステート LOOP2: MOV.W @DATA2,R1 ;6 DEC.W #1,R1 ;2 BNE LOOP1 ;4 DEC.W #1,R0 ;2 BNE LOOP2 ;4 MOV.W #H'FFFF,R2 ;4 JSR @LIGHT ;6 JMP @LOOP0 ;4 上記のプログラムの実行にかかる時間を計算で求めるとどうなるでしょうか?? DATE1は H'FFFE00で DATE2は H'FFFE02です。ほかにも数値がいるでしょうか? ステートは自分で考えたので間違っているかもしれません(苦笑) 全然理解できていなくて困っています。教えてください!!
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- seiuchi4
- ベストアンサー率37% (71/189)
理論上の計算はループを展開して各ステート数を加算していき、 1/Clock(1ステート時間)を掛けてあげれば算出できます。 (ループの部分は実際に回る回数分を考慮) が、 1.ラベル「LOOP1」はどこでしょう? 2.JSR(サブルーチンジャンプ)先のルーチンのステート数は? 3.メモリモデルは? (これにより@DATAなどのラベルを用いたデータのステートが変わる筈です) 4.CPUは何を使用するのでしょう? CPUによっては先読みキャッシュ機能があり、実際のステートより 少ないステートで処理が行なわれます。 等など、前提条件によって結果が異なります。 単に学校の勉強等でしたら、LOOPの回数に気をつけて展開して 加算すれば求められるはずです。
お礼
早速のご回答ありがとうございます!! LOOP1書き忘れました。すみません。 LOOP0: MOV.W @DATA1,RO ;6ステート LOOP2: MOV.W @DATA2,R1 ;6 LOOP1:DEC.W #1,R1 ;2 BNE LOOP1 ;4 DEC.W #1,R0 ;2 BNE LOOP2 ;4 MOV.W #H'FFFF,R2 ;4 JSR @LIGHT ;6 JMP @LOOP0 ;4 です。学校の授業ですので詳細は気にしなくていいと思います.サブルーチンは別で計算したのですがだめでしょうか?? 〔6+{6+(2+4)*R1+2+4}*R0+4+6+4〕*ステート時間 でよいでしょうか?いろいろ考えたのですがよくわかりません(苦笑)