public override void Alu(ALU a, Destination d, R32 r, R32 b, byte imm8) { if (d == Destination.R) { @out.WriteLine("{0} {1},dword ptr [{2}+{3:X}h]", a.ToString().ToLower(), r, b, imm8); } else { @out.WriteLine("{0} dword ptr [{1}+{2:X}h],{3}", a.ToString().ToLower(), b, imm8, r); } }
public override void Alu(ALU a, Destination d, R32 x, R32 y) { @out.WriteLine("{0} {1},{2}", a.ToString().ToLower(), x, y); }
public override void PushR32(R32 r) { @out.WriteLine("push {0}", r); }
public override void Test(R32 x, R32 y) { @out.WriteLine("test {0},{1}", x, y); }
public static string GetStringFromR32(R32 r) => R32RegMap[(int)r];
public static I1 ToI1(R32 value) { unsafe { return(*(I1 *)&value); } }
public override void MovIndirect(R32 x, R32 y) { @out.WriteLine("mov {0},dword ptr [{1}]", x, y); }
public override void Dec(R32 r) { @out.WriteLine("dec {0}", r); }
public override void Mov(Destination d, R32 x, R32 y) { @out.WriteLine("mov {0},{1}", x, y); }
public override void Mov(R32 r, Scale s, R32 b, R32 i) { @out.WriteLine("mov {0},dword ptr [{1}+{2}]", r, b, i); }
public override void Mov(R32 r, R32 b, byte disp) { @out.WriteLine("mov {0},dword ptr [{1}+{2:X}h]", r, b, disp); }
public override void Mov(R32 b, byte disp) { @out.WriteLine("mov EAX,dword ptr [{0}+{1:X}h]", b, disp); }
public override void Lea(R32 r, Scale s, R32 i, R32 b) { @out.WriteLine("lea {0},[{1}+{2}*{3}]", r, b, i, (1 << (int) s)); }
public override void Alu(ALU a, R32 r, byte imm8) { @out.WriteLine("{0} {1},{2:X}h", a.ToString().ToLower(), r, SignExtend(imm8)); }
public override void MovIndirect(R32 r, byte disp) { @out.WriteLine("mov dword ptr [ESP+{0:X}h],{1}", disp, r); }
public override void Alu(ALU a, Scale s, R32 b, byte disp, byte imm8) { @out.WriteLine("{0} dword ptr [{1}+{2:X}h],{3:X}h", a.ToString().ToLower(), b, disp, SignExtend(imm8)); }
public override void MovR32Imm32(R32 x, int i) { @out.WriteLine("mov {0},dword ptr [{1:X}h]", x, i); }
public override void Lea(R32 r, Scale s, R32 b, int imm8) { if (s == Scale.X1) { @out.WriteLine("lea {0},[{1}+{2:X}h]", r, b, imm8); } else { @out.WriteLine("lea {0},[{1}+{2:X}h*{3}]", r, b, imm8, (1 << (int)s)); } }
public override void PopR32(R32 r) { @out.WriteLine("pop {0}", r); }
public Rm32(R32 register, bool isPointer = false) { Register = register; IsPointer = isPointer; }
public static I8 ToI8(R32 value) { unsafe { return(*(I8 *)&value); } }