From 32f70bb97465849fd4aec745162bb0df3fc34fe2 Mon Sep 17 00:00:00 2001 From: black Date: Tue, 8 Jul 2025 11:11:31 +0200 Subject: [PATCH] added ALU documentation --- src/components/Alu.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/components/Alu.cpp b/src/components/Alu.cpp index 9361216..88c2262 100644 --- a/src/components/Alu.cpp +++ b/src/components/Alu.cpp @@ -26,52 +26,82 @@ void Alu::calculate(const std::vector &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); } }