; ; CPE 221 Assembly Example ; 11/1/2012 ; This program multiplies two numbers by repeated addition. ; First, take absolute values of both numbers, do multiplication, ; then adjust result as necessary. data: .org 200 num1: .dc -8 num2: .dc -9 code: .org 1000 lar r30, ready lar r29, done lar r28, one_pos lar r27, adjust lar r26, next ld r1, num1 ; Put num1 in r1. ld r2, num2 ; Put num2 in r2. sub r3, r3, r3 ; Set r3 to 0, it will hold the result. brzr r29, r1 ; If num1 = 0, we are done, result = 0. brzr r29, r2 ; If num2 = 0, we are done, result = 0. addi r4, r2, 0 ; Copy num2 to r4, it will be used for loop control. addi r5, r1, 0 ; Copy num1 to r5, it will be added. brpl r26, r5 ; Take absolute value of num1. neg r5, r5 next: brpl r30, r4 ; Take absolute value of num2. neg r4, r4 ready: add r3, r3, r5 ; Add num1. addi r4, r4, -1 ; Decrement r4. brzr r27, r4 ; If r4 = 0, done adding, go to adjust. br r30 ; Need to add again. adjust: brpl r28, r1 ; Done adding, now adjust sign of result. neg r3, r3 ; If num1 negative, negate result. one_pos: brpl r29, r2 neg r3, r3 ; If num2 negative, negate result. done: stop