diff options
author | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2019-03-06 13:08:28 +0100 |
---|---|---|
committer | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2019-03-06 13:08:28 +0100 |
commit | 74be8fa660f58a646298dc4cdb2280e4c457a574 (patch) | |
tree | 4ca784599280248ead72976644112f75f9ea791e | |
parent | e91fb27de2cad7408039b4155d68fe5441a22219 (diff) | |
download | qtmips-74be8fa660f58a646298dc4cdb2280e4c457a574.tar.gz qtmips-74be8fa660f58a646298dc4cdb2280e4c457a574.tar.bz2 qtmips-74be8fa660f58a646298dc4cdb2280e4c457a574.zip |
Correct parsing of register + offset operands, i.e., LW and SW.
Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
-rw-r--r-- | qtmips_machine/instruction.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/qtmips_machine/instruction.cpp b/qtmips_machine/instruction.cpp index 73246ac..42b70d7 100644 --- a/qtmips_machine/instruction.cpp +++ b/qtmips_machine/instruction.cpp @@ -1017,17 +1017,19 @@ void instruction_from_string_build_base(const InstructionMap *im = nullptr, static int parse_reg_from_string(QString str, uint *chars_taken = nullptr) { int res; + uint ctk; if (str.count() < 2 || str.at(0) != '$') return -1; const char *p = str.toLatin1().data() + 1; char *r; res = std::strtol(p, &r, 0); + ctk = r - p + 1; if (p == r) return -1; if (res > 31) return -1; if (chars_taken != nullptr) - *chars_taken = r - p; + *chars_taken = ctk; return res; } @@ -1122,6 +1124,7 @@ Instruction Instruction::from_string(QString str, bool *pok, uint32_t inst_addr) field = -1; break; } + fl = fl.mid(1); continue; } uint bits = IMF_SUB_GET_BITS(adesc->loc); |