public Relative(uint _val, uint _ofs, OPSIZE _size) { val = _val; ofs = _ofs; size = _size; target = null; }
public Memory(Register _r1, Register _r2, Mult _mult, Immediate _imm, OPSIZE _size, Segment.SEG _seg) { r1 = _r1; r2 = _r2; mult = _mult; imm = _imm; if (imm != null) { imm.isOffset = true; } size = _size; seg = _seg; }
public List <byte> getModrm(Operand op1, Operand op2, out OpMode opmode, out OPSIZE size) { int mode; int reg; int rm; List <byte> result = new List <byte>(); List <byte> membytes = null; if (op1 is Register) { size = ((Register)op1).size; if (op2 is Register) { opmode = OpMode.REGREG; //register, register mode = 3; rm = ((Register)op1).code; reg = ((Register)op2).code; } else { opmode = OpMode.REGMEM; //register, memory reg = ((Register)op1).code; membytes = ((Memory)op2).getBytes(out mode, out rm); } } else //Op1 is memory { opmode = OpMode.MEMREG; //memory, register size = ((Memory)op1).size; membytes = ((Memory)op1).getBytes(out mode, out rm); reg = ((Register)op2).code; } byte b = (byte)(mode * 0x40 + reg * 8 + rm); //the modrm byte result.Add(b); if (membytes != null) { result.AddRange(membytes); //add any additional memory op bytes } return(result); }
public String getSizePtrStr(OPSIZE size) { //if (operandSizeOverride && (size == OPSIZE.DWord)) size = OPSIZE.Word; String result = ""; switch (size) { case OPSIZE.Byte: result = "byte ptr "; break; case OPSIZE.Word: result = "word ptr "; break; case OPSIZE.DWord: result = "dword ptr "; break; case OPSIZE.QWord: result = "qword ptr "; break; case OPSIZE.FWord: result = "fword ptr "; break; case OPSIZE.TByte: result = "tbyte ptr "; break; case OPSIZE.MM: result = "mmword ptr "; break; case OPSIZE.XMM: result = "xmmword ptr "; break; } return(result); }
public String getSizePtrStr(OPSIZE size) { //if (operandSizeOverride && (size == OPSIZE.DWord)) size = OPSIZE.Word; String result = ""; switch (size) { case OPSIZE.Byte: result = "BYTE PTR "; break; case OPSIZE.Word: result = "WORD PTR "; break; case OPSIZE.DWord: result = "DWORD PTR "; break; case OPSIZE.QWord: result = "QWORD PTR "; break; case OPSIZE.FWord: result = "FWORD PTR "; break; case OPSIZE.TByte: result = "TBYTE PTR "; break; case OPSIZE.MM: result = "MMWORD PTR "; break; case OPSIZE.XMM: result = "XMMWORD PTR "; break; } return(result); }
public Register(String _name, int _code) { name = _name; size = OPSIZE.None; code = _code; }
public Immediate(uint _val, OPSIZE _size) { val = _val; size = _size; isOffset = false; }