assembly8-bit6502

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


So I'm trying to multiply by using add and shift. I want to store the multiplicand in the accumulator and the multiplicand in the X-register. I genuinely don't know why my code isn't working but I suspect its because of the multiplicand being in the accumulator and putting the product in a separate register.

Here is my code so far:

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

Thank you for your help


Solution

  • This is the corrected version. Check double semicolon for the changes. Biggest mistake was to forget resetting accumulator and carry flag before the first loop.

          LDA #49
          LDX #8
          LDY #9    ;; you need to increase your loop by 1
          STA $700
          STX $704
          LDA #$00  ;; 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 $700      ; adc
    loop2: ;     if 0
    
          ;ROL $700     ;; these three lines
          ;CLC          ;; are replaced with
          ;ROR $704     ;; the two lines below
    
          ROR        ;; this is
          ROR $704   ;; faster
    
          DEY
          BNE loop      ; if not 0, go to loop
          STA $700      ; store A in product register