当被乘数在累加器中时,如何在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
所以我正在尝试使用加法和移位法进行乘法运算。我想将被乘数存储在累加器中,将被乘数存储在 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