update to c++17 and bug fixes

This commit is contained in:
black
2025-07-08 10:52:42 +02:00
parent 462dedbe72
commit aa04d6177e
5 changed files with 31 additions and 13 deletions

View File

@@ -17,11 +17,11 @@ void Alu::calculate(const std::vector<std::string> &commandVector) {
/// Wandle Vektor[2] (das zweite Argument) nur um, falls es kein SW/LW Argument ist
int arg2 = 0;
if (commandVector.at(2).find('(') != std::string::npos) {
arg2 = parseArgument(commandVector.at(2));
arg2 = parseAddress(commandVector.at(2));
}
/// Wandle Vektor[3] (das dritte Argument) nur um, falls dieser existiert
int arg3 = 0;
if (!commandVector.at(3).empty()) {
if (commandVector.size() > 3) {
arg3 = parseArgument(commandVector.at(3));
}
@@ -66,11 +66,11 @@ void Alu::calculate(const std::vector<std::string> &commandVector) {
const auto result = register1 | immediate;
Register::getInstance().setRegister(arg1, result);
} else if (command == "lw") {
const auto address = parseAddress(commandVector.at(2));
const auto address = arg2;
const auto data = Memory::getInstance()->load(address);
Register::getInstance().setRegister(arg1, data);
} else if (command == "sw") {
const auto address = parseAddress(commandVector.at(2));
const auto address = arg2;
const auto data = Register::getInstance().getRegister(arg1);
Memory::getInstance()->store(address, data);
}
@@ -89,10 +89,9 @@ int Alu::parseAddress(const std::string &argument) {
/// Finde die Position von '(', trenne die den String dort und
/// addiere die umgewandelten Integer zur Adresse
/// Bsp: 0(x1)
const size_t pos = argument.find('(');
if (pos != std::string::npos) {
const auto immediate = std::stoi(argument.substr(0, pos));
const auto register1 = std::stoi(argument.substr(pos + 1));
if (const size_t pos = argument.find('('); pos != std::string::npos) {
const auto immediate = std::stoi(argument.substr(0, pos + 1));
const auto register1 = std::stoi(argument.substr(pos + 2));
const auto address = immediate + register1;
return address;
}