Question: Translate the following into MIPS assembly language: #include using namespace std; int a1[12], a2[12], a3[12]; char einStr[] = Enter integer #; char moStr[] = Max

Translate the following into MIPS assembly language:

#include

using namespace std;

int a1[12],

a2[12],

a3[12];

char einStr[] = "Enter integer #";

char moStr[] = "Max of ";

char ieStr[] = " ints entered...";

char emiStr[] = "Enter more ints? (n or N = no, others = yes) ";

char begA1Str[] = "beginning a1: ";

char am1dA1Str[] = "a1 (dups<=1): ";

char procA1Str[] = "processed a1: ";

char procA2Str[] = " a2: ";

char procA3Str[] = " a3: ";

char dacStr[] = "Do another case? (n or N = no, others = yes) ";

char dlStr[] = "================================";

char byeStr[] = "bye...";

int main()

{

char reply;

int used1,

used2,

used3,

truncAvg,

found,

sum,

*hopPtr1,

*hopPtr11,

*hopPtr2,

*hopPtr3,

*endPtr1,

*endPtr11,

*endPtr2,

*endPtr3;

reply = 'y';

//while (reply != 'n' && reply != 'N')

goto WTest1;

begW1:// {

used1 = 0;

hopPtr1 = a1;

//while (reply != 'n' && reply != 'N')

goto WTest2;

begW2:// {

cout << einStr;

cout << (used1 + 1);

cout << ':' << ' ';

cin >> *hopPtr1;

++used1;

++hopPtr1;

//if (used1 < 12)

if (used1 >= 12) goto else1;

begI1:// {

cout << emiStr;

cin >> reply;

goto endI1;

// }

else1:// else

// {

cout << moStr << 12 << ieStr << endl;

reply = 'n';

endI1:// }

//WTest2: if (reply != 'n' && reply != 'N') goto begW2;

WTest2: if (reply == 'n') goto xitW2;

if (reply != 'N') goto begW2;

endW2:// }

xitW2:

cout << begA1Str;

//if (used1 > 0)

if (used1 <= 0) goto endI2;

begI2:// {

hopPtr1 = a1;

endPtr1 = a1 + used1;

// do

begDW1:// {

cout << *hopPtr1 << ' ' << ' ';

++hopPtr1;

endDW1:// }

//while (hopPtr1 < endPtr1);

DWTest1: if (hopPtr1 < endPtr1) goto begDW1;

endI2:// }

cout << endl;

//if (used1 > 1)

if (used1 <= 1) goto else3;

begI3:// {

hopPtr1 = a1;

endPtr1 = a1 + used1 - 1;

//while (hopPtr1 < endPtr1)

goto WTest3;

begW3:// {

found = 0;

//for (hopPtr2 = hopPtr1 + 1, endPtr2 = a1 + used1; hopPtr2 < endPtr2; ++hopPtr2)

hopPtr2 = hopPtr1 + 1;

endPtr2 = a1 + used1;

goto FTest1;

begF1:// {

//if (*hopPtr2 == *hopPtr1)

if (*hopPtr2 != *hopPtr1) goto endI4;

begI4:// {

//if (found == 1)

if (found != 1) goto else5;

begI5:// {

//for (hopPtr3 = hopPtr2 + 1, endPtr3 = a1 + used1; hopPtr3 < endPtr3; ++hopPtr3)

hopPtr3 = hopPtr2 + 1;

endPtr3 = a1 + used1;

goto FTest2;

begF2:// {

*(hopPtr3 - 1) = *hopPtr3;

++hopPtr3;

FTest2: if (hopPtr3 < endPtr3) goto begF2;

endF2:// }

--used1;

--endPtr1;

--endPtr2;

--endPtr3;

--hopPtr2;

goto endI5;

// }

else5:// else

// {

++found;

endI5:// }

endI4:// }

++hopPtr2;

FTest1: if (hopPtr2 < endPtr2) goto begF1;

endF1:// }

++hopPtr1;

WTest3: if (hopPtr1 < endPtr1) goto begW3;

endW3:// }

cout << am1dA1Str;

//if (used1 > 0)

if (used1 <= 0) goto endI6;

begI6:// {

hopPtr1 = a1;

endPtr1 = a1 + used1;

// do

begDW2:// {

cout << *hopPtr1 << ' ' << ' ';

++hopPtr1;

endDW2:// }

//while (hopPtr1 < endPtr1);

DWTest2: if (hopPtr1 < endPtr1) goto begDW2;

endI6:// }

cout << endl;

//if (used1 > 0)

if (used1 <= 0) goto endI7;

begI7:// {

sum = 0;

hopPtr1 = a1 + used1 - 1;

endPtr1 = a1;

// do

begDW3:// {

sum += *hopPtr1;

--hopPtr1;

endDW3:// }

//while (hopPtr1 >= endPtr1);

DWTest3: if (hopPtr1 >= endPtr1) goto begDW3;

truncAvg = sum / used1;

used2 = 0;

used3 = 0;

hopPtr2 = a2;

hopPtr3 = a3;

//for (hopPtr1 = a1, endPtr1 = a1 + used1; hopPtr1 < endPtr1; ++hopPtr1)

hopPtr1 = a1;

endPtr1 = a1 + used1;

goto FTest3;

begF3:// {

//if (*hopPtr1 != truncAvg)

if (*hopPtr1 == truncAvg) goto endI8;

begI8:// {

//if (*hopPtr1 < truncAvg)

if (*hopPtr1 >= truncAvg) goto else9;

begI9:// {

*hopPtr2 = *hopPtr1;

++used2;

++hopPtr2;

goto endI9;

// }

else9:// else

// {

*hopPtr3 = *hopPtr1;

++used3;

++hopPtr3;

endI9:// }

//for (hopPtr11 = hopPtr1 + 1, endPtr11 = a1 + used1; hopPtr11 < endPtr11; ++hopPtr11)

hopPtr11 = hopPtr1 + 1;

endPtr11 = a1 + used1;

goto FTest4;

begF4:// {

*(hopPtr11 - 1) = *hopPtr11;

++hopPtr11;

FTest4: if (hopPtr11 < endPtr11) goto begF4;

endF4:// }

--used1;

--endPtr1;

--hopPtr1;

endI8:// }

++hopPtr1;

FTest3: if (hopPtr1 < endPtr1) goto begF3;

endF3:// }

//if (used1 == 0)

if (used1 != 0) goto endI10;

begI10:// {

*(a1+ 0) = truncAvg;

++used1;

endI10:// }

endI7:// }

goto endI3;

// }

else3:// else

// {

hopPtr1 = a1;

cout << am1dA1Str;

cout << *hopPtr1;

cout << endl;

used2 = 0;

used3 = 0;

endI3:// }

cout << procA1Str;

//if (used1 > 0)

if (used1 <= 0) goto endI11;

begI11:// {

hopPtr1 = a1;

endPtr1 = a1 + used1;

// do

begDW4:// {

cout << *hopPtr1 << ' ' << ' ';

++hopPtr1;

endDW4:// }

//while (hopPtr1 < endPtr1);

DWTest4: if (hopPtr1 < endPtr1) goto begDW4;

endI11:// }

cout << endl;

cout << procA2Str;

//if (used2 > 0)

if (used2 <= 0) goto endI12;

begI12:// {

hopPtr2 = a2;

endPtr2 = a2 + used2;

// do

begDW5:// {

cout << *hopPtr2 << ' ' << ' ';

++hopPtr2;

endDW5:// }

//while (hopPtr2 < endPtr2);

DWTest5: if (hopPtr2 < endPtr2) goto begDW5;

endI12:// }

cout << endl;

cout << procA3Str;

//if (used3 > 0)

if (used3 <= 0) goto endI13;

begI13:// {

hopPtr3 = a3;

endPtr3 = a3 + used3;

// do

begDW6:// {

cout << *hopPtr3 << ' ' << ' ';

++hopPtr3;

endDW6:// }

//while (hopPtr3 < endPtr3);

DWTest6: if (hopPtr3 < endPtr3) goto begDW6;

endI13:// }

cout << endl;

cout << dacStr;

cin >> reply;

//WTest1: if (reply != 'n' && reply != 'N') goto begW1;

WTest1: if (reply == 'n') goto xitW1;

if (reply != 'N') goto begW1;

endW1:// }

xitW1:

cout << dlStr << ' ';

cout << byeStr << ' ';

cout << dlStr << ' ';

return 0;

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!