D_xxx

Constants D_xxx define properties of the disassembled command as a whole, or tell Disassembler which mnemonics and arguments must be selected.

General type of the command, only one is allowed. Use D_CMDTYPE to extract:

D_CMD Ordinary command, none of the listed below (DEC, IDIV, MOVSB, UD2, ...)
D_MOV Move to or from integer register (MOV, MOVZX, ...)
D_MOVC Conditional move to integer register (CMOVZ, ...)
D_SETC Conditional set integer register (SETBE, ...)
D_TEST Used to test data (CMP, TEST, BT, AND, ...)
D_STRING String command with REPxxx prefix (REP MOVSB, REP SCASB, ...)
D_JMP Unconditional near jump (JMP)
D_JMPFAR Unconditional far jump (JMP FAR)
D_JMC Conditional jump depending only on flags (JNZ, JPE, ...)
D_JMCX Conditional jump depending on (E)CX and maybe flags (JCXZ, LOOP, LOOPNZ, ...)
D_PUSH Pushes exactly 1 (double)word of data (PUSH, PUSHF)
D_POP Pops exactly 1 (double)word of data (POP, POPF)
D_CALL Plain near call (CALL)
D_CALLFAR Plain far call (CALL FAR)
D_INT Interrupt (INT, INT0, INT3, ICEBP, ...)
D_RET Plain near return from call (RETN)
D_RETFAR Far return or IRET (RETF, IRET)
D_FPU FPU command (FABS, FADD, FINCSTP, ...)
D_MMX MMX instruction, including SSE extensions (MOVQ, PACKSSWB, ...)
D_3DNOW AMD's 3DNow! instruction (PF2ID, PFSUBR, ...)
D_SSE SSE instruction (MOVQ, PACKSSWB, ...)
D_IO Instruction that accesses I/O ports (IN, INSB, REP OUTS, ...)
D_SYS Instruction that is legal on Ring3 but is useful only in system code (MONITOR, ARPL, RDTSC, ...)
D_PRIVILEGED Privileged (non-Ring3) command (CLTS, HLT, INVLPG, LGDT, ...)
D_DATA Data recognized by the Analyser
D_PSEUDO Pseudocommand, used only in search models (JCC, CMOVCC, ...)
D_PREFIX Standalone prefix (recognized only if command contains repeated or contradictory prefixes, like INC [ES:FS:EAX])
D_BAD Bad or unrecognized command. Note that UD2 is treated as a valid command

Bits describing additional parts of the command:

D_SIZE01 LSB of the last byte of the opcode indicates data size (byte or word/doubleword)
D_POSTBYTE Instruction contains postbyte (extension of the opcode, technically implemented as a 1-byte immediate constant)

Bits used by Disassembler to determine which mnemonics should be used

D_LONGFORM This is a long form of the string command (short form: MOVSB; long form: MOVS [BYTE EDI],[BYTE ESI])

Required data and address size (controlled by prefixes 0x66, 0x67):

D_DATA16 Instruction requires 16-bit operand size (CBW, CWD)
D_DATA32 Instruction requires 32-bit data size (CDQ, CWDE)
D_ADDR16 Instruction requires 16-bit address size (JCXZ, LOOPW, ...)
D_ADDR32 Instruction requires 32-bit address size (JECXZ, LOOPD, ...)

Prefixes that command may, must or must not possess, only one is allowed. Use D_MUSTMASK to extract:

D_NOMUST No obligatory prefixes (default)
D_MUST66 SSE command, requires prefix 0x66, but neither 0xF2 nor 0xF3
D_MUSTF2 SSE command, requires prefix 0xF2, but neither 0x66 nor 0xF3
D_MUSTF3 SSE command, requires prefix 0xF3, but neither 0x66 nor 0xF2
D_MUSTNONE MMX or SSE command, neither 0x66 nor 0xF2 nor 0xF3 are allowed
D_NEEDF2 SSE command, requires prefix 0xF2 but not 0xF3
D_NEEDF3 SSE command, requires prefix 0xF3 but not 0xF2
D_NOREP Must include neither 0xF2 nor 0xF3
D_MUSTREP Must include prefix 0xF3 (REP)
D_MUSTREPE Must include prefix 0xF3 (REPE)
D_MUSTREPNE Must include prefix 0xF2 (REPNE)

Additional prefixes that command may possess:

D_LOCKABLE LOCK prefix is allowed, but only if this instruction accesses memory
D_BHINT Instruction supports branch hints (prefixes 0x2E, 0x3E) 

Bits determining whether ModRegRM address byte field must specify register or memory:

D_MEMORY Mod field of the ModRegRM byte must specify memory location
D_REGISTER Mod field of the ModRegRM byte must specify register

Flags modified by command, only one is allowed. Use D_FLAGMASK to extract:

D_NOFLAGS Flags S, Z, P, O, C remain unchanged (most MOVxx, I/O, FPU, MMX, SSE, 3DNow! command)
D_ALLFLAGS Modifies flags S, Z, P, O, C (most integer arithmetic commands)
D_FLAGZ Modifies only flag Z (LAR, ARPL, ...)
D_FLAGC Modifies only flag C (CLC, CMC, STC)
D_FLAGSCO Modifies only flags C and O (RCL, ROR, ...)
D_FLAGD Modifies only flag D (CLD, STD)
D_FLAGSZPC Modifies flags Z, P and C (FCOMI, FUCOMI, ...)
D_NOCFLAG Modifies flags S, Z, P and O (INC, DEC)

Flags determining how commands influence FPU stack. Use D_FPUMASK to extract:

D_FPUSAME Does not rotate FPU stack (default)
D_FPUPOP Pops FPU stack oncer
D_FPUPOP2 Pops FPU stack twice
D_FPUPUSH Pushes FPU stack oncer

Flags determining how commands influences register ESP:

D_CHGESP Instruction indirectly modifies ESP (CALL, ENTER, POP, ...)

Flags specifying other command features:

D_HLADIR Instruction has non-standard order of operands in HLA (Randall Hyde's High Level Assembler) notation
D_WILDCARD Command mnemonics contains wildcard which must be replaced by W (word) or D (doubleword data size) (ICMPSB/CMPSW)
D_COND Conditional instruction, its action depends on the CPU flags (CMOVB, JNZ, LOOPNE, ...)
D_USESCARRY Result of the executions depends on the state of C flag (ADC, CMC, JB, RCL, ...)

Flags that mark rare or suspicious commands, only one is allowed. Use D_USEMASK to extract:

D_RARE Command is rare or obsolete in 32-bit flat Windows applications (MWAIT, AAA, CLI, OUT, INT3, ...)
D_SUSPICIOUS Suspicious command (JMP FAR, SYSEXIT, UD2, ...)
D_UNDOC Undocumented instruction (SALC, ...)


See also:
t_bincmdt_cmdinfo, t_disasm, Cmdinfo(), Disasm()