; File: multiply.asm ; Written by: Deepak Kumar ; Date: March 31, 2024 ; Purpose: ; Write a MULT subroutine to multiply two numbers B = A * B (>=0) ; Parameters: ; R0: A ; R1: B ; Result is returned in R1 as well ; Therefore MULT is R1 = R1 * R) ; Other Registers used: ; R2 ; ; Algorithm: ; R2 = R1 (copy B into R2) ; R1 = 0 (initialize result) ; while R2 != 0 do ; R1 = R1 + R0 ; R2 = R2 -1 ; ; The main program ; .ORIG x6000 A .FILL 3 B .FILL 5 .END .ORIG x600A START LD R0, A LD R1, B JSR MULT HALT ; ; MULT ; Expects A in R0 and B in R1 ; returns result (A * B) in R1 ; Uses R2 to store B ; MULT ST R2, SaveR2 ; Save R2 ADD R2, R1, #0 ; R2 = R1 AND R1, R1, #0 ; initialize result ADD R2, R2, #0 ; Trick to set condition flags ; while R2 != 0 LOOP BRz DONE ; do ADD R1, R1, R0 ADD R2, R2, #-1 BR LOOP DONE LD R2, SaveR2 ; Restore R2 RET SaveR2 .BLKW 1 .END