absolute jump

This commit is contained in:
2024-11-26 17:14:22 +01:00
parent 9738ba1afd
commit eb6cde02a7
2 changed files with 2 additions and 10 deletions

View File

@@ -79,17 +79,11 @@ std::uint32_t Assembleur::ParseOperationImmediate(
} }
std::uint32_t Assembleur::ParseJump(Instruction a_Instruction, const std::string& a_Label) { std::uint32_t Assembleur::ParseJump(Instruction a_Instruction, const std::string& a_Label) {
std::int32_t jump = ParseLabel(a_Label) - a_Instruction.m_Line; return IToInt(a_Instruction) | ParseLabel(a_Label);
if (jump < 0)
jump = std::abs(jump) & 0x7FFFFFF | 0x4000000;
return IToInt(a_Instruction) | jump;
} }
std::uint32_t Assembleur::ParseJump(Instruction a_Instruction, std::uint8_t a_R1, std::uint8_t a_R2, const std::string& a_Label) { std::uint32_t Assembleur::ParseJump(Instruction a_Instruction, std::uint8_t a_R1, std::uint8_t a_R2, const std::string& a_Label) {
std::int32_t jump = ParseLabel(a_Label) - a_Instruction.m_Line; return IToInt(a_Instruction) | a_R1 << 24 | a_R2 << 21 | ParseLabel(a_Label);
if (jump < 0)
jump = std::abs(jump) & 0xFFFFF | 0x100000;
return IToInt(a_Instruction) | a_R1 << 24 | a_R2 << 21 | jump;
} }
std::uint32_t Assembleur::ParseJump(Instruction a_Instruction) { std::uint32_t Assembleur::ParseJump(Instruction a_Instruction) {
@@ -134,7 +128,6 @@ std::uint32_t Assembleur::ParseInstruction(const std::string& a_Str, std::uint32
} }
Instruction instruction = it->second; Instruction instruction = it->second;
instruction.m_Line = a_Line;
try { try {
switch (instruction.m_Instruction) { switch (instruction.m_Instruction) {

View File

@@ -13,7 +13,6 @@ enum TypeInstruction : std::uint8_t {
struct Instruction { struct Instruction {
TypeInstruction m_Instruction; TypeInstruction m_Instruction;
std::uint8_t m_SubInstruction; std::uint8_t m_SubInstruction;
std::uint32_t m_Line;
}; };
class Assembleur { class Assembleur {