5-Translate the following C program to MIPS assembly program (Please ex- plain each instruction in your code by a comment and submit a .asm file) #include using namespace std; // function to return sum of elements // in an array of size n int sum(int arr, int n) { int sum · 0; // initialize sum // Iterate through all elements // and add them to sum for (int i = 0; i < n; i++) sum +- arr[i]; return sum; } // Driver code int main()
Answer:
.data
str1: .asciiz "Hello"
str2: .asciiz "mars"
msg: .asciiz "String after the concatenate: "
.text
main:
#load the address str1 to $a0
la $a0,str1
#initialize $t0 with 0
li $t0,0
#loop to find the length of str1
#$t0 stores the length of str1
loop1:
#load byte of $a0 to $t1
lb $t1,0($a0)
#branch for equal.If $t1 equal to 0,jump to label stop1
beq $t1,0,stop1
addi $t0,$t0,1 #increase the count
addi $a0,$a0,1 #increase the address
#jump to label loop1
j loop1
stop1:
#load the address of str2 to $a1
la $a1,str2
#loop2 concatenate the each element in str2 to str1
loop2:
lb $t2,0($a1) #load character in str2 to $t2
sb $t2,0($a0) #store value in $t2 to str1
beq $t2,0,stop2
addi $a1,$a1,1 #increase the address of str2
addi $a0,$a0,1 #increase the address of str1
j loop2
stop2:
#syscall for print string is $v0 = 4
#syscall to termiante the program is $v0 = 10
#print the message
li $v0, 4
la $a0, msg
syscall
#print the concatenated string
li $v0,4
la $a0,str1
syscall
#termiante the program
li $v0, 10
syscall
Step by step
Solved in 2 steps with 2 images