                              ͻ
                                DIZX32 v 1.2  
                              ͼ

                           㪮⢮ ࠧࠡ稪
                           

  蠫  ⨫ ᢮ directX, 騩  
ᥬ஢, 騩 直 ࠩ  . 㤠  訢
?।⠢    ᫥饥 ᯮ짮 ᥬ騩 
 DIZX32.  ।砥  ᥬ஢  
 i386    ( 襩  ਢ஢).
⠥ ४⭮ ⮫쪮  win32 ( ᫨  ࠡ int 20h, 
஢  UNIX).


᭮ ࠪ⨪:
~~~~~~~~~~~~~~~~~~~~~~~~
 * ᠫ   ᯮ짮  /ணࠬ (C call)
 * প   ७ 
 *  ᯮ짮  ᥬ .
 * 筮  頥   .
 *  ᮤন   .
 *  ᮤন   ᮫ ᬥ饭.

楤:
~~~~~~~~~
 VOID dizx32_init (

                        DWORD bufer             // ,㤠 㤥 ᯠ ⠡.
                 );


 楤 "ᯠ뢠"  ,㪠    㬥⮬
⠡,ᯮ㥬   ࠡ. ⠡ ⠢ 1 .


 DWORD dizx32 (
                DWORD bufer,                    // ᮤঠ騩 ⧠ᬥ㥬 
                DWORD out,                      // ,ᮤঠ騩 ᫥ 믮   
                DWORD table                     //㪠⥫  ⠡ (.)
             );

।⢥  楤 .ᥬ ,ᬥ饭 ன
㪠  ࠬ஬.  ,㪠  㬥⮬ 㤥 ᠭ
 output , ᮤন ଠ  .㬥 table 
ᮤঠ 㪠⥫  ⠡,ᯠ dizx32_init.
楤 頥    -1  砥 㤠.


 / ⠭:
~~~~~~~~~~~~~~~~~~~~~
,뢠   頥   ,㪠 ࠬ஬
out  ᫥騩 ଠ:

struct output {
                 BYTE   com_size;                       // 
                 BYTE   prefix_size;                    //㬬ୠ  䨪ᮢ

                 BYTE   sib;                            //SIB (᫨ )
                 BYTE   modrm;                          //MODR/M (᫨ )

                 BYTE   o_flags;                        //䫠
                 BYTE   ex_flags;                       //७ 䫠

                 BYTE   index_reg;                      // ॣ
                 BYTE   reg2_base;                      //2- ॣ
                 BYTE   reg1;                           //1- ॣ

                 BYTE   size_mem;                       // ᬥ饭(1/2/4)
                 BYTE   size_operand;                   // ࠭(1/2/4)

                 DWORD  mem_offset;                     //ᬥ饭
                 DWORD  operand;                        //࠭

                 struct opcode descryptor;              //⥫ 
               };

 ⥫  ⠪ ன:


struct opcode {
                 BYTE   mask_flag;                      //䫠 ᪨  .
                 BYTE   modr_m_flag;                    //䫠  cop,䨪  .
                 BYTE   mask1;                          //᪠   #1
                 BYTE   mask2;                          //᪠  #2
              };


 output.o_flags  ࠬ ⢨     
⠢:

                              ଠ 䫠:
                              ==============

           1-     2-   䨪
 ࠭ ॣ ॣ ࠭
                         
                         
  Ŀ
   7  6  5  4  3  2  1  0 
  
                             
                             
    ᬥ饭   䨪
    ॣ           䨪 ᬥ饭

    ⢥砥  稥 - ⠢饣 .

  䫠  C:
#define  OUT_FLAG_OPERAND       0x80    //10000000b
#define  OUT_FLAG_INDEX         0x40    //01000000b
#define  OUT_FLAG_REG1          0x20    //00100000b
#define  OUT_FLAG_OFFSET        0x10    //00010000b
#define  OUT_FLAG_REG2BASE      0x08    //00001000b
#define  OUT_FLAG_JUST_PREFIX   0x04    //00000100b
#define  OUT_FLAG_O_PREFIX      0x02    //00000010b
#define  OUT_FLAG_A_PREFIX      0x01    //00000001b

                              ७ 䫠:
                              =================

                ﭨ  W(᫨  )
                    
                    
               Ŀ
                7  6  5  4  3  2  1  0 
               
                        
                        
       ﭨ  W   ࠡ⠥   [reg=0;mem=1]
       (᫨  )     /ॣ஬(⭮  reg2_base)


#define  D_STATE                0x80    //10000000b       ;(d=1  mem->reg  /d=0  mem<-reg  )
#define  W_STATE                0x40    //01000000b       ;(0- /1-/)
#define  REG_MEM                0x20    //00100000b


 ᠥ  opcode ,  ।砥 ᪮॥  ⥫
  ⠡,  ᮤন  mask1  mask2 㦠騥 ।⥫ﬨ
,ᮤঠ騬    (..  0f  mask1 ᫨ 室)
 mask_flag  modr_m_flag:

          Ŀ
          modr/m  prefix_state reg/kop 
          
              Ŀ            
  mask_flag                      Ŀ modr_m_flag
                          
      ͳ7 6 5432107 65 432 1 0ͼ    mask1        mask2   
          Ľ                   
                        Ŀ
                    Ŀ Ŀ      
                                                
    Ŀ
    len_mask  0f cop_exept d(1)/s(0)  operand cop 
    

modr/m        --  ਧ ⢨    modr/m
                          #define  MODR_M        0x01    // modr/m 

prefix_state  --     䨪ᮨ,᫨  , 
                          #define  A_PREFIX      0x40    //䨪  ࠧ୮ ᬥ饭
                          #define  O_PREFIX      0x80    //䨪  ࠧ୮ ࠭
                          #define  _PREFIX       0xC0    // 䨪(ex:lock,rep)

reg_kop       --   饣  (᫨ )
len_mask      --   ᪨ ( )
                          #define  MASK1_2       0x20    //᪠  2 
                          #define  MASK1_3       0x40    //᪠  3 
                          #define  MASK1_4       0x60    //᪠  4 
                          #define  MASK1_5       0x80    //᪠  5 
                          #define  MASK1_6       0xA0    //᪠  6 
                          #define  MASK1_7       0xC0    //᪠  7 
                          #define  FULL_MASK1    0xE0    //᪠  8 

0f            --  ਧ ७ (   ࠢ 0x0f)
                          #define  EX_0F         0x10    //  ७

cop           --  ਧ    饣    ண ࠬ(c/op)
                          #define  C_OP          0x08    //  ᮤন 騩 

d_s           --       d(祭 1)  s(祭 0)
                       6-   ᪥ 
                          #define  DW_EXIST      0x02    //  ᮤন  D ᨮ S

operand       --     ࠭
                          #define  OP_NO_OPERAND    0x00    // ࠭
                          #define  OP_BYTE_OPERAND  0x10    //࠭ - 
                          #define  OP_DWORD_OPERAND 0x20    //࠭ - 
                          #define  OP_JUST_OPERAND  0x30    // ࠭(  )

cop_exept     --     reg_kop ᪮ ᪫祭 (. )
                          #define  EXEPT_NEED       0x08    //  ᪫祭
                                                            // . 

                     㭪樮쭮 ਯ஢ 
                     =====================================

 । ଠ樨       ᯮ ⠡
ਯ஢ .  ⮩ ⠡ ।⠢  ᥡ ,
   mask_flag  modr_m_flag:

_op             struc
                         mask_flag               db      0
                         modr_m_flag             db      0
                ends

 । 室  ᯮ ᪠ ,   
  len_mask.᫨    ⮬ 0fh ,  室
⠭  0f ( ᨬ᪨ . 室) ,騩  ⮬,
 ⮬   0fh,⮣ DIZX 㤥 ࠡ  
⠡楩 ..  ⠡  2 ᥪ樨 :
     ,   ७ , ࠧ  ⠡殩
.⮬  祭 ଠ樨  ७  室
  "७" ⠡.   ७
㭪樮쭮      ⠡  ஢
 .

   6     d/s. 㪠뢠    
  d ,    ⮨ s.
᫨   䨪ᮬ, ।  prefix_state , ஥
㪠뢠  ⨯ 䨪    ⢨. ࠭  
⠭ ᮮ⢥⢥  operand,⠬ 㪠뢠  ⢨ ࠭
   ⢨ (⮬⮬।   ).  
筮 ଠ樨  । ࠧ ࠭  室 㪠뢠
  ࠧ ᨫ쭮   祭 OP_BYTE_OPERAND  OP_DWORD_OPERAND.
 ન ਬ ⠪    int (BYTE) . ⮩  - 0cdh,
 ଠ樨  ࠧ ࠭   , ᪠ ⮩  
 ࠢ 8- ⠬.
 ᫨   騩  ( 㦥    
), 㪠뢠  稥 饣   ᠬ  ।⢥
㪠뢠   reg/kop.

  ᯮ -⠡ ,   ஬  ( 256+ 
७ ) 뢠 .


ਬ ⠢ :

1)_op  <FULL_MASK1,_PREFIX>               ; 64h  - 䨪 fs:

2)_op  <MASK1_6 OR DW_EXIST OR MODR_M,>   ; 38h  - cmp
  ᪠=6 
    D
   modr/m

3)_op  <FULL_MASK1,OP_BYTE_OPERAND>       ; cd   - int
  ᪠=8 
   ࠭ ,ࠧ 1 

4)_op  <FULL_MASK1 OR EX_0F OR MODR_M,>   ; 20h  - mov reg32,sysreg
  ᪠=8 
  ७ 
   modr/m


                             堭 ᪫祭
                             ===================
 ন ᮩ 堭 ᪫祭  .᪫祭 
饣  ;易   ⥬,    ( ⭮   0ffh)  騥  ,  । ஬ -
 0ffffh ?;) 祭 ᪫祭 室   ᮢ :
        #define  ENABLE_EXEPT1          0x01
        #define  ENABLE_EXEPT2          0x02
        #define  ENABLE_EXEPT3          0x04
  ন ६  3- ᪫祭.⥬  ᪫祭
⭮ 뢠   ᮢ:

#define  EXEPT_OP_1             0x07  // ᪫祭  .  111b

#define  EXEPT_OP_2             0x00  //᪫祭 #2  #3  । ⮬
#define  EXEPT_OP_3             0x00  //  ,  室
                                      //.


맮  ந室 C -call' .. ࠬ । १ ⥪ 
⭮ 浪  ᫥ ࠡ 楤 ⥪  頥.楤 ࠭
 ॣ ,  䫠  ॣ EAX.

⠥ ⮫쪮  ,   ᮯ஢ ᠬ ,    
ਢ.


                                                        necr0mancer Feb-2002