From 7b49d17f90f26394a116348befb5edcdffcedcb6 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sat, 17 Oct 2020 17:37:50 +0200 Subject: Add ret and int --- asm/segment.cpp | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'asm/segment.cpp') diff --git a/asm/segment.cpp b/asm/segment.cpp index db83941..60b8348 100644 --- a/asm/segment.cpp +++ b/asm/segment.cpp @@ -1,20 +1,32 @@ #include "segment.h" +#include "operators.h" + using namespace std::string_literals; size_t Segment::getAddressOfLabel(const std::string& label) - { - size_t address{0}; - auto i{begin()}; - while (i != end()) { - Chunk& chunk{**i}; - address += chunk.size(); - if (typeid(chunk) == typeid(Label)) { - if (dynamic_cast(chunk).name() == label) { - return address; - } +{ + size_t address{0}; + auto i{begin()}; + while (i != end()) { + Chunk& chunk{**i}; + address += chunk.size(); + if (typeid(chunk) == typeid(Label)) { + if (dynamic_cast(chunk).name() == label) { + return address; } } - - throw std::runtime_error("Bad label: "s + label); } + + throw std::runtime_error("Bad label: "s + label); +} + +std::vector Segment::getCode() +{ + std::vector result; + + for (const auto& chunk: *this) + result = result + chunk->getCode(); + + return result; +} -- cgit v1.2.3