Question
Convert the given C++ code into MIPS assembly. Please do not modify the C++ code itself. You are only allowed to make modifications to the
Convert the given C++ code into MIPS assembly. Please do not modify the C++ code itself. You are only allowed to make modifications to the assembly file. Start writing your code below the main: label and above the exit: label. For this project stay BETWEEN these labels.
When doing a C++ to MIPS conversion, it can be done in the following steps:
1 Assign variables to registers. When inspecting code, any constant values in expressions may need to be assigned to temporary registers.
2 Initialize variables to registers. (actually put the values into the registers.)
3 Then you may begin converting the rest of the code.
Expected Output:
Sum: 7179
Reversed Number: 98654
is Palindrome: 1
__________________________________________________________________________
Base MIPS Code:
.data
endl: .asciiz " " # used for cout << endl;
sumlbl: .asciiz "Sum: " # label for sum
revlbl: .asciiz "Reversed Number: " # label for rev
pallbl: .asciiz "Is Palindrome: " # label for isPalindrome
sumarr: .word 1
.word 3
.word 44
.word 66
.word 88
.word 90
.word 9
.word 232
.word 4325
.word 2321
arr: .word 1
.word 2
.word 3
.word 4
.word 5
.word 4
.word 3
.word 2
.word 1
.text
# sum --> $s0
# address of sumarr --> $s1
# rev --> $s2
# num --> $s3
# isPalindrome --> $s4
# address of arr --> $s5
# i --> $t0
# beg --> $s6
# end --> $s7
# d --> $t1
# 10 --> $t2
# 100 --> $t3
main:
exit:
la $a0, sumlbl # puts sumlbl into arg0 (a0 register) for cout
addi $v0, $0, 4 # puts 4 in v0 which denotes we are printing a string
syscall # make a syscall to system
move $a0, $s0 # puts sum into arg0 (a0 register) for cout
addi $v0, $0, 1 # puts 1 in v0 to denote we are printing an int
syscall # make a syscall to system
la $a0, endl # puts the address of the string endl into a0
addi $v0, $0, 4 # puts 4 into v0 saying we are printing a string
syscall
la $a0, revlbl # puts revlbl into arg0 (a0 register) for cout
addi $v0, $0, 4 # puts 4 in v0 which denotes we are printing an string
syscall # make a syscall to system
move $a0, $s2 # puts rev into arg0 (a0 register) for cout
addi $v0, $0, 1 # puts 1 in v0 to denote we are printing an int
syscall # make a syscall to system
la $a0, endl # puts the address of the string endl into a0
addi $v0, $0, 4 # puts 4 into v0 saying we are printing a string
syscall
la $a0, pallbl # puts pallbl into arg0 (a0 register) for cout
addi $v0, $0, 4 # puts 4 in v0 which denotes we are printing a string
syscall # make a syscall to system
move $a0, $s4 # puts isPalindrome into arg0 (a0 register) for cout
addi $v0, $0, 1 # puts 1 in v0 to denote we are printing an int
syscall # make a syscall to system
la $a0, endl # puts the address of the string endl into a0
addi $v0, $0, 4 # puts 4 into v0 saying we are printing a string
syscall
addi $v0,$0, 10
syscall
__________________________________________________________________________
Equivalent C++ Code:
#include
using namespace std;
int main(void)
{
int sum = 0;
int size = 10;
int sumarr[] = {1,3,44,66,88,90,9,232,4325,2321};
for(int i = 0; i < size; i++){
sum = sum + sumarr[i];
}
int num = 45689;
int rev = 0;
int d = -1;
while( num > 0){
d = num % 10;
rev = rev*10 + d;
num = num / 10;
}
int arr[] = {1,2,3,4,5,4,3,2,1};
int beg = 0;
int end = 8;
int isPalindrome = 1;
while(beg < end){
if (arr[beg] != arr[end]){
isPalindrome = -1;
break;
}
beg++;
end--;
}
cout << "Sum: " << sum << endl;
cout << "Reversed Number: " << rev << endl;
cout << "Is Palindrome: " << isPalindrome << endl;
return 0;
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started