Multiply by ShiftΒΆ

Multiplies numbers using bit shifting instead of MUL instruction.

 1; Multiply by shift: compute 7 * 8 using shifts
 2; Output: R16 = 56
 3
 4start:
 5    ldi r17, 7        ; multiplicand
 6    ldi r18, 8        ; multiplier
 7    ldi r16, 0        ; result = 0
 8
 9loop:
10    ; if multiplier is zero, done
11    cpi r18, 0
12    breq done
13    
14    ; if multiplier LSB is 1, add multiplicand
15    mov r19, r18
16    ldi r20, 1
17    and r19, r20
18    cpi r19, 1
19    brne no_add
20    add r16, r17
21
22no_add:
23    ; shift multiplicand left (*2)
24    ldi r20, 2
25    mul r17, r20
26    
27    ; shift multiplier right (/2)
28    div r18, r20
29    
30    jmp loop
31
32done:
33    jmp done

Demonstrates bit manipulation and efficient multiplication.