1

アセンブリの学習を始めたばかりで、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 サイクルが相殺されるため、これは意味がありません..

誰でもアイデアはありますか?

前もって感謝します :)

4

0 に答える 0