📄 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
'@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');
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 ',
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -