Понимание умножения в сборке
Я пытаюсь понять, как этот фрагмент ассемблера делает 8-битное умножение. Я знаю, что делает каждая строка, но я не могу понять, как это делает все умножение.
Можете ли вы объяснить, как это делает умножение? заранее спасибо
;=========================================================
;routine: mult_soft
; function: 8-bit unsigned multiplier using
; shift-and-add algorithm
; input register:
; s3: multiplicand
; s4: multiplier
; output register:
; s5: upper byte of product
; s6: lower byte of product
; temp register: s2
;=========================================================
load s3, 2 ;multiplicand
load s4, 2 ;multiplier
mult_soft:
load s5, 00 ;clear s5
load s2, 08 ;initialize loop index
mult_loop:
sr0 s4 ;shift lsb to carry
jump nc, shift_prod ;lsb is 0
add s5, s3 ;lsb is 1
shift_prod:
sra s5 ;shift upper byte right,
;carry to MSB, LSB to carry
sra s6 ;shift lower byte right,
;lsb of s5 to MSB of s6
sub s2, 01 ;dec loop index
jump nz, mult_loop ;repeat until i=0
ret