ft: partially implement Group 5 instructions
This commit is contained in:
@@ -613,7 +613,20 @@ impl Disassembler {
|
|||||||
_ => panic!("Illegal Group 4 mnemonic"),
|
_ => panic!("Illegal Group 4 mnemonic"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
0xFF => todo!("Group 5"),
|
0xFF => {
|
||||||
|
let (target, reg) = self.parse_modrm_byte(Operand::Word(0));
|
||||||
|
match reg {
|
||||||
|
0b000 => Mnemonic::INC_Mod(target),
|
||||||
|
0b001 => Mnemonic::DEC_Mod(target),
|
||||||
|
0b010 => Mnemonic::CALL_Mod(target),
|
||||||
|
0b011 => todo!("Implement CALL Mp"),
|
||||||
|
0b100 => Mnemonic::JMP_Mod(target),
|
||||||
|
0b101 => todo!("Implement JMP Mp"),
|
||||||
|
0b110 => Mnemonic::PUSH_Mod(target),
|
||||||
|
// 0b111 => unused
|
||||||
|
_ => panic!("Illegal Group 5 mnemonic"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!("Encountered unknown instruction '0x{:x}'", opcode);
|
eprintln!("Encountered unknown instruction '0x{:x}'", opcode);
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ pub enum Mnemonic {
|
|||||||
// PUSH
|
// PUSH
|
||||||
PUSH_R(Register),
|
PUSH_R(Register),
|
||||||
PUSH_S(SegmentRegister),
|
PUSH_S(SegmentRegister),
|
||||||
|
PUSH_Mod(ModRmTarget),
|
||||||
// POP
|
// POP
|
||||||
POP_S(SegmentRegister), // POP to Segment Register
|
POP_S(SegmentRegister), // POP to Segment Register
|
||||||
POP_R(Register), // POP to Register
|
POP_R(Register), // POP to Register
|
||||||
@@ -203,10 +204,12 @@ pub enum Mnemonic {
|
|||||||
// CALL
|
// CALL
|
||||||
CALL_p(Pointer),
|
CALL_p(Pointer),
|
||||||
CALL_v(Word),
|
CALL_v(Word),
|
||||||
|
CALL_Mod(ModRmTarget),
|
||||||
// JUMP
|
// JUMP
|
||||||
JMP_p(Pointer),
|
JMP_p(Pointer),
|
||||||
JMP_b(Byte),
|
JMP_b(Byte),
|
||||||
JMP_v(Word),
|
JMP_v(Word),
|
||||||
|
JMP_Mod(ModRmTarget),
|
||||||
// WAIT
|
// WAIT
|
||||||
WAIT,
|
WAIT,
|
||||||
// Push/Pop Flags
|
// Push/Pop Flags
|
||||||
|
|||||||
Reference in New Issue
Block a user