当被乘数在累加器中时,如何在6502中使用加法和移位算法进行乘法运算?

How to multiply with add and shift algorithm in 6502 when the multiplicand is in the accumulator?

所以我正在尝试使用加法和移位法进行乘法运算。我想将被乘数存储在累加器中,将被乘数存储在 X 寄存器中。我真的不知道为什么我的代码不起作用,但我怀疑是因为被乘数在累加器中并将乘积放在单独的寄存器中。

到目前为止,这是我的代码:

      LDA #49
      LDX #8
      LDY #
      STA 0
      STX 4
loop:           ; if 1
      BCC  loop2    ; if 0, go to loop2
      CLC       ; clear carry for adc
      ADC 0      ; adc
loop2: ;     if 0
      ROL 0      ; left shift
      CLC
      ROR 4
      DEY
      BNE loop      ; if not 0, go to loop
      STA 0      ; store A in product register

感谢您的帮助

这是更正后的版本。检查双分号的变化。最大的错误是忘记在第一次循环之前重置累加器和进位标志。

      LDA #49
      LDX #8
      LDY #9    ;; you need to increase your loop by 1
      STA 0
      STX 4
      LDA #[=10=]  ;; you need to reset acc
      CLC       ;; and clear carry
loop:           ; if 1
      BCC  loop2    ; if 0, go to loop2
      CLC       ; clear carry for adc
      ADC 0      ; adc
loop2: ;     if 0

      ;ROL 0     ;; these three lines
      ;CLC          ;; are replaced with
      ;ROR 4     ;; the two lines below

      ROR        ;; this is
      ROR 4   ;; faster

      DEY
      BNE loop      ; if not 0, go to loop
      STA 0      ; store A in product register