示例#1
0
 public Relative(uint _val, uint _ofs, OPSIZE _size)
 {
     val    = _val;
     ofs    = _ofs;
     size   = _size;
     target = null;
 }
示例#2
0
 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;
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 public Register(String _name, int _code)
 {
     name = _name;
     size = OPSIZE.None;
     code = _code;
 }
示例#7
0
 public Immediate(uint _val, OPSIZE _size)
 {
     val      = _val;
     size     = _size;
     isOffset = false;
 }