diff --git a/InstructionSets/x86/Instruction.cpp b/InstructionSets/x86/Instruction.cpp index b81019398..39d67bb1d 100644 --- a/InstructionSets/x86/Instruction.cpp +++ b/InstructionSets/x86/Instruction.cpp @@ -81,10 +81,22 @@ std::string InstructionSet::x86::to_string(Operation operation, DataSize size) { constexpr char sizes[][6] = { "cmpsb", "cmpsw", "cmpsd", "?" }; return sizes[static_cast(size)]; } - case Operation::LODS: return "lods"; - case Operation::MOVS: return "movs"; - case Operation::SCAS: return "scas"; - case Operation::STOS: return "stos"; + case Operation::LODS: { + constexpr char sizes[][6] = { "lodsb", "lodsw", "lodsd", "?" }; + return sizes[static_cast(size)]; + } + case Operation::MOVS: { + constexpr char sizes[][6] = { "movsb", "movsw", "movsd", "?" }; + return sizes[static_cast(size)]; + } + case Operation::SCAS: { + constexpr char sizes[][6] = { "scasb", "scasw", "scasd", "?" }; + return sizes[static_cast(size)]; + } + case Operation::STOS: { + constexpr char sizes[][6] = { "stosb", "stosw", "stosd", "?" }; + return sizes[static_cast(size)]; + } case Operation::LOOP: return "loop"; case Operation::LOOPE: return "loope"; diff --git a/InstructionSets/x86/Instruction.hpp b/InstructionSets/x86/Instruction.hpp index cdb9f193b..78a6061c3 100644 --- a/InstructionSets/x86/Instruction.hpp +++ b/InstructionSets/x86/Instruction.hpp @@ -366,6 +366,8 @@ constexpr int num_operands(Operation operation) { case Operation::IDIV: case Operation::RETfar: case Operation::ESC: + case Operation::AAM: case Operation::AAD: + case Operation::INT: return 1; // Pedantically, these have an displacement rather than an operand. @@ -387,6 +389,10 @@ constexpr int num_operands(Operation operation) { case Operation::STI: case Operation::CMC: case Operation::LAHF: case Operation::SAHF: + case Operation::AAA: case Operation::AAS: + case Operation::DAA: case Operation::DAS: + case Operation::CBW: case Operation::CWD: + case Operation::INTO: case Operation::Invalid: return 0; }