diff --git a/src/disasm.rs b/src/disasm.rs index f746a0c..21675bc 100644 --- a/src/disasm.rs +++ b/src/disasm.rs @@ -221,9 +221,9 @@ impl Disassembler { /// Group 1 always have an ModRM target (all modrm bits, without reg) as /// first and an imm value as second operand (which has to be parsed before /// call to this function), but is available in both Byte and Word length. - pub fn modrm_reg_to_grp1(reg: u8, target: ModRmTarget, imm: Displacement) -> Mnemonic { + pub fn modrm_reg_to_grp1(reg: u8, target: ModRmTarget, imm: Operand) -> Mnemonic { match imm { - Displacement::IByte(b) => match reg { + Operand::Byte(b) => match reg { 0b000 => Mnemonic::ADD_Ib(target, b), 0b001 => Mnemonic::OR_Ib(target, b), 0b010 => Mnemonic::ADC_Ib(target, b), @@ -234,7 +234,7 @@ impl Disassembler { 0b111 => Mnemonic::CMP_Ib(target, b), _ => panic!("Illegal Group 1 mnemonic"), }, - Displacement::IWord(w) => match reg { + Operand::Word(w) => match reg { 0b000 => Mnemonic::ADD_Iv(target, w), 0b001 => Mnemonic::OR_Iv(target, w), 0b010 => Mnemonic::ADC_Iv(target, w), @@ -462,25 +462,25 @@ impl Disassembler { // Group 1 0x80 => { let (target, reg) = self.parse_modrm_byte(Operand::Byte(0)); - let imm = self.parse_byte() as IByte; - Self::modrm_reg_to_grp1(reg, target, Displacement::IByte(imm)) + let imm = self.parse_byte(); + Self::modrm_reg_to_grp1(reg, target, Operand::Byte(imm)) } 0x81 => { let (target, reg) = self.parse_modrm_byte(Operand::Word(0)); - let imm = self.parse_word() as IWord; - Self::modrm_reg_to_grp1(reg, target, Displacement::IWord(imm)) + let imm = self.parse_word(); + Self::modrm_reg_to_grp1(reg, target, Operand::Word(imm)) } 0x82 => { // same as 0x80 let (target, reg) = self.parse_modrm_byte(Operand::Byte(0)); - let imm = self.parse_byte() as IByte; - Self::modrm_reg_to_grp1(reg, target, Displacement::IByte(imm)) + let imm = self.parse_byte(); + Self::modrm_reg_to_grp1(reg, target, Operand::Byte(imm)) } 0x83 => { // byte extended version let (target, reg) = self.parse_modrm_byte(Operand::Word(0)); - let imm = self.parse_byte() as IByte; - Self::modrm_reg_to_grp1(reg, target, Displacement::IByte(imm)) + let imm = self.parse_byte(); + Self::modrm_reg_to_grp1(reg, target, Operand::Byte(imm)) } 0x84 => modrmb!(self, TEST), diff --git a/src/instructions.rs b/src/instructions.rs index 5cfcdf4..270a187 100644 --- a/src/instructions.rs +++ b/src/instructions.rs @@ -90,8 +90,8 @@ pub enum Mnemonic { // ADD ADD_FromReg(ModRmTarget, Register), // From Register into either Memory or Register ADD_ToReg(ModRmTarget, Register), // From either Memory or Register into Reigster - ADD_Ib(ModRmTarget, IByte), // From Immediate into either Memory or Register - ADD_Iv(ModRmTarget, IWord), // From Immediate into either Memory or Register + ADD_Ib(ModRmTarget, Byte), // From Immediate into either Memory or Register + ADD_Iv(ModRmTarget, Word), // From Immediate into either Memory or Register ADD_ALIb(Byte), ADD_AXIv(Word), // PUSH @@ -105,29 +105,29 @@ pub enum Mnemonic { // OR OR_FromReg(ModRmTarget, Register), OR_ToReg(ModRmTarget, Register), - OR_Ib(ModRmTarget, IByte), - OR_Iv(ModRmTarget, IWord), + OR_Ib(ModRmTarget, Byte), + OR_Iv(ModRmTarget, Word), OR_ALIb(Byte), OR_AXIv(Word), // ADC ADC_FromReg(ModRmTarget, Register), ADC_ToReg(ModRmTarget, Register), - ADC_Ib(ModRmTarget, IByte), - ADC_Iv(ModRmTarget, IWord), + ADC_Ib(ModRmTarget, Byte), + ADC_Iv(ModRmTarget, Word), ADC_ALIb(Byte), ADC_AXIv(Word), // SBB SBB_FromReg(ModRmTarget, Register), SBB_ToReg(ModRmTarget, Register), - SBB_Ib(ModRmTarget, IByte), - SBB_Iv(ModRmTarget, IWord), + SBB_Ib(ModRmTarget, Byte), + SBB_Iv(ModRmTarget, Word), SBB_ALIb(Byte), SBB_AXIv(Word), // AND AND_FromReg(ModRmTarget, Register), AND_ToReg(ModRmTarget, Register), - AND_Ib(ModRmTarget, IByte), - AND_Iv(ModRmTarget, IWord), + AND_Ib(ModRmTarget, Byte), + AND_Iv(ModRmTarget, Word), AND_ALIb(Byte), AND_AXIv(Word), // Override @@ -140,22 +140,22 @@ pub enum Mnemonic { // SUB SUB_FromReg(ModRmTarget, Register), SUB_ToReg(ModRmTarget, Register), - SUB_Ib(ModRmTarget, IByte), - SUB_Iv(ModRmTarget, IWord), + SUB_Ib(ModRmTarget, Byte), + SUB_Iv(ModRmTarget, Word), SUB_ALIb(Byte), SUB_AXIv(Word), // XOR XOR_FromReg(ModRmTarget, Register), XOR_ToReg(ModRmTarget, Register), - XOR_Ib(ModRmTarget, IByte), - XOR_Iv(ModRmTarget, IWord), + XOR_Ib(ModRmTarget, Byte), + XOR_Iv(ModRmTarget, Word), XOR_ALIb(Byte), XOR_AXIv(Word), // CMP CMP_FromReg(ModRmTarget, Register), CMP_ToReg(ModRmTarget, Register), - CMP_Ib(ModRmTarget, IByte), - CMP_Iv(ModRmTarget, IWord), + CMP_Ib(ModRmTarget, Byte), + CMP_Iv(ModRmTarget, Word), CMP_ALIb(Byte), CMP_AXIv(Word), // INC