Понимание умножения в сборке

Я пытаюсь понять, как этот фрагмент ассемблера делает 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

0 ответов

Другие вопросы по тегам