added ALU documentation
This commit is contained in:
@@ -26,52 +26,82 @@ void Alu::calculate(const std::vector<std::string> &commandVector) {
|
||||
}
|
||||
|
||||
if (command == "add") {
|
||||
/// Addition Befehl
|
||||
/// Hole die Werte beider angegebener Register
|
||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||
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;
|
||||
Register::getInstance().setRegister(arg1, result);
|
||||
} else if (command == "sub") {
|
||||
/// Subtraktion Befehl
|
||||
/// Hole die Werte beider angegebener Register
|
||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||
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;
|
||||
Register::getInstance().setRegister(arg1, result);
|
||||
} else if (command == "and") {
|
||||
/// Binärer und Befehl
|
||||
/// Hole die Werte beider angegebener Register
|
||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||
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;
|
||||
Register::getInstance().setRegister(arg1, result);
|
||||
} else if (command == "or") {
|
||||
/// Binärer oder Befehl
|
||||
/// Hole die Werte beider angegebener Register
|
||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||
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;
|
||||
Register::getInstance().setRegister(arg1, result);
|
||||
} else if (command == "xor") {
|
||||
/// Binärer exklusiver oder Befehl
|
||||
/// Hole die Werte beider angegebener Register
|
||||
const auto register1 = Register::getInstance().getRegister(arg2);
|
||||
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;
|
||||
Register::getInstance().setRegister(arg1, result);
|
||||
} 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 immediate = arg3;
|
||||
/// Addiere die beiden Werte und schreibe das Ergebnis ins angegebene Register zurück
|
||||
const auto result = register1 + immediate;
|
||||
Register::getInstance().setRegister(arg1, result);
|
||||
} 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 immediate = arg3;
|
||||
/// Addiere die beiden Werte und schreibe das Ergebnis ins angegebene Register zurück
|
||||
const auto result = register1 & immediate;
|
||||
Register::getInstance().setRegister(arg1, result);
|
||||
} 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 immediate = arg3;
|
||||
/// Unterscheide beide Werte binär und schreibe das Ergebnis ins angegebene Register zurück
|
||||
const auto result = register1 | immediate;
|
||||
Register::getInstance().setRegister(arg1, result);
|
||||
} 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 data = Memory::getInstance()->load(address);
|
||||
/// Speichere die Daten im angegeben Register
|
||||
Register::getInstance().setRegister(arg1, data);
|
||||
} 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 data = Register::getInstance().getRegister(arg1);
|
||||
/// Speichere die Daten im angegeben RAM slot
|
||||
Memory::getInstance()->store(address, data);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user