From 45e9218ebd5ec26b54495b58a7368b4298cba027 Mon Sep 17 00:00:00 2001 From: black Date: Wed, 9 Jul 2025 12:31:31 +0200 Subject: [PATCH] added "j" command --- src/Manager.cpp | 10 ++++++---- src/components/Alu.cpp | 18 +++++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/Manager.cpp b/src/Manager.cpp index aeace9e..598c2ee 100644 --- a/src/Manager.cpp +++ b/src/Manager.cpp @@ -111,13 +111,15 @@ std::streampos Manager::getNextStreamLineOffset() { std::string Manager::gotoNextStreamLine() { std::string line; - getline(m_programFile, line); + do { + getline(m_programFile, line); + } while (line.empty()); return line; } bool Manager::handleUserInput() { - constexpr const char *COLOR_GREEN = "\033[32m"; - constexpr const char *COLOR_RESET = "\033[0m"; + constexpr auto COLOR_GREEN = "\033[32m"; + constexpr auto COLOR_RESET = "\033[0m"; std::cout << "\nOptionen: (" << COLOR_GREEN << "s" << COLOR_RESET << ") Programm durchlaufen lassen, (" @@ -170,7 +172,7 @@ void Manager::handleExitInput() { input = std::tolower(input); if (input == 'e') { - std::cout << "Programm wird beendet.\n"; + std::cout << "Programm wird beendet. :pepeExit:\n"; exit(0); // oder andere Beendigung } else if (input == 'm') { std::cout << "Wie viele Speicherzellen sollen gedumpt werden? "; diff --git a/src/components/Alu.cpp b/src/components/Alu.cpp index 7236af3..d6e74e4 100644 --- a/src/components/Alu.cpp +++ b/src/components/Alu.cpp @@ -32,11 +32,13 @@ void Alu::calculate(const std::vector &commandVector) { // Wandle Vektor[2] (das zweite Argument) in eine Adresse um, falls es ein SW/LW Argument ist int arg2 = 0; - if (commandVector.at(2).find('(') != std::string::npos) { - arg2 = parseAddress(commandVector.at(2)); - } else { - // Ansonsten wandle es in ein Registerargument um - arg2 = parseArgument(commandVector.at(2)); + if (commandVector.size() > 2) { + if (commandVector.at(2).find('(') != std::string::npos) { + arg2 = parseAddress(commandVector.at(2)); + } else { + // Ansonsten wandle es in ein Registerargument um + arg2 = parseArgument(commandVector.at(2)); + } } // Wandle Vektor[3] (das dritte Argument) nur um, falls dieser existiert und kein immediate Wert ist @@ -168,6 +170,12 @@ void Alu::calculate(const std::vector &commandVector) { for (int i = 0; i < posOffset; ++i) { man.gotoNextStreamLine(); } + } else if (command == "j") { + // Jump Befehl + // Springe um den immediate value nach vorne (erhöhe den PC) + for (int i = 1; i < arg1; i++) { + man.gotoNextStreamLine(); + } } else { std::cerr << "Befehl " << command << " wurde nicht gefunden!"; }