Operators wip

This commit is contained in:
Hazem Krimi
2024-04-16 19:22:09 +01:00
parent ed27ad8c3b
commit 9760124dc7
8 changed files with 363 additions and 215 deletions
+101
View File
@@ -0,0 +1,101 @@
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ArithmeticOperator determineArithmeticOperator(string arithmeticOperator)
{
if (arithmeticOperator == "add")
return ArithmeticOperator::ADD;
if (arithmeticOperator == "sub")
return ArithmeticOperator::SUB;
if (arithmeticOperator == "neg")
return ArithmeticOperator::NEG;
return ArithmeticOperator::NEG;
}
string translateAdd()
{
stringstream output;
output << "@SP" << endl;
output << "M=M-1" << endl;
output << "A=M" << endl;
output << "D=M" << endl;
output << "@R" << endl;
output << "M=D" << endl;
output << "@SP" << endl;
output << "M=M-1" << endl;
output << "A=M" << endl;
output << "D=M" << endl;
output << "@R" << endl;
output << "M=D+M" << endl;
output << "D=M" << endl;
output << "@SP" << endl;
output << "A=M" << endl;
output << "M=D" << endl;
output << "@SP" << endl;
output << "M=M+1" << endl;
return output.str();
}
string translateSub()
{
stringstream output;
output << "@SP" << endl;
output << "M=M-1" << endl;
output << "A=M" << endl;
output << "D=M" << endl;
output << "@R" << endl;
output << "M=D" << endl;
output << "@SP" << endl;
output << "M=M-1" << endl;
output << "A=M" << endl;
output << "D=M" << endl;
output << "@R" << endl;
output << "M=D-M" << endl;
output << "D=M" << endl;
output << "@SP" << endl;
output << "A=M" << endl;
output << "M=D" << endl;
output << "@SP" << endl;
output << "M=M+1" << endl;
return output.str();
}
string translateNeg()
{
stringstream output;
output << "@SP" << endl;
output << "M=M-1" << endl;
output << "A=M" << endl;
output << "D=M" << endl;
output << "@R" << endl;
output << "M=D" << endl;
output << "M=M-D" << endl;
output << "M=M-D" << endl;
output << "D=M" << endl;
output << "@SP" << endl;
output << "A=M" << endl;
output << "M=D" << endl;
output << "@SP" << endl;
output << "M=M+1" << endl;
return output.str();
}