Hey everyone,

I've been getting my rear end kicked by this homework assignment. We were given the task of writing up a command line version of Othello (Reversi) in a higher level language, which I chose C++ to do so in. My C++ version of the code is working great, however, I can't seem to get off the ground in MIPS. I was wondering if anyone knew a good way to convert the C++ code to MIPS. I'm currently on a Windows box, using Bloodshed IDE for my C++ code, but I also picked up Microsoft Visual C++ 2008 Express Edition today to give it a try and see if there was something in there to help convert the code. I've also got access to some Fedora Core 7 computers in the computer lab, with a lot of different things on there. Any help would be appreciated. I've also put a copy of this in the C++ forum, hopefully this is ok.

VC++ 2005 Express can produce the assembly code for you but it won't produce assembly code for the standard c and c++ library functions that your program calls. Unless your teacher lets you link with standard C or C++ libraries, which I doubt, you wil have to write those functions yourself.

Where is that functionality located in Express? I poked around in different menus and was unable to find it, although the documentation that I was looking at was not very helpful.

Project --> Properties (the last item in the menu) --> Configuration Properties --> C/C++ -> Output Files --> then on the right side of the screen you will see Assembly Output

One more quick question - is the assembly code outputted MIPS? I took a look at it, and it seemed to be quite a bit different, but it might be that it is using functions that I've not encountered yet.

>>is the assembly code outputted MIPS
No. Its Intell 80X88, you will have to translate it to MIPS.

You can get free eVC++ 4.0 which is for embedded WinCE and PocketPC devices which can produe MIPS assembly. Depending on your program that compiler may or may not be able to compile it.

I got some hints on how to convert the program from C++ to the Intel 80X88 Assembly code, so if someone knows a good, fairly quick way of converting that into MIPS, that would also be great. I still think that C++ directly to MIPS would be a little faster, but whichever way gets the job done gets the job done.

I was trying to install eVC++ earlier today and I got a funky error when I was doing so (on the install of the Platform Manager). I'll try that again, however, and see if I can find out more information about the error I was getting.

If your assignment was to do it in a high level language then why play with assembly?

The fastest way to convert would be to tell the compiler to produces assembly source instead of a binary image. If you are using the GCC: g++ -S -fverbose-asm foo.cpp Other compilers will vary.

BTW. Good luck. C++ is pretty darn high level.

I've got eVC++ 4.0 installed, along with the most recent service pack, however, (and I'm not sure if this is just isolated to my machine) it will not build any projects, as it says I need to select a platform, although there is no place on the project menu to select a platform.

If your assignment was to do it in a high level language then why play with assembly?

The fastest way to convert would be to tell the compiler to produces assembly source instead of a binary image. If you are using the GCC: g++ -S -fverbose-asm foo.cpp Other compilers will vary.

BTW. Good luck. C++ is pretty darn high level.

This is not MIPS, I am just curious on what it is, thanks...

i have attach the files above.. do anyone can convert this C++ file to assembly language

Attachments
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

/*
MasterMind Computer Player, By Aytek Ustundag (holyone@tahribat.com)
*/

using namespace std;

int probabilitycount=0;
string probabilities[120];


inline bool hasduplicate(string s)
{
int k;
int j;
for (j=0;j<4;j++)
for (k=0;k<4;k++)
{
	if (k!=j)
	if (s[k]==s[j]) { return true;}
}
return false;
}



inline bool checkstring(string s)
{
if (s.length()!=4) return false;
if (s[0]== 0x30) return false;
if (hasduplicate(s)) return false;
return true;
}




int HowManyAreCorrect(string a,string b)
{
int t=0;
for(int i=0;i<4;i++)
{		
if (a[i]==b[i])	t++;
}
return t;
}





int HowManyAreMisplaced(string a, string b)
{
int l=0;
for(int i=0;i<4;i++)
{
	for(int j=0;j<4;j++)
		if((a[i]==b[j])&&(i!=j))
		{
		l++;
		}
}
	return l;
}




 string generatestringfromnumbers(int i,int j,int k,int l)
 {
 string result="";
 result+= char(0x30+i);
 result+= char(0x30+j);
 result+= char(0x30+k);
 result+= char(0x30+l);
 return result;
 }


 void eliminateprobability(int i)
 {
 int x;
 for (x=i;x<probabilitycount;x++)
 {
 probabilities[x]=probabilities[x+1];
 }
 probabilitycount=probabilitycount-1;
 }



int main()
{

srand(time(0));
cout<<endl;
cout<<"                     Wellcome to Mastermind - Computer Player\n";
cout<<"--------------------------------------------------------------------------------\n";
cout<<" hold a random 4 digit number with diffrent digits\n";
cout<<" I will tell you the number, just give me the information about \n";
cout<<" how many of the digits that i guessed right, and how many in wrong places \n";
cout<<" DONT TRY TO FOOL ME HUMAN!, BECAUSE I CAN FIND IT OUT!\n";
cout<<" Lets start the game if you are ready.\n\n";

short int correct,wrongplace,i,j,k,l;
string lastguess;

string Temp[120];

//Generating probability List
for (i=0;i<5;i++) 
for (j=0;j<5;j++) 
for (k=0;k<5;k++) 
for (l=0;l<5;l++) 
{
if (checkstring( generatestringfromnumbers(i,j,k,l) )==true)
{
probabilities[probabilitycount]= generatestringfromnumbers(i,j,k,l);
probabilitycount+=1;
}
}
//Done Generating probability List

int GuessCnt=0;
do {
lastguess=probabilities[rand()%probabilitycount];

if (probabilitycount==1)
cout<<endl<<" There is only one probability left. And it Has to be be Right!\n"<<endl;
else cout<<endl<<" There is "<<probabilitycount<<" probabilities.\n";
cout<<" My guess: "<<lastguess<<endl<<endl;
cout<<" Input number of correct digits and input number of misplaced digits:\n";
cout<<endl;
cout<<"How many are correct?\t:";
cin>>correct;
cout<<"How many are misplaced?\t:";
cin>>wrongplace;
GuessCnt++;
i=0;
do
{
if ((HowManyAreCorrect(probabilities[i],lastguess)!=correct) || (HowManyAreMisplaced(probabilities[i],lastguess)!=wrongplace))
eliminateprobability(i); else
i++;
} while ((i<probabilitycount) && (probabilitycount>=0));



//delete slashes to see the probabilities left at your each guess
//for (j=0;j<probabilitycount+1;j++) cout<<probabilities[j]<<endl; cout<<"probabilitycount:"<<probabilitycount<<endl;


} while (((correct!=4) || (wrongplace!=0) )&& (probabilitycount>0));

//do {cout<<"Guess again:\n"; cin>>b;} while(checkstring(b)==false);

if (probabilitycount<=0)
{ 
cout<<" You Can't Fool me human, The datas you have provided are invalid.\n";
cout<<" Dont Try it again... I can sense you cheating.\n";
return -1;
}
cout<<"\n I found it in "<<GuessCnt<<" Guesses Human."<<endl;
cout<<" See ya later..."<<endl;

return 0;
}

Apart from hijacking a dead thread, what's your question?
Find a compiler which targets the ASM you want, and follow the instructions earlier in the thread.

This article has been dead for over six months. Start a new discussion instead.