アセンブリの学習を始めたばかりで、A と HX のネストされたインクリメント ループを使用して基本的な遅延サブルーチンを実装しています (まだタイマーの使用は許可されていません!)。
ここに私のサブルーチンがあります:
;delay subroutine:
delay ;delay label
LDA #0 ;loads A with 0
loop_1 ;first loop
ADD #1 ;increments A
LDHX #0 ;loads HX with 0
loop_2 ;second loop
AIX #1 ;increments HX
CPHX number_2 ;compares HX to number_2
BNE loop_2 ;loops if not equal
CMP number_1 ;compares A to number_1
BNE loop_1 ;loops if not equal
RTS ;returns from delay sr
ルーチンが完了するまでにかかるサイクル数を計算する式を導出しようとしています。
ループ外サイクル (JSR、LDA、RTS) の合計は 12
loop_1 サイクル (ADD、LDHX、CMP、BNE) の合計は 10
loop_2 サイクル (AIX、CPHX、BNE) の合計は 8
これを解決するには、number_1 と number_2 の関数として何らかの再帰的な合計が必要になると考えています。理想的には、number_1 と合計サイクルを指定して、number_2 を解決するために逆方向に作業したいと考えています。
私は数学を試してきましたが、これまでのところ(結果のタイミングによって)最も近いものは
合計サイクル = ループ外サイクル + loop_1 サイクル * number_1 * (loop_2 サイクル/loop_1 サイクル) * number_2
loop_1 サイクルが相殺されるため、これは意味がありません..
誰でもアイデアはありますか?
前もって感謝します :)