Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- A: .word -4, 5, 8, -1 # int A[4]={-4,5,8,-1}; /* array of size 4 */
- A_size: .word 4 # int len=4;
- msg1: .string "Summation: "
- msg2: .string "+Ve Summation: "
- amsg1: .word msg1
- amsg2: .word msg2
- aA: .word A
- aA_size: .word A_size
- .text
- # int y = sums(A);
- # int sums(int A[]){
- # int i, sum=0;
- # for(i=0; i<len;i++) /* loop to sum A elements */
- # sum=sum+A[i];
- # sumPos(A); /* calling SumPos() */
- # return sum;
- # }
- # void sumPos(int A[]){
- # int i;
- # int sumPos=0;
- # for(i=0; i<len;i++){ /* loop to sum positive elements in A */
- # if(A[i]>0)
- # sumPos=sumPos+A[i];
- # }
- # printf("Sum of +ve: %d\n", sumPos); /* printing value in sumPos */
- # return;
- # }
- main:
- lw t0, aA # Load Array A into t0
- lw t1, aA_size # Load the size of Array A (4) into t1
- lw t2, 0(t1) # Load t1 (4) into t2
- li t3, 0 # Initialize sum to 0
- li t4, 0 # Initialize index i to 0
- li t6, 0 # Initialize sumPos to 0
- sums_loop:
- bge t4, t2, sums_exit # If i >= 4, exit loop
- slli t5, t4, 2 # i * 4 (shift left by 2 to multiply by 4)
- add t5, t5, t0 # Calculate address of A[i]; (i*4) + A
- lw a0, 0(t5) # Load A[i] into a0
- add t3, t3, a0 # sum += A[i]
- addi t4, t4, 1 # Increment i by 1
- j sums_loop # Repeat loop
- sums_exit:
- lw t6, amsg1
- la a0, msg1 # Load address of "Summation: " into a0
- sout t6 # Output "Summation: "
- dout t3 # Output sum
- nl
- jal sumPos # Call sumPos
- la a0, msg2 # Load address of "+Ve Summation: " into a0
- sout a0 # Output "+Ve Summation: "
- mv a0, a1 # Move sumPos value to a0 (for printing purposes)
- sout a0 # Output sumPos
- halt
- sumPos:
- li t4, 0 # Initialize index i to 0
- li t6, 0 # Initialize sumPos to 0
- sumPos_loop:
- bge t4, t2, sumPos_exit # If i >= 4, exit loop
- slli t5, t4, 2 # i * 4 (shift left by 2 to multiply by 4)
- add t5, t5, t0 # Calculate address of A[i]; (i*4) + A
- lw a1, 0(t5) # Load A[i] into a1
- blt a1, zero, skip_positive # If A[i] < 0, skip adding to sumPos
- add t6, t6, a1 # sumPos += A[i]
- skip_positive:
- addi t4, t4, 1 # Increment i by 1
- j sumPos_loop # Repeat loop
- sumPos_exit:
- mv a1, t6 # Move sumPos value to a1
- jr ra # Return from sumPos
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement