public static void instr(Instruction instr, TargetRegister op1, TargetRegister op2) { BuildInstruction (instr); BuildLengthPrefix (LengthPrefix.f_reg | LengthPrefix.s_reg); BuildRegister (op1); BuildRegister (op2); }
public static void instr(Instruction instr, TargetRegister op1, byte op2) { BuildInstruction (instr); BuildLengthPrefix (LengthPrefix.f_reg | LengthPrefix.s_8); BuildRegister (op1); bitstream.Write (op2 & 0xFF); }
public static void instr(Instruction instr, TargetRegister op1, Int32 op2) { if (CPU.GetRegisterWidth (op1) < RegisterWidth.DWord) throw new Exception ("Can't fit 32-bit value into 16-bit or 8-bit register!"); BuildInstruction (instr); BuildLengthPrefix (LengthPrefix.f_reg | LengthPrefix.s_32); BuildRegister (op1); bitstream.Write (op2 & 0x7FFFFFFF); }
public static RegisterWidth GetRegisterWidth(TargetRegister reg) { if (reg >= TargetRegister.eax && reg <= TargetRegister.edi) return RegisterWidth.DWord; else if (reg >= TargetRegister.ax && reg <= TargetRegister.dx) return RegisterWidth.LowWord; else if (reg >= TargetRegister.ah && reg <= TargetRegister.dh) return RegisterWidth.HighByte; else if (reg >= TargetRegister.al && reg <= TargetRegister.dl) return RegisterWidth.LowByte; throw new Exception (string.Format ("Invalid register: {0}", reg)); }
public static void BuildRegister(TargetRegister reg) { bitstream.Write ((byte)((byte)reg & 0xFF)); }
public Register32(TargetRegister name, uint value) : this(name) { Value = value; }
public Register32(TargetRegister name) : this(Enum.GetName (typeof(TargetRegister), name)) { }
public Register8L TranslateLowByte(TargetRegister reg) { foreach (var reg32 in Registers) { if (reg32.LowByte.Name == Enum.GetName (typeof (TargetRegister), reg)) return reg32.LowByte; } throw new Exception (string.Format ("Invalid register: {0}", reg)); }
public Register32 TranslateDWord(TargetRegister reg) { return Registers.First (register => Enum.GetName (typeof(TargetRegister), reg) == register.Name); }
public void Call(TargetRegister op1, TargetRegister op2) { }