示例#1
0
        public static AsmSignatureEnum[] Parse_Operand_Type_Enum(string str, bool strIsCapitals)
        {
            Contract.Requires(str != null);

            switch (AsmSourceTools.ToCapitals(str, strIsCapitals).Trim())
            {
                #region Memory
            case "M": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "MEM": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "M8": return(new AsmSignatureEnum[] { AsmSignatureEnum.M8 });

            case "M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.M16 });

            case "M32": return(new AsmSignatureEnum[] { AsmSignatureEnum.M32 });

            case "M32{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.M32, AsmSignatureEnum.K });

            case "M64": return(new AsmSignatureEnum[] { AsmSignatureEnum.M64 });

            case "M64{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.M64, AsmSignatureEnum.K });

            case "M80": return(new AsmSignatureEnum[] { AsmSignatureEnum.M80 });

            case "M128": return(new AsmSignatureEnum[] { AsmSignatureEnum.M128 });

            case "M128{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.M128, AsmSignatureEnum.K });

            case "M256": return(new AsmSignatureEnum[] { AsmSignatureEnum.M256 });

            case "M256{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.M256, AsmSignatureEnum.K });

            case "M512": return(new AsmSignatureEnum[] { AsmSignatureEnum.M512 });

            case "M512{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.M512, AsmSignatureEnum.K });

            case "M16&16": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "M16&32": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "M16&64": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "M32&32": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "M16:16": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "M16:32": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "M16:64": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

            case "PTR16:16": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM });

            case "PTR16:32": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM });

            case "PTR16:64": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM });

                #endregion

                #region Register
            case "R8": return(new AsmSignatureEnum[] { AsmSignatureEnum.R8 });

            case "R16": return(new AsmSignatureEnum[] { AsmSignatureEnum.R16 });

            case "R32": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32 });

            case "R64": return(new AsmSignatureEnum[] { AsmSignatureEnum.R64 });

            case "R16/R32/R64": return(new AsmSignatureEnum[] { AsmSignatureEnum.R16, AsmSignatureEnum.R32, AsmSignatureEnum.R64 });

            case "R32/64": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32, AsmSignatureEnum.R64 });

            case "REG": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32 });

            case "AL": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_AL });

            case "AX": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_AX });

            case "EAX": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_EAX });

            case "RAX": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_RAX });

            case "CL": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_CL });

            case "CX": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_CX });

            case "ECX": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_ECX });

            case "RCX": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_RCX });

            case "DX": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_DX });

            case "EDX": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_EDX });

            case "CS": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_CS });

            case "DS": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_DS });

            case "ES": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_ES });

            case "SS": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_SS });

            case "FS": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_FS });

            case "GS": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_GS });

            case "REG_SREG":
            case "SREG": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_SREG });

            case "CR0–CR7": return(new AsmSignatureEnum[] { AsmSignatureEnum.CR0, AsmSignatureEnum.CR1, AsmSignatureEnum.CR2, AsmSignatureEnum.CR3, AsmSignatureEnum.CR4, AsmSignatureEnum.CR5, AsmSignatureEnum.CR6, AsmSignatureEnum.CR7 });

            case "CR8": return(new AsmSignatureEnum[] { AsmSignatureEnum.CR8 });

            case "REG_DREG":
            case "DR0–DR7": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_DREG });

                #endregion

                #region Register or Memory
            case "R/M8": return(new AsmSignatureEnum[] { AsmSignatureEnum.R8, AsmSignatureEnum.M8 });

            case "R/M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.R16, AsmSignatureEnum.M16 });

            case "R/M32": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32, AsmSignatureEnum.M32 });

            case "R/M64": return(new AsmSignatureEnum[] { AsmSignatureEnum.R64, AsmSignatureEnum.M64 });

            case "R/M32{ER}": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32, AsmSignatureEnum.M32, AsmSignatureEnum.ER });

            case "R/M64{ER}": return(new AsmSignatureEnum[] { AsmSignatureEnum.R64, AsmSignatureEnum.M64, AsmSignatureEnum.ER });

            case "REG/M8": return(new AsmSignatureEnum[] { AsmSignatureEnum.R8, AsmSignatureEnum.M8 });

            case "REG/M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.R16, AsmSignatureEnum.M16 });

            case "REG/M32": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32, AsmSignatureEnum.M32 });

            case "R16/M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.R16, AsmSignatureEnum.M16 });

            case "R32/M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32, AsmSignatureEnum.M16 });

            case "R64/M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.R64, AsmSignatureEnum.M16 });

            case "R32/M32": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32, AsmSignatureEnum.M32 });

            case "R64/M64": return(new AsmSignatureEnum[] { AsmSignatureEnum.R64, AsmSignatureEnum.M64 });

            case "R32/M8": return(new AsmSignatureEnum[] { AsmSignatureEnum.R32, AsmSignatureEnum.M8 });

            case "R16/R32/M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.R16, AsmSignatureEnum.R32, AsmSignatureEnum.M16 });

                #endregion

                #region Constants Immediates
            case "0": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZERO });

            case "1": return(new AsmSignatureEnum[] { AsmSignatureEnum.UNITY });

            case "MOFFS8": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM8 });

            case "MOFFS16": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM16 });

            case "MOFFS32": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM32 });

            case "MOFFS64": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM64 });

            case "REL8": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM8 });

            case "REL16": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM16 });

            case "REL32": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM32 });

            case "REL64": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM64 });

            case "IMM": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM });

            case "IMM8": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM8 });

            case "IMM16": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM16 });

            case "IMM32": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM32 });

            case "IMM64": return(new AsmSignatureEnum[] { AsmSignatureEnum.IMM64 });

            case "IMM:IMM": return(new AsmSignatureEnum[] { AsmSignatureEnum.imm_imm });

            case "IMM16:IMM": return(new AsmSignatureEnum[] { AsmSignatureEnum.imm16_imm });

            case "IMM:IMM16": return(new AsmSignatureEnum[] { AsmSignatureEnum.imm_imm16 });

            case "IMM32:IMM": return(new AsmSignatureEnum[] { AsmSignatureEnum.imm32_imm });

            case "IMM:IMM32": return(new AsmSignatureEnum[] { AsmSignatureEnum.imm_imm32 });

                #endregion

                #region FPU
            case "ST(I)": return(new AsmSignatureEnum[] { AsmSignatureEnum.FPUREG });

            case "ST(0)": return(new AsmSignatureEnum[] { AsmSignatureEnum.FPU0 });

            case "ST": return(new AsmSignatureEnum[] { AsmSignatureEnum.FPUREG });

            case "M32FP": return(new AsmSignatureEnum[] { AsmSignatureEnum.M32, AsmSignatureEnum.FPUREG });

            case "M64FP": return(new AsmSignatureEnum[] { AsmSignatureEnum.M64, AsmSignatureEnum.FPUREG });

            case "M80FP": return(new AsmSignatureEnum[] { AsmSignatureEnum.M80, AsmSignatureEnum.FPUREG });

            case "M16INT": return(new AsmSignatureEnum[] { AsmSignatureEnum.M16 });

            case "M32INT": return(new AsmSignatureEnum[] { AsmSignatureEnum.M32 });

            case "M64INT": return(new AsmSignatureEnum[] { AsmSignatureEnum.M64 });

            case "M14/28BYTE": return(new AsmSignatureEnum[] { AsmSignatureEnum.M14BYTE, AsmSignatureEnum.M28BYTE });

            case "M94/108BYTE": return(new AsmSignatureEnum[] { AsmSignatureEnum.M94BYTE, AsmSignatureEnum.M108BYTE });

            case "M2BYTE": return(new AsmSignatureEnum[] { AsmSignatureEnum.M2BYTE });

            case "M512BYTE": return(new AsmSignatureEnum[] { AsmSignatureEnum.M512BYTE });

            case "M80BCD": return(new AsmSignatureEnum[] { AsmSignatureEnum.M80 });

            case "M80DEC": return(new AsmSignatureEnum[] { AsmSignatureEnum.M80 });

                #endregion

                #region SIMD
            case "MM": return(new AsmSignatureEnum[] { AsmSignatureEnum.MMXREG });

            case "MM/M32": return(new AsmSignatureEnum[] { AsmSignatureEnum.MMXREG, AsmSignatureEnum.M32 });

            case "MM/M64": return(new AsmSignatureEnum[] { AsmSignatureEnum.MMXREG, AsmSignatureEnum.M64 });

            case "MM/MEM": return(new AsmSignatureEnum[] { AsmSignatureEnum.MMXREG, AsmSignatureEnum.M64 });

            case "Z": return(new AsmSignatureEnum[] { AsmSignatureEnum.Z });

            case "K": return(new AsmSignatureEnum[] { AsmSignatureEnum.K });

            case "K+1": return(new AsmSignatureEnum[] { AsmSignatureEnum.K });

            case "K{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.K });

            case "SAE": return(new AsmSignatureEnum[] { AsmSignatureEnum.SAE });

            case "ER": return(new AsmSignatureEnum[] { AsmSignatureEnum.ER });

            case "K/M8": return(new AsmSignatureEnum[] { AsmSignatureEnum.K, AsmSignatureEnum.M8 });

            case "K/M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.K, AsmSignatureEnum.M16 });

            case "K/M32": return(new AsmSignatureEnum[] { AsmSignatureEnum.K, AsmSignatureEnum.M32 });

            case "K/M64": return(new AsmSignatureEnum[] { AsmSignatureEnum.K, AsmSignatureEnum.M64 });

            case "VM32X": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM32X });

            case "VM64X": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM64X });

            case "VM32Y": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM32Y });

            case "VM64Y": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM64Y });

            case "VM32Z": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM32Z });

            case "VM64Z": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM64Z });

            case "VM32X{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM32X, AsmSignatureEnum.K });

            case "VM64X{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM64X, AsmSignatureEnum.K });

            case "VM32Y{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM32Y, AsmSignatureEnum.K });

            case "VM64Y{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM64Y, AsmSignatureEnum.K });

            case "VM32Z{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM32Z, AsmSignatureEnum.K });

            case "VM64Z{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.VM64Z, AsmSignatureEnum.K });

            case "XMM": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG });

            case "XMM_ZERO": return(new AsmSignatureEnum[] { AsmSignatureEnum.REG_XMM0 });

            case "XMM{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.K });

            case "XMM{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "XMM/M8": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M8 });

            case "XMM/M16": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M16 });

            case "XMM/M16{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M16 });

            case "XMM/M32": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M32, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "XMM/M32{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M32, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "XMM/M32{ER}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M32, AsmSignatureEnum.ER });

            case "XMM/M32{SAE}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M32, AsmSignatureEnum.SAE });

            case "XMM/M64": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M64 });

            case "XMM/M64{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M64, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "XMM/M64{ER}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M64, AsmSignatureEnum.ER });

            case "XMM/M64{SAE}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M64, AsmSignatureEnum.SAE });

            case "XMM/M64/M32BCST": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M64, AsmSignatureEnum.M32BCST });

            case "XMM/M128": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M128 });

            case "XMM/M128{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M128, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "XMM/M128/M32BCST": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M128, AsmSignatureEnum.M32BCST });

            case "XMM/M128/M64BCST": return(new AsmSignatureEnum[] { AsmSignatureEnum.XMMREG, AsmSignatureEnum.M128, AsmSignatureEnum.M64BCST });

            case "YMM": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG });

            case "YMM{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.K });

            case "YMM{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "YMM/M256": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.M256 });

            case "YMM/M256{SAE}": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.M256, AsmSignatureEnum.SAE });

            case "YMM/M256{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.M256, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "YMM/M256/M32BCST": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.M256, AsmSignatureEnum.M32BCST });

            case "YMM/M256/M32BCST{ER}": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.M256, AsmSignatureEnum.M32BCST, AsmSignatureEnum.ER });

            case "YMM/M256/M32BCST{SAE}": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.M256, AsmSignatureEnum.M32BCST, AsmSignatureEnum.SAE });

            case "YMM/M256/M64BCST": return(new AsmSignatureEnum[] { AsmSignatureEnum.YMMREG, AsmSignatureEnum.M256, AsmSignatureEnum.M64BCST });

            case "ZMM": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG });

            case "ZMM{K}": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.K });

            case "ZMM{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "ZMM{SAE}": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.SAE });

            case "ZMM/M512": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.M512, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "ZMM/M512{K}{Z}": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.K, AsmSignatureEnum.Z });

            case "ZMM/M512/M32BCST": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.M512, AsmSignatureEnum.M32BCST });

            case "ZMM/M512/M32BCST{ER}": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.M512, AsmSignatureEnum.M32BCST, AsmSignatureEnum.ER });

            case "ZMM/M512/M32BCST{SAE}": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.M512, AsmSignatureEnum.M32BCST, AsmSignatureEnum.SAE });

            case "ZMM/M512/M64BCST": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.M512, AsmSignatureEnum.M64BCST });

            case "ZMM/M512/M64BCST{ER}": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.M512, AsmSignatureEnum.M64BCST, AsmSignatureEnum.ER });

            case "ZMM/M512/M64BCST{SAE}": return(new AsmSignatureEnum[] { AsmSignatureEnum.ZMMREG, AsmSignatureEnum.M512, AsmSignatureEnum.M64BCST, AsmSignatureEnum.SAE });

                #endregion

                #region Misc
            case "NEAR": return(new AsmSignatureEnum[] { AsmSignatureEnum.NEAR });

            case "FAR": return(new AsmSignatureEnum[] { AsmSignatureEnum.FAR });

            case "SHORT": return(new AsmSignatureEnum[] { AsmSignatureEnum.SHORT_ENUM });

            case "MEM_OFFS": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM_OFFSET });

            case "BND": return(new AsmSignatureEnum[] { AsmSignatureEnum.BNDREG });

            case "BND/M64": return(new AsmSignatureEnum[] { AsmSignatureEnum.BNDREG, AsmSignatureEnum.M64 });

            case "BND/M128": return(new AsmSignatureEnum[] { AsmSignatureEnum.BNDREG, AsmSignatureEnum.M128 });

            case "MIB": return(new AsmSignatureEnum[] { AsmSignatureEnum.MEM });

                #endregion

            case "NONE": return(new AsmSignatureEnum[] { AsmSignatureEnum.NONE });

            default:
                AsmDudeToolsStatic.Output_INFO("AsmSignatureTools:parseOperandTypeEnum: unknown content " + str);
                return(new AsmSignatureEnum[] { AsmSignatureEnum.UNKNOWN });
            }
        }