// Convert the following code into MIPS #include<iostream> #include<cstring> usi
ID: 3731050 • Letter: #
Question
//Convert the following code into MIPS
#include<iostream>
#include<cstring>
using namespace std;
//method to reverse the string
char *Reverse(char *s)
{
int len=strlen(s);//finding length of the string
char *front=s;//0th index
char *rear=(s+(len-1));//last index
//condition where front less than rear
while(front<rear)
{
//swaping
char t=*front;
*front=*rear;
*rear=t;
//incrementing front
front++;
//decrementing rear
rear--;
}
//returning reversed string
return s;
}
//main method
int main()
{
//Allocating memory for the string
char *s=new char[sizeof(char)*100];
//prompting user to enter string
cout<<" Enter a string: ";
cin>>s;
//passing string to Reverse method
s=Reverse(s);
//displaying string after reversing
cout<<" After reversing: ";
cout<<s;
//deleting memory allocated
delete [] s;
s=NULL;
}
Explanation / Answer
MIPS Code:
Reverse(char*):
addiu $sp,$sp,-48
sw $31,44($sp)
sw $fp,40($sp)
move $fp,$sp
sw $4,48($fp)
lw $4,48($fp)
jal strlen
nop
sw $2,32($fp)
lw $2,48($fp)
nop
sw $2,24($fp)
lw $2,32($fp)
nop
addiu $2,$2,-1
lw $3,48($fp)
nop
addu $2,$3,$2
sw $2,28($fp)
$L3:
lw $3,24($fp)
lw $2,28($fp)
nop
sltu $2,$3,$2
beq $2,$0,$L2
nop
lw $2,24($fp)
nop
lbu $2,0($2)
nop
sb $2,36($fp)
lw $2,28($fp)
nop
lb $3,0($2)
lw $2,24($fp)
nop
sb $3,0($2)
lw $2,28($fp)
lbu $3,36($fp)
nop
sb $3,0($2)
lw $2,24($fp)
nop
addiu $2,$2,1
sw $2,24($fp)
lw $2,28($fp)
nop
addiu $2,$2,-1
sw $2,28($fp)
b $L3
nop
$L2:
lw $2,48($fp)
move $sp,$fp
lw $31,44($sp)
lw $fp,40($sp)
addiu $sp,$sp,48
j $31
nop
$LC0:
.ascii " Enter a string: "
$LC1:
.ascii " After reversing: "
main:
addiu $sp,$sp,-40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
li $2,100 # 0x64
move $4,$2
jal operator new[](unsigned int)
nop
sw $2,24($fp)
lui $2,%hi($LC0)
addiu $5,$2,%lo($LC0)
lui $2,%hi(std::cout)
addiu $4,$2,%lo(std::cout)
jal std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
nop
lw $5,24($fp)
lui $2,%hi(std::cin)
addiu $4,$2,%lo(std::cin)
jal std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char*)
nop
lw $4,24($fp)
jal Reverse(char*)
nop
sw $2,24($fp)
lui $2,%hi($LC1)
addiu $5,$2,%lo($LC1)
lui $2,%hi(std::cout)
addiu $4,$2,%lo(std::cout)
jal std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
nop
lw $5,24($fp)
lui $2,%hi(std::cout)
addiu $4,$2,%lo(std::cout)
jal std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
nop
lw $2,24($fp)
nop
beq $2,$0,$L6
nop
lw $4,24($fp)
jal operator delete[](void*)
nop
$L6:
sw $0,24($fp)
move $2,$0
move $sp,$fp
lw $31,36($sp)
lw $fp,32($sp)
addiu $sp,$sp,40
j $31
nop
__static_initialization_and_destruction_0(int, int):
addiu $sp,$sp,-32
sw $31,28($sp)
sw $fp,24($sp)
move $fp,$sp
sw $4,32($fp)
sw $5,36($fp)
lw $3,32($fp)
li $2,1 # 0x1
bne $3,$2,$L10
nop
lw $3,36($fp)
li $2,65535 # 0xffff
bne $3,$2,$L10
nop
lui $2,%hi(std::__ioinit)
addiu $4,$2,%lo(std::__ioinit)
jal std::ios_base::Init::Init()
nop
lui $2,%hi(__dso_handle)
addiu $6,$2,%lo(__dso_handle)
lui $2,%hi(std::__ioinit)
addiu $5,$2,%lo(std::__ioinit)
lui $2,%hi(std::ios_base::Init::~Init())
addiu $4,$2,%lo(std::ios_base::Init::~Init())
jal __cxa_atexit
nop
$L10:
nop
move $sp,$fp
lw $31,28($sp)
lw $fp,24($sp)
addiu $sp,$sp,32
j $31
nop
_GLOBAL__sub_I__Z7ReversePc:
addiu $sp,$sp,-32
sw $31,28($sp)
sw $fp,24($sp)
move $fp,$sp
li $5,65535 # 0xffff
li $4,1 # 0x1
jal __static_initialization_and_destruction_0(int, int)
nop
move $sp,$fp
lw $31,28($sp)
lw $fp,24($sp)
addiu $sp,$sp,32
j $31
nop
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.