Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

// 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