I need assistance translating a custom C++ program to MIPS. My C++ code is the following:...

70.2K

Verified Solution

Question

Programming

I need assistance translating a custom C++ program to MIPS. MyC++ code is the following: I have made numerous attempts on my ownto no avail, any assistance is appreciated. Also, template code forthis solution is provided below:

#include

int moveRobots(int *, int *, int, int );

int getNew(int, int);

int main()

{

int x[4], y[4], i, j, myX = 25, myY = 25, move, status = 1;

// initialize positions of four robots

x[0] = 0; y[0] = 0;

x[1] = 0; y[1] = 50;

x[2] = 50; y[2] = 0;

x[3] = 50; y[3] = 50;

cout << \"Your coordinates: 25 25\n\";

while (status == 1) {

    cout << \"Enter move (1 for +x, -1 for-x, 2 for + y, -2 for -y):\";

    cin >> move;

    // process user's move

    if (move == 1)

      myX++;

    else if (move == -1)

      myX--;

    else if (move == 2)

      myY++;

    else if (move == -2)

      myY--;

    // update robot positions

    status =moveRobots(&x[0],&y[0],myX,myY);

    cout << \"Your coordinates: \" <

   

    for (i=0;i<4;i++)

      cout << \"Robot at \"<< x[i] << \" \" << y[i] << endl;

}

cout << \"AAAARRRRGHHHHH... Game over\n\";

}

int moveRobots(int *arg0, int *arg1, int arg2, int arg3)

{

int i, *ptrX, *ptrY, alive = 1;

ptrX = arg0;

ptrY = arg1;

  for (i=0;i<4;i++) {

    *ptrX = getNew(*ptrX,arg2); // updatex-coordinate of robot i

    *ptrY = getNew(*ptrY,arg3); // updatey-coordinate of robot i

    // check if robot caught user

    if ((*ptrX == arg2) && (*ptrY ==arg3)) {

      alive = 0;

      break;

    }

    ptrX++;

    ptrY++;

}

return alive;

}

// move coordinate of robot closer to coordinate of user

int getNew(int arg0, int arg1)

{

int temp, result;

temp = arg0 - arg1;

if (temp >= 10)

    result = arg0 - 10;

else if (temp > 0)

    result = arg0 - 1;

else if (temp == 0)

    result = arg0;

else if (temp > -10)

    result = arg0 + 1;

else if (temp <= -10)

    result = arg0 + 10;

return result;

}

The following template code is given:

#
#   A proper program header goes here...
#
#
   .data      
x:   .word   0:4   # x-coordinates of4 robots
y:   .word   0:4   # y-coordinates of4 robots

str1:   .asciiz   \"Your coordinates: 2525\n\"
str2:   .asciiz   \"Enter move (1 for +x, -1 for-x, 2 for + y, -2 for -y):\"
str3:   .asciiz   \"Your coordinates: \"
sp:   .asciiz   \" \"
endl:   .asciiz   \"\n\"
str4:   .asciiz   \"Robot at \"
str5:   .asciiz   \"AAAARRRRGHHHHH... Gameover\n\"
  
#i   $s0
#myX   $s1
#myY   $s2
#move   $s3
#status   $s4
#temp,pointers   $s5,$s6
   .text
#   .globl   inc
#   .globl   getNew

main:   li   $s1,25      # myX = 25
   li   $s2,25       #myY = 25
   li   $s4,1       #status = 1

   la   $s5,x
   la   $s6,y

   sw   $0,($s5)   # x[0] = 0;y[0] = 0;
   sw   $0,($s6)
   sw   $0,4($s5)   # x[1] = 0; y[1]= 50;
   li   $s7,50
   sw   $s7,4($s6)
   sw   $s7,8($s5)   # x[2] = 50;y[2] = 0;
   sw   $0,8($s6)
   sw   $s7,12($s5)   # x[3] = 50;y[3] = 50;
   sw   $s7,12($s6)

   la   $a0,str1   # cout <<\"Your coordinates: 25 25\n\";
   li   $v0,4
   syscall
  
   bne   $s4,1,main_exitw   # while(status == 1) {
main_while:
   la   $a0,str2   # cout <<\"Enter move (1 for +x,
   li   $v0,4      #   -1 for -x, 2 for + y, -2 for -y):\";
   syscall
  
   li   $v0,5       #cin >> move;
   syscall
   move   $s3,$v0

   bne   $s3,1,main_else1# if (move ==1)
   add   $s1,$s1,1   # myX++;
   b   main_exitif
main_else1:
   bne   $s3,-1,main_else2   # elseif (move == -1)
   add   $s1,$s1,-1   # myX--;
   b   main_exitif
main_else2:
   bne   $s3,2,main_else3   # else if(move == 2)
   add   $s2,$s2,1   # myY++;
   b   main_exitif
main_else3:   bne  $s3,-2,main_exitif   # else if (move == -2)
   add   $s2,$s2,-1   # myY--;
  
main_exitif:   la   $a0,x      # status =moveRobots(&x[0],&y[0],myX,myY);
   la   $a1,y
   move   $a2,$s1
   move   $a3,$s2
   jal   moveRobots
   move   $s4,$v0

   la   $a0,str3   # cout <<\"Your coordinates: \" << myX
   li   $v0,4       #<< \" \" << myY << endl;
   syscall
   move   $a0,$s1
   li   $v0,1
   syscall
   la   $a0,sp
   li   $v0,4
   syscall
   move   $a0,$s2
   li   $v0,1
   syscall
   la   $a0,endl
   li   $v0,4
   syscall

   la   $s5,x
   la   $s6,y
   li   $s0,0       #for (i=0;i<4;i++)
main_for:   la   $a0,str4   # cout<< \"Robot at \" << x[i] << \" \"
   li   $v0,4       #<< y[i] << endl;
   syscall
   lw   $a0,($s5)
   li   $v0,1
   syscall
   la   $a0,sp
   li   $v0,4
   syscall
   lw   $a0,($s6)
   li   $v0,1
   syscall
   la   $a0,endl
   li   $v0,4
   syscall
   add   $s5,$s5,4
   add   $s6,$s6,4
   add   $s0,$s0,1
   blt   $s0,4,main_for

   beq   $s4,1,main_while
              # }         
main_exitw:   la   $a0,str5   # cout<< \"AAAARRRRGHHHHH... Game over\n\";
   li   $v0,4
   syscall
   li   $v0,10      #}
   syscall

Answer & Explanation Solved by verified expert
4.1 Ratings (517 Votes)
addiu spsp88 sw 3184sp sw fp80sp move fpsp li 225 0x19 sw 228fp li 225 0x19 sw 232fp li 21 0x1 sw 236fp sw 040fp sw 056fp sw 044fp li 250 0x32 sw 260fp li 250 0x32 sw    See Answer
Get Answers to Unlimited Questions

Join us to gain access to millions of questions and expert answers. Enjoy exclusive benefits tailored just for you!

Membership Benefits:
  • Unlimited Question Access with detailed Answers
  • Zin AI - 3 Million Words
  • 10 Dall-E 3 Images
  • 20 Plot Generations
  • Conversation with Dialogue Memory
  • No Ads, Ever!
  • Access to Our Best AI Platform: Flex AI - Your personal assistant for all your inquiries!
Become a Member

Other questions asked by students