absolute jump
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user