📄 disasmtables.pas
字号:
unit DisAsmTables;
interface
{ Code First character after #:
A: Direct Address.
C: Reg field in ModRm specifies Control register.
D: Reg field in ModRm specifies Debug register.
E: General purpose register or memory address specified in the ModRM byte.
F: EFlags register
G: Reg field in ModRM specifies a general register
H: Signed immidiate data
I: Imidiate data
J: Relative jump Offset
M: memory address spcified in the ModRM byte.
O: Relative Offset Word or DWord
P: Reg field in ModRM specifies a MMX register
Q: MMX register or memory address specified in the ModRM byte.
R: general purpose register specified in the ModRM byte.
S: Reg field in ModRM specifies a Segment register
T: Reg field in ModRM specifies a MMX register
P: Seg prefix override.
Second character after #
a: two Word or two DWord, only used by BOUND
b: Byte.
c: Byte or word
d: DWord
p: 32 or 16 bit pointer
q: QWord
s: 6Byte
v: Word or DWord
w: Word
t: Tera byte
Third character after #
j: jump Operand (Relative or absolute)
First character after @
e: used by register (@eax, @esp ..) return e with the character following when
operand size = 4 ortherwise only the following character.
g: Group, return the group insruction specified by OperandType
and the reg field of the ModRM byte.
h: Operand for group, return operands for the group insruction specified
by OperandType and the reg field of the ModRM byte.
m: Must have size, Size indicator always set.
o: Operand size, returns the name (bwdq) of the number following, divided
by two when operand size <> 4.
p: Seg prefix override. Sets the prefix to the following charchter + 's'
s: Size override (address or operand).
follow by o: operand size override
a: address size override
First character after %
c: Use the opcode instead in addition to the assembler instruction
}
const
OneByteOpcodes: array[char] of string =
// 0
('add #Eb , #Gb ', 'add #Ev , #Gv ', 'add #Gb , #Eb ', 'add #Gv , #Ev ',
'add al, #Hb ', 'add @eax, #Hv ', 'push es', 'pop es',
'or #Eb , #Gb ', 'or #Ev , #Gv ', 'or #Gb , #Eb ', 'or #Gv , #Ev ',
'or al, #Ib ', 'or @eax, #Iv ', 'push cs', '@c2',
// 1
'adc #Eb , #Gb ', 'adc #Ev , #Gv ', 'adc #Gb , #Eb ', 'adc #Gv , #Ev ',
'adc al, #Ib ', 'adc @eax, #Iv ', 'push ss', 'pop ss',
'sbb #Eb , #Gb ', 'sbb #Ev , #Gv ', 'sbb #Gb , #Eb ', 'sbb #Gv , #Ev ',
'sbb al, #Ib ', 'sbb @eax, #Iv ', 'push ds', 'pop ds',
// 2
'and #Eb , #Gb ', 'and #Ev , #Gv ', 'and #Gb , #Eb ', 'and #Gv , #Ev ',
'and al, #Ib ', 'and @eax, #Iv ', '@pe', 'daa',
'sub #Eb , #Gb ', 'sub #Ev , #Gv @m ', 'sub #Gb , #Eb ', 'sub #Gv , #Ev @m ',
'sub al, #Ib ', 'sub @eax, #Iv ', '@pc', 'das',
// 3
'xor #Eb , #Gb ', 'xor #Ev , #Gv ', 'xor #Gb , #Eb ', 'xor #Gv , #Ev ',
'xor al, #Ib ', 'xor @eax, #Iv ', '@ps', 'aaa',
'cmp #Eb , #Gb ', 'cmp #Ev , #Gv ', 'cmp #Gb , #Eb ', 'cmp #Gv , #Ev ',
'cmp al, #Ib ', 'cmp @eax, #Iv ', '@pd', 'aas',
// 4
'inc @eax', 'inc @ecx', 'inc @edx', 'inc @ebx',
'inc @esp', 'inc @ebp', 'inc @esi', 'inc @edi',
'dec @eax', 'dec @ecx', 'dec @edx', 'dec @ebx',
'dec @esp', 'dec @ebp', 'dec @esi', 'dec @edi',
// 5
'push @eax', 'push @ecx', 'push @edx', 'push @ebx',
'push @esp', 'push @ebp', 'push @esi', 'push @edi',
'pop @eax', 'pop @ecx', 'pop @edx', 'pop @ebx',
'pop @esp', 'pop @ebp', 'pop @esi', 'pop @edi',
// 6
'pusha', 'popa', 'bound #Gv , #Ma ', 'arpl #Ew , #Gw ',
'@pf', '@pg', '@so', '@sa',
'push #Iv ', 'imul #Gv , #Ev , #Iv ', 'push #Ib ', 'imul #Gv , #Ev , #Ib ',
'insb', 'ins@o4', 'outsb', 'outs@o4',
// 7
'jo #Jbj', 'jno #Jbj', 'jb #Jbj', 'jnb #Jbj',
'jz #Jbj', 'jnz #Jbj', 'jbe #Jbj', 'jnbe #Jbj',
'js #Jbj', 'jns #Jbj', 'jp #Jbj', 'jnp #Jbj',
'jl #Jbj', 'jnl #Jbj', 'jle #Jbj', 'jnle #Jbj',
// 8
'@ga#Eb , #Ib ', '@ga#Ev , #Iv ', '@ga#Ev , #Ib ', '@ga#Ev , #Hb ',
'test #Eb , #Gb ', 'test #Ev , #Gv ', 'xchg #Eb , #Gb ', 'xchg #Ev , #Gv ',
'mov #Eb , #Gb ', 'mov #Ev , #Gv ', 'mov #Gb , #Eb ', 'mov #Gv , #Ev ',
'mov #Ew , #Sw ', 'lea #Gv , #M ', 'mov #Sw , #Ew ', 'pop #Ev ',
// 9
'nop', 'xchg eax, @ecx', 'xchg eax, @edx', 'xchg eax, @ebx',
'xchg eax, @esp', 'xchg eax, @ebp', 'xchg eax, @esi', 'xchg eax, @edi',
'c@o2@o4@e ', 'c@o4@o8', 'call #Ap ', 'wait',
'pushf #Fv ', 'pop #Fv ', 'sahf', 'lahf',
// A
'mov al, #Ob ', 'mov @eax, #Ov ', 'mov #Ob , al', 'mov #Ov , @eax',
'movsb', 'movs@o4', 'cmpsb', 'cmps@o4',
'test al, #Ib ', 'test @eax, #Iv ', 'stosb', 'stos@o4',
'lodsb', 'lods@o4', 'scasb', 'scas@o4',
// B
'mov al, #Ib ', 'mov cl, #Ib ', 'mov dl, #Ib ', 'mov bl, #Ib ',
'mov ah, #Ib ', 'mov ch, #Ib ', 'mov dh, #Ib ', 'mov bh, #Ib ',
'mov @eax, #Iv ', 'mov @ecx, #Iv ', 'mov @edx, #Iv ', 'mov @ebx, #Iv ',
'mov @esp, #Iv ', 'mov @ebp, #Iv ', 'mov @esi, #Iv ', 'mov @edi, #Iv ',
// C //Fixed by DaFixer from 'ret #Ib '
'@gb#Eb , #Ib ', '@gb#Ev , #Ib ', 'ret #Iw ', 'ret',
'les #Gv , #Mp ', 'lds #Gv , #Mp ', 'mov #Eb , #Ib ', 'mov #Ev , #Iv ',
'enter #Lw , #Ib ', 'leave', 'ret #Lw ', 'ret',
'int 3', 'int #Ib ', 'into', 'iret',
// D
'@gb#Eb , 1', '@gb#Ev , 1', '@gb#Eb , cl', '@gb#Ev , cl',
'aam', 'aad', '%c ', 'xlat',
'@ca', '@cb', '@cc', '@cd',
'@ce', '@cf', '@cg', '@ch',
// E
'loopn #Jbj', 'loope #Jbj', 'loop #Jbj', 'jcxz #Jbj',
'in al, #Ib ', 'in @eax, #Ib ', 'out #Ib , al', 'out #Ib , @eax',
'call #Jvc', 'jmp #Jvj', 'jmp #Ap ', 'jmp #Jbj',
'in al, dx', 'in @eax, dx', 'out dx, al', 'out dx, @eax',
// F
'lock', '%c ', 'repne', 'rep',
'hlt', 'cmc', '@gc#Eb @h1', '@gc#Ev @h2 ',
'clc', 'stc', 'cli', 'sti',
'cld', 'std', '@gd@h3', '@ge@h4');
// @c2
TwoByteOpcodes: array[char] of string =
// 0
('@gf', '%c ', 'lar #Gv , #Ew ', 'lsl #Gv , #Ew ',
'%c ', '%c ', 'ctls', '%c ',
'invd', 'wbinvd', '%c ', 'ud2',
'%c ', '%c ', '%c ', '%c ',
// 1
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
// 2
'mov #Rd , #Cd ', 'mov #Rd , #Dd ', 'mov #Cd , #Rd ', 'mov #Dd , #Cd ',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
// 3
'wrmsr', 'rdtsc', 'rdmsr', 'rdpmc',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
// 4
'cmovo #Gv , #Ev ', 'cmovno #Gv , #Ev ', 'cmovb #Gv , #Ev ', 'cmovnb #Gv , #Ev ',
'cmove #Gv , #Ev ', 'cmovne #Gv , #Ev ', 'cmovbe #Gv , #Ev ', 'cmovnbe #Gv , #Ev ',
'cmovs #Gv , #Ev ', 'cmovns #Gv , #Ev ', 'cmovp #Gv , #Ev ', 'cmovnp #Gv , #Ev ',
'cmovl #Gv , #Ev ', 'cmovnl #Gv , #Ev ', 'cmovle #Gv , #Ev ', 'cmovnle #Gv , #Ev ',
// 5
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', '%c ', '%c ',
// 6
'punpcklbw #Pq , #Qd ','punpcklwd #Pq , #Qd ', 'punpckldq #Pq , #Qd ','packusdw #Pq , #Qd ',
'pcmpgtb #Pq , #Qd ', 'pcmpgtw #Pq , #Qd ', 'pcmpgtd #Pq , #Qd ', 'packsswb #Pq , #Qd ',
'punpckhbw #Pq , #Qd ','punpckhwd #Pq , #Qd ', 'punpckhdq #Pq , #Qd ','packssdw #Pq , #Qd ',
'%c ', '%c ', 'movd #Pd , #Ed ', 'movq #Pq , #Qq ',
// 7
'%c ', '@gg', '@gh', '@gi',
'pcmpeqb #Pq , #Qd ', 'pcmpeqw #Pq , #Qd ', 'pcmpeqd #Pq , #Qd ', 'emms',
'%c ', '%c ', '%c ', '%c ',
'%c ', '%c ', 'movd #Ed , #Pd ', 'movq #Qq , #Pq ',
// 8
'jo #Jvj', 'jno #Jvj', 'jb #Jvj', 'jnb #Jvj',
'jz #Jvj', 'jnz #Jvj', 'jbe #Jvj', 'jnbe #Jvj',
'js #Jvj', 'jns #Jvj', 'jp #Jvj', 'jnp #Jvj',
'jl #Jvj', 'jnl #Jvj', 'jle #Jvj', 'jnle #Jvj',
// 9
'seto #Eb ', 'setno #Eb ', 'setb #Eb ', 'setnb #Eb ',
'setz #Eb ', 'setnz #Eb ', 'setbe #Eb ', 'setnbe #Eb ',
'sets #Eb ', 'setns #Eb ', 'setp #Eb ', 'setnp #Eb ',
'setl #Eb ', 'setnl #Eb ', 'setle #Eb ', 'setnle #Eb ',
// A
'push fs', 'pop fs', 'cpuid', 'bt #Ev , #Gv %m ',
'shld #Ev , #Gv , #Ib ', 'shld #Ev , #Gv , cl', '%c ', '%c ',
'push gs', 'pop gs', 'rsm', 'bts #Ev , #Gv ',
'shrd #Ev , #Gv , #Ib ', 'shrd #Ev , #Gv , cl', '%c ', 'imul #Gv , #Ev ',
// B
'cmpxchg #Eb , #Gb ', 'cmpxchg #Ev , #Gv ', 'lss #Mp ', 'btr #Ev , #Gv ',
'lfs #Mp ', 'lgs #Mp ', 'movzx #Gv , @m #Eb ', 'movzx #Gv , @m #Ew ',
'%c ', 'ud2', '@gb #Ev , #Ib ', 'btc #Ev , #Gv ',
'bsf #Gv , #Ev ', 'bsr #Gv , #Ev ', 'movsx #Gv ,@m #Eb ', 'movsx #Gv ,@m #Ew ',
// C
'xadd #Eb , #Gb ', 'xadd #Ev , #Gv ', '%c ', '%c ',
'%c ', '%c ', '%c ', '@gj',
'bswap @eax', 'bswap @ecx', 'bswap @edx', 'bswap @ebx',
'bswap @esp', 'bswap @ebp', 'bswap @esi', 'bswap @edi',
// D
'%c ', 'psrlw #Pq , #Qd ', 'psrld #Pq , #Qd ', 'prslq #Pq , #Qd ',
'%c ', 'pmullw #Pq , #Qd ', '%c ', '%c ',
'pcubusb #Pq , #Qq ', 'pcubusw #Pq , #Qq ', '%c ', 'pand #Pq , #Qq ',
'paddusb #Pq , #Qq ', 'paddusw #Pq , #Qq ', '%c ', 'pandn #Pq , #Qq ',
// E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -