added ALU documentation
This commit is contained in:
@@ -26,52 +26,82 @@ void Alu::calculate(const std::vector<std::string> &commandVector) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (command == "add") {
|
if (command == "add") {
|
||||||
|
/// Addition Befehl
|
||||||
|
/// Hole die Werte beider angegebener Register
|
||||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||||
const auto register2 = Register::getInstance().getRegister(arg3);
|
const auto register2 = Register::getInstance().getRegister(arg3);
|
||||||
|
/// Addiere die beiden Werte und schreibe das Ergebnis ins angegebene Register zurück
|
||||||
const auto result = register1 + register2;
|
const auto result = register1 + register2;
|
||||||
Register::getInstance().setRegister(arg1, result);
|
Register::getInstance().setRegister(arg1, result);
|
||||||
} else if (command == "sub") {
|
} else if (command == "sub") {
|
||||||
|
/// Subtraktion Befehl
|
||||||
|
/// Hole die Werte beider angegebener Register
|
||||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||||
const auto register2 = Register::getInstance().getRegister(arg3);
|
const auto register2 = Register::getInstance().getRegister(arg3);
|
||||||
|
/// Subtrahiere die beiden Werte und schreibe das Ergebnis ins angegebene Register zurück
|
||||||
const auto result = register1 - register2;
|
const auto result = register1 - register2;
|
||||||
Register::getInstance().setRegister(arg1, result);
|
Register::getInstance().setRegister(arg1, result);
|
||||||
} else if (command == "and") {
|
} else if (command == "and") {
|
||||||
|
/// Binärer und Befehl
|
||||||
|
/// Hole die Werte beider angegebener Register
|
||||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||||
const auto register2 = Register::getInstance().getRegister(arg3);
|
const auto register2 = Register::getInstance().getRegister(arg3);
|
||||||
|
/// Verknüpfe die beiden Werte binär und schreibe das Ergebnis ins angegebene Register zurück
|
||||||
const auto result = register1 & register2;
|
const auto result = register1 & register2;
|
||||||
Register::getInstance().setRegister(arg1, result);
|
Register::getInstance().setRegister(arg1, result);
|
||||||
} else if (command == "or") {
|
} else if (command == "or") {
|
||||||
|
/// Binärer oder Befehl
|
||||||
|
/// Hole die Werte beider angegebener Register
|
||||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||||
const auto register2 = Register::getInstance().getRegister(arg3);
|
const auto register2 = Register::getInstance().getRegister(arg3);
|
||||||
|
/// Unterscheide die beiden Werte binär und schreibe das Ergebnis ins angegebene Register zurück
|
||||||
const auto result = register1 | register2;
|
const auto result = register1 | register2;
|
||||||
Register::getInstance().setRegister(arg1, result);
|
Register::getInstance().setRegister(arg1, result);
|
||||||
} else if (command == "xor") {
|
} else if (command == "xor") {
|
||||||
|
/// Binärer exklusiver oder Befehl
|
||||||
|
/// Hole die Werte beider angegebener Register
|
||||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||||
const auto register2 = Register::getInstance().getRegister(arg3);
|
const auto register2 = Register::getInstance().getRegister(arg3);
|
||||||
|
/// Unterscheide die beiden Werte binär exklusiv und schreibe das Ergebnis ins angegebene Register zurück
|
||||||
const auto result = register1 ^ register2;
|
const auto result = register1 ^ register2;
|
||||||
Register::getInstance().setRegister(arg1, result);
|
Register::getInstance().setRegister(arg1, result);
|
||||||
} else if (command == "addi") {
|
} else if (command == "addi") {
|
||||||
|
/// Immediate und Befehl
|
||||||
|
/// Hole Wert1 aus dem angegebenen Register und Wert2 aus dem Befehlsargument
|
||||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||||
const auto immediate = arg3;
|
const auto immediate = arg3;
|
||||||
|
/// Addiere die beiden Werte und schreibe das Ergebnis ins angegebene Register zurück
|
||||||
const auto result = register1 + immediate;
|
const auto result = register1 + immediate;
|
||||||
Register::getInstance().setRegister(arg1, result);
|
Register::getInstance().setRegister(arg1, result);
|
||||||
} else if (command == "andi") {
|
} else if (command == "andi") {
|
||||||
|
/// Binärer immediate und Befehl
|
||||||
|
/// Hole Wert1 aus dem angegebnen Register und Wert2 aus dem Befehlsargument
|
||||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||||
const auto immediate = arg3;
|
const auto immediate = arg3;
|
||||||
|
/// Addiere die beiden Werte und schreibe das Ergebnis ins angegebene Register zurück
|
||||||
const auto result = register1 & immediate;
|
const auto result = register1 & immediate;
|
||||||
Register::getInstance().setRegister(arg1, result);
|
Register::getInstance().setRegister(arg1, result);
|
||||||
} else if (command == "ori") {
|
} else if (command == "ori") {
|
||||||
|
/// Binärer immediate oder Befehl
|
||||||
|
/// Hole Wert1 aus dem angegebenen Register und Wert2 aus dem Befehlsargument
|
||||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||||
const auto immediate = arg3;
|
const auto immediate = arg3;
|
||||||
|
/// Unterscheide beide Werte binär und schreibe das Ergebnis ins angegebene Register zurück
|
||||||
const auto result = register1 | immediate;
|
const auto result = register1 | immediate;
|
||||||
Register::getInstance().setRegister(arg1, result);
|
Register::getInstance().setRegister(arg1, result);
|
||||||
} else if (command == "lw") {
|
} else if (command == "lw") {
|
||||||
|
/// Loadword Befehl
|
||||||
|
/// Hole die Adresse aus dem Befehlsargument und die dazugehörigen Daten aus dem RAM
|
||||||
const auto address = arg2;
|
const auto address = arg2;
|
||||||
const auto data = Memory::getInstance()->load(address);
|
const auto data = Memory::getInstance()->load(address);
|
||||||
|
/// Speichere die Daten im angegeben Register
|
||||||
Register::getInstance().setRegister(arg1, data);
|
Register::getInstance().setRegister(arg1, data);
|
||||||
} else if (command == "sw") {
|
} else if (command == "sw") {
|
||||||
|
/// Storeword Befehl
|
||||||
|
/// Hole die Adresse aus dem Befehlsargument und die dazugehörigen Daten aus dem Register
|
||||||
const auto address = arg2;
|
const auto address = arg2;
|
||||||
const auto data = Register::getInstance().getRegister(arg1);
|
const auto data = Register::getInstance().getRegister(arg1);
|
||||||
|
/// Speichere die Daten im angegeben RAM slot
|
||||||
Memory::getInstance()->store(address, data);
|
Memory::getInstance()->store(address, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user