; File: mult.asm ; Written by: Deepak Kumar ; Date: March 25, 2025 ; Purpose: ; Multiply two integers A > 0, and B (>=0) ; Main Program to test ; Does R1(35) <- R0(7) * R1(5) .ORIG x3000 START AND R0, R0, #0 ; R0 <- 0 ADD R0, R0, #7 ; R0 <- 7(A) AND R1, R1, #0 ADD R1, R1, #15 ; R1 <- 5 JSR MULT ; R1 <- R0 * R1 HALT .END ; ; MULT Subroutine for A(R0) <- A(R0) * B(R1) ; ; Algorithm: ; Given A, B ; result <- 0 ; while B > 0 do ; result <- result + A ; B <- B - 1 ; ; Registers: ; R0 : A, and result ; R1: B ; ; R2 <- R1 (Save B) ; R1 <- 0 ; while R2 != 0 do ; R1 <- R1 + R0 ; R2 <- R2 - 1 ; NOTE: uses R0 and R2, so save and restore .ORIG x3020 MULT ST R2, SaveR2 ADD R2, R1, #0 ; R2 <- R1 AND R1, R1, #0 ; R3 <- 0 (result) ADD R2, R2, #0 ; R2 <- R2+0 (to set flags) ; while R2 != 0 LOOP BRz MULDone ; do ADD R1, R1, R0 ; R1 <- R1 + R0 ADD R2, R2, #-1 ; R2 <- R2 - 1 BR LOOP MULDone LD R2, SaveR2 RET SaveR2 .BLKW 1 .END