public static string ToString(AsmSignatureEnum operandType) { switch (operandType) { case AsmSignatureEnum.REG_AL: return("AL"); case AsmSignatureEnum.REG_AX: return("AX"); case AsmSignatureEnum.REG_EAX: return("EAX"); case AsmSignatureEnum.REG_RAX: return("RAX"); case AsmSignatureEnum.REG_CL: return("CL"); case AsmSignatureEnum.REG_CX: return("CX"); case AsmSignatureEnum.REG_ECX: return("ECX"); case AsmSignatureEnum.REG_RCX: return("RCX"); case AsmSignatureEnum.REG_DX: return("DX"); case AsmSignatureEnum.REG_EDX: return("EDX"); case AsmSignatureEnum.REG_CS: return("CS"); case AsmSignatureEnum.REG_DS: return("DS"); case AsmSignatureEnum.REG_ES: return("ES"); case AsmSignatureEnum.REG_SS: return("SS"); case AsmSignatureEnum.REG_FS: return("FS"); case AsmSignatureEnum.REG_GS: return("GS"); case AsmSignatureEnum.IMM: return("IMM"); case AsmSignatureEnum.IMM8: return("IMM8"); case AsmSignatureEnum.IMM16: return("IMM16"); case AsmSignatureEnum.IMM32: return("IMM32"); case AsmSignatureEnum.IMM64: return("IMM64"); case AsmSignatureEnum.imm_imm: return("imm:imm"); case AsmSignatureEnum.imm16_imm: return("imm16:imm"); case AsmSignatureEnum.imm_imm16: return("imm:imm16"); case AsmSignatureEnum.imm32_imm: return("imm32:imm"); case AsmSignatureEnum.imm_imm32: return("imm:imm32"); case AsmSignatureEnum.NEAR: return("near"); case AsmSignatureEnum.FAR: return("far"); case AsmSignatureEnum.SHORT_ENUM: return("short"); case AsmSignatureEnum.UNITY: return("unity 1"); case AsmSignatureEnum.Z: return("z"); case AsmSignatureEnum.ER: return("er"); case AsmSignatureEnum.REG_XMM0: return("XMM0"); case AsmSignatureEnum.XMMREG: return("XMM"); case AsmSignatureEnum.YMMREG: return("YMM"); case AsmSignatureEnum.ZMMREG: return("ZMM"); case AsmSignatureEnum.VM32X: return("xmem32"); case AsmSignatureEnum.VM64X: return("xmem64"); case AsmSignatureEnum.VM32Y: return("ymem32"); case AsmSignatureEnum.VM64Y: return("ymem64"); case AsmSignatureEnum.VM32Z: return("zmem32"); case AsmSignatureEnum.VM64Z: return("zmem64"); case AsmSignatureEnum.M32BCST: return("M32bcst"); case AsmSignatureEnum.M64BCST: return("M64bcst"); case AsmSignatureEnum.MEM_OFFSET: return("mem_offs"); case AsmSignatureEnum.REG_SREG: return("segment register"); case AsmSignatureEnum.REG_DREG: return("debug register"); case AsmSignatureEnum.MMXREG: return("XMM"); case AsmSignatureEnum.BNDREG: return("BND"); case AsmSignatureEnum.FPUREG: return("fpureg"); case AsmSignatureEnum.K: return("K"); case AsmSignatureEnum.SAE: return("{SAE}"); default: // AsmDudeToolsStatic.Output_WARNING("AsmSignatureTools:ToString: " + operandType); return(operandType.ToString()); } }
public static bool Is_Allowed_Operand(Operand op, AsmSignatureEnum operandType) { switch (operandType) { case AsmSignatureEnum.UNKNOWN: return(true); case AsmSignatureEnum.MEM: return(op.IsMem); case AsmSignatureEnum.M8: return(op.IsMem && op.NBits == 8); case AsmSignatureEnum.M16: return(op.IsMem && op.NBits == 16); case AsmSignatureEnum.M32: return(op.IsMem && op.NBits == 32); case AsmSignatureEnum.M64: return(op.IsMem && op.NBits == 64); case AsmSignatureEnum.M80: return(op.IsMem && op.NBits == 80); case AsmSignatureEnum.M128: return(op.IsMem && op.NBits == 128); case AsmSignatureEnum.M256: return(op.IsMem && op.NBits == 256); case AsmSignatureEnum.M512: return(op.IsMem && op.NBits == 512); case AsmSignatureEnum.R8: return(op.IsReg && op.NBits == 8); case AsmSignatureEnum.R16: return(op.IsReg && op.NBits == 16); case AsmSignatureEnum.R32: return(op.IsReg && op.NBits == 32); case AsmSignatureEnum.R64: return(op.IsReg && op.NBits == 64); case AsmSignatureEnum.REG_AL: return(op.IsReg && op.Rn == Rn.AL); case AsmSignatureEnum.REG_AX: return(op.IsReg && op.Rn == Rn.AX); case AsmSignatureEnum.REG_EAX: return(op.IsReg && op.Rn == Rn.EAX); case AsmSignatureEnum.REG_RAX: return(op.IsReg && op.Rn == Rn.RAX); case AsmSignatureEnum.REG_CL: return(op.IsReg && op.Rn == Rn.CL); case AsmSignatureEnum.REG_CX: return(op.IsReg && op.Rn == Rn.CX); case AsmSignatureEnum.REG_ECX: return(op.IsReg && op.Rn == Rn.ECX); case AsmSignatureEnum.REG_RCX: return(op.IsReg && op.Rn == Rn.RCX); case AsmSignatureEnum.REG_DX: return(op.IsReg && op.Rn == Rn.DX); case AsmSignatureEnum.REG_EDX: return(op.IsReg && op.Rn == Rn.EDX); case AsmSignatureEnum.REG_XMM0: return(op.IsReg && op.Rn == Rn.XMM0); case AsmSignatureEnum.REG_CS: return(op.IsReg && op.Rn == Rn.CS); case AsmSignatureEnum.REG_DS: return(op.IsReg && op.Rn == Rn.DS); case AsmSignatureEnum.REG_ES: return(op.IsReg && op.Rn == Rn.ES); case AsmSignatureEnum.REG_SS: return(op.IsReg && op.Rn == Rn.SS); case AsmSignatureEnum.REG_FS: return(op.IsReg && op.Rn == Rn.FS); case AsmSignatureEnum.REG_GS: return(op.IsReg && op.Rn == Rn.GS); case AsmSignatureEnum.IMM: return(op.IsImm); case AsmSignatureEnum.IMM8: return(op.IsImm && op.NBits == 8); case AsmSignatureEnum.IMM16: return(op.IsImm && op.NBits == 16); case AsmSignatureEnum.IMM32: return(op.IsImm && op.NBits == 32); case AsmSignatureEnum.IMM64: return(op.IsImm && op.NBits == 64); case AsmSignatureEnum.imm_imm: return(true); case AsmSignatureEnum.imm16_imm: return(true); case AsmSignatureEnum.imm_imm16: return(true); case AsmSignatureEnum.imm32_imm: return(true); case AsmSignatureEnum.imm_imm32: return(true); case AsmSignatureEnum.NEAR: return(op.IsImm); case AsmSignatureEnum.FAR: return(op.IsImm); case AsmSignatureEnum.SHORT_ENUM: return(op.IsImm); case AsmSignatureEnum.UNITY: return(op.IsImm && (op.Imm == 1)); case AsmSignatureEnum.Z: return(false); case AsmSignatureEnum.ER: return(false); case AsmSignatureEnum.SAE: return(false); case AsmSignatureEnum.K: return(op.IsReg && (RegisterTools.IsOpmaskRegister(op.Rn))); case AsmSignatureEnum.XMMREG: return(op.IsReg && RegisterTools.IsSseRegister(op.Rn)); case AsmSignatureEnum.YMMREG: return(op.IsReg && RegisterTools.IsAvxRegister(op.Rn)); case AsmSignatureEnum.ZMMREG: return(op.IsReg && RegisterTools.IsAvx512Register(op.Rn)); case AsmSignatureEnum.M32BCST: return(op.IsMem && op.NBits == 32); case AsmSignatureEnum.M64BCST: return(op.IsMem && op.NBits == 64); case AsmSignatureEnum.MEM_OFFSET: return(op.IsImm); case AsmSignatureEnum.REG_SREG: return(op.IsReg && (RegisterTools.IsSegmentRegister(op.Rn))); case AsmSignatureEnum.CR0: return(op.IsReg && (op.Rn == Rn.CR0)); case AsmSignatureEnum.CR1: return(op.IsReg && (op.Rn == Rn.CR1)); case AsmSignatureEnum.CR2: return(op.IsReg && (op.Rn == Rn.CR2)); case AsmSignatureEnum.CR3: return(op.IsReg && (op.Rn == Rn.CR3)); case AsmSignatureEnum.CR4: return(op.IsReg && (op.Rn == Rn.CR4)); case AsmSignatureEnum.CR5: return(op.IsReg && (op.Rn == Rn.CR5)); case AsmSignatureEnum.CR6: return(op.IsReg && (op.Rn == Rn.CR6)); case AsmSignatureEnum.CR7: return(op.IsReg && (op.Rn == Rn.CR7)); case AsmSignatureEnum.CR8: return(op.IsReg && (op.Rn == Rn.CR8)); case AsmSignatureEnum.REG_DREG: return(op.IsReg && (RegisterTools.IsDebugRegister(op.Rn))); case AsmSignatureEnum.BNDREG: return(op.IsReg && (RegisterTools.IsBoundRegister(op.Rn))); default: AsmDudeToolsStatic.Output_WARNING("AsmSignatureTools:isAllowed: add " + operandType); break; } return(true); }
/// <summary>Get brief description of the operand</summary> public static string Get_Doc(AsmSignatureEnum operandType) { switch (operandType) { case AsmSignatureEnum.MEM: return("memory operand"); case AsmSignatureEnum.M8: return("8-bits memory operand"); case AsmSignatureEnum.M16: return("16-bits memory operand"); case AsmSignatureEnum.M32: return("32-bits memory operand"); case AsmSignatureEnum.M64: return("64-bits memory operand"); case AsmSignatureEnum.M80: return("80-bits memory operand"); case AsmSignatureEnum.M128: return("128-bits memory operand"); case AsmSignatureEnum.M256: return("256-bits memory operand"); case AsmSignatureEnum.M512: return("512-bits memory operand"); case AsmSignatureEnum.R8: return("8-bits register"); case AsmSignatureEnum.R16: return("16-bits register"); case AsmSignatureEnum.R32: return("32-bits register"); case AsmSignatureEnum.R64: return("64-bits register"); case AsmSignatureEnum.REG_AL: return("AL register"); case AsmSignatureEnum.REG_AX: return("AX register"); case AsmSignatureEnum.REG_EAX: return("EAX register"); case AsmSignatureEnum.REG_RAX: return("RAX register"); case AsmSignatureEnum.REG_CL: return("CL register"); case AsmSignatureEnum.REG_CX: return("CX register"); case AsmSignatureEnum.REG_ECX: return("ECX register"); case AsmSignatureEnum.REG_RCX: return("RCX register"); case AsmSignatureEnum.REG_DX: return("DX register"); case AsmSignatureEnum.REG_EDX: return("EDX register"); case AsmSignatureEnum.REG_CS: return("CS register"); case AsmSignatureEnum.REG_DS: return("DS register"); case AsmSignatureEnum.REG_ES: return("ES register"); case AsmSignatureEnum.REG_SS: return("SS register"); case AsmSignatureEnum.REG_FS: return("FS register"); case AsmSignatureEnum.REG_GS: return("GS register"); case AsmSignatureEnum.IMM: return("immediate constant"); case AsmSignatureEnum.IMM8: return("8-bits immediate constant"); case AsmSignatureEnum.IMM16: return("16-bits immediate constant"); case AsmSignatureEnum.IMM32: return("32-bits immediate constant"); case AsmSignatureEnum.IMM64: return("64-bits immediate constant"); case AsmSignatureEnum.imm_imm: return("immediate constants"); case AsmSignatureEnum.imm16_imm: return("immediate constants"); case AsmSignatureEnum.imm_imm16: return("immediate constants"); case AsmSignatureEnum.imm32_imm: return("immediate constants"); case AsmSignatureEnum.imm_imm32: return("immediate constants"); case AsmSignatureEnum.NEAR: return("near ptr"); case AsmSignatureEnum.FAR: return("far ptr"); case AsmSignatureEnum.SHORT_ENUM: return("short ptr"); case AsmSignatureEnum.UNITY: return("immediate value 1"); case AsmSignatureEnum.ZERO: return("immediate value 0"); case AsmSignatureEnum.SAE: return("Optional Suppress All Exceptions {SAE}"); case AsmSignatureEnum.ER: return("Optional Rounding Mode {RN-SAE}/{RU-SAE}/{RD-SAE}/{RZ-SAE}"); case AsmSignatureEnum.Z: return("Optional Zero Mask {Z}"); case AsmSignatureEnum.REG_XMM0: return("XMM0 register"); case AsmSignatureEnum.XMMREG: return("xmm register"); case AsmSignatureEnum.YMMREG: return("ymm register"); case AsmSignatureEnum.ZMMREG: return("zmm register"); case AsmSignatureEnum.K: return("mask register"); case AsmSignatureEnum.M32BCST: return("vector broadcasted from a 32-bit memory location"); case AsmSignatureEnum.M64BCST: return("vector broadcasted from a 64-bit memory location"); case AsmSignatureEnum.MEM_OFFSET: return("memory offset"); case AsmSignatureEnum.REG_SREG: return("segment register"); case AsmSignatureEnum.REG_DREG: return("debug register"); default: AsmDudeToolsStatic.Output_WARNING("SignatureStore:getDoc: add " + operandType); return(operandType.ToString()); break; } }