⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disasmtables.pas

📁 dede 的源代码 3.10b
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -