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

📄 dbg.asm

📁 这是一个JPEG解码器,里面使用了MMX,SSE等汇编指令集
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        mov         esi, ebp
InLine:
        fld         real4 ptr [edi]
        fstp        f8
        INVOKE  sprintf, OFFSET DBG_Buffer, OFFSET fmt, real4 ptr f8[0], real4 ptr f8[4]    
        IF DEBUG_FILE    
        push        eax
        INVOKE  WriteFile, DBG_File, OFFSET DBG_Buffer, eax, OFFSET DBG_Nb, 0
        pop         eax
        ENDIF

        IF DEBUG_WND
        push        OFFSET DBG_Buffer
        call        OutputDebugStringA
        ENDIF    

        mov         word ptr fmt[6], 0
        add         edi, 4
        dec         ebx
        jnz         Row

        popad
        fxrstor     DBG_FPUSav
ENDIF
        ret

DBG_DumpNxMFloats ENDP

;//=========================================================================
;// Dump IDCT input
;// params : esp+4 : pointer to input
;// params : eax : pointer to quant. table
;//=========================================================================

.DATA
edisav dword ?
ecxsav dword ?
edxsav dword ?
.CODE

DBG_DumpIdctIn PROC
        mov         edisav, edi
        mov         ecxsav, ecx
        mov         edxsav, edx
        lea         edi, [esp+4]
        DBG         "<IDCT_IN>"
        DBG         "<INPTR>"
        call        DBG_Dump8x8DWords
        DBG         "</INPTR>"
        mov         edi, eax
        DBG         "<QPTR>"
        mov         ecx, 8
        mov         edx, 8
        call        DBG_DumpNxMFloats
        DBG         "</QPTR>"
        DBG         "</IDCT_IN>"
        mov         edi, edisav
        mov         ecx, ecxsav
        mov         edx, edxsav
        ret
DBG_DumpIdctIn ENDP

;//=========================================================================
;// Dump IDCT output
;// params : edi : pointer to output
;//=========================================================================

DBG_DumpIdctOut8x8 PROC
        mov         ecxsav, ecx
        mov         edxsav, edx
        DBG         "<IDCT_OUT_8x8>"
        mov         ecx, 8
        mov         edx, 8
        call        DBG_DumpNxMFloats
        DBG         "</IDCT_OUT_8x8>"
        mov         ecx, ecxsav
        mov         edx, edxsav
        ret   
DBG_DumpIdctOut8x8 ENDP

DBG_DumpIdctOut16x16 PROC
        mov         ecxsav, ecx
        mov         edxsav, edx
        DBG         "<IDCT_OUT_16x16>"
        mov         ecx, 16
        mov         edx, 16
        call        DBG_DumpNxMFloats
        DBG         "</IDCT_OUT_16x16>"
        mov         ecx, ecxsav
        mov         edx, edxsav
        ret   
DBG_DumpIdctOut16x16 ENDP

DBG_DumpIdctOut16x8 PROC
        mov         ecxsav, ecx
        mov         edxsav, edx
        DBG         "<IDCT_OUT_16x8>"
        mov         ecx, 16
        mov         edx, 8
        call        DBG_DumpNxMFloats
        DBG         "</IDCT_OUT_16x8>"
        mov         ecx, ecxsav
        mov         edx, edxsav
        ret   
DBG_DumpIdctOut16x8 ENDP

DBG_DumpIdctOut8x16 PROC
        mov         ecxsav, ecx
        mov         edxsav, edx
        DBG         "<IDCT_OUT_8x16>"
        mov         ecx, 8
        mov         edx, 16
        call        DBG_DumpNxMFloats
        DBG         "</IDCT_OUT_8x16>"
        mov         ecx, ecxsav
        mov         edx, edxsav
        ret   
DBG_DumpIdctOut8x16 ENDP

;//=========================================================================
;// Dump SOF header
;//=========================================================================

.DATA

sIDCT_8x8    byte "8x8", 0
sIDCT_16x16  byte "16x16", 0
sIDCT_16x8   byte "16x8", 0
sIDCT_8x16   byte "8x16", 0

DBG_IDCTName dword sIDCT_8x16, sIDCT_16x8, sIDCT_16x16, sIDCT_8x8

.CODE

DBG_Sof PROC

        pushad
        pushfd

        DBG "<SOF0>"
        DBG "  Nf : %d", [Ctx].Image.Nf
        DBG "  X : %d", [Ctx].Image.width
        DBG "  Y : %d", [Ctx].Image.height
        DBG "  Hmax : %d", [Ctx].FrameInfo.Hmax
        DBG "  Vmax : %d", [Ctx].FrameInfo.Vmax
        DBG "  NbMCU : %d", [Ctx].FrameInfo.NbMCU
        DBG "  Ri : %d", [Ctx].FrameInfo.Ri
        DBG "  DeltaRGB : %d", [Ctx].FrameInfo.DeltaRGB

        sub         ecx, ecx
FLoop:
        DBG "  <COMP%d>", ecx

        imul        edi, ecx, sizeof(COMPINFO)
        lea         edi, [Ctx].FrameInfo.CompInfo[edi]
        
        ASSUME edi:PTR COMPINFO

        DBG "    H : %d", [edi].H
        DBG "    V : %d", [edi].V


        FOR func,<IDCT_8x16_SSE2, IDCT_16x8_SSE2, IDCT_16x16_SSE2, IDCT_8x8_SSE2, IDCT_8x16_SSE, IDCT_16x8_SSE, IDCT_16x16_SSE, IDCT_8x8_SSE>
        cmp         [edi].Idct, func
        jne         @F

        .DATA
        @CatStr(<s>,func) byte @CatStr(<!">,func,<!">), 0
        .CODE

        mov         eax, OFFSET @CatStr(<s>,func)
        jmp         Displ
@@:
        ENDM  
Displ:
        DBG "    IDCT : %s", eax

        mov         edx, [edi].QuantTable
        test        edx, edx
        jnz         TDef2
        DBG "    Qtable : <not defined>"
        jmp         NextC2
TDef2:
        lea         esi, [Ctx].QuantTable0
        sub         edx, esi
        shr         edx, 6+2
        DBG "    Qtable : %d", edx
NextC2:

        sub         edx, edx
@@:
        inc         edx
        cmp         edx, [Ctx].FrameInfo.Hmax
        jne         @B

        DBG "  </COMP%d>", ecx
        inc         ecx
        cmp         ecx, [Ctx].Image.Nf
        jb          FLoop

        DBG "</SOF0>"

        popfd
        popad

        ret

DBG_Sof ENDP

;//=========================================================================
;// Dump SOS header
;//=========================================================================

DBG_Sos PROC

        pushad
        pushfd

        DBG "<SOS>"

        sub         ecx, ecx
        lea         edi, [Ctx].FrameInfo.CompInfo[0]
        ASSUME edi:PTR COMPINFO
@@:
        DBG "  <COMP%d>", ecx
        mov         eax, [edi].DCTable
        lea         esi, [Ctx].HufTable0
        sub         eax, esi
        cdq
        mov         ebx, 2*sizeof(HUFFTABLE)
        idiv        ebx
DBG "    DC table : %d", eax

        mov         ebx, 2*sizeof(HUFFTABLE)
        mov         eax, [edi].ACTable
        lea         esi, [Ctx].HufTable0
        sub         eax, esi
        cdq
        mov         ebx, 2*sizeof(HUFFTABLE)
        idiv        ebx
        DBG "    AC table : %d", eax
        DBG "  </COMP%d>", ecx

        add         edi, sizeof(COMPINFO)
        inc         ecx
        cmp         ecx, [Ctx].Image.Nf
        jne         @B

        DBG "</SOS>"

        popfd
        popad
        ret

DBG_Sos ENDP

;//=========================================================================
;// Dump DRI header
;//=========================================================================

DBG_Dri PROC

        pushad
        pushfd

        DBG "<DRI>"
        DBG "  %d", [Ctx].FrameInfo.Ri
        DBG "</DRI>"

        popfd
        popad
        ret

DBG_Dri ENDP

;//=========================================================================
;// Dump quantization table
;// input : ebx : ptr to table
;//=========================================================================

DBG_Qtable PROC

        pushad
        pushfd

        DBG "<QUANTTABLE>"

        mov         ecx, ebx
        lea         eax, [Ctx].QuantTable0
        sub         ecx, eax
        shr         ecx, 6+2

        DBG "  Index : %d", ecx

        mov         edi, ebx
        mov         ecx, 8
        mov         edx, 8
        call        DBG_DumpNxMFloats

        DBG "</QUANTTABLE>"

        popfd
        popad
        ret

DBG_Qtable ENDP

;//=========================================================================
;// Dump huffman table index and type
;// input : edx : index, eax : type
;//=========================================================================

DBG_Htable PROC

        pushad
        pushfd

        DBG "<HTABLE>"
        cmp         eax, 0
        je          DC
        DBG "  Type : AC"
        jmp         Idx
DC:       
        DBG "  Type : DC"
Idx:
        DBG "  Index : %d", edx
        DBG "</HTABLE>"

        popfd
        popad
        ret

DBG_Htable ENDP

;//=========================================================================
;// Check bitstream
;//=========================================================================

DBG_CheckBS PROC

        pushfd
        pushad
        ASSERT(SDPTR BS.Bits !>= 0)
        ASSERT(BS.Bits !<= 64)
        mov         eax, BS.CurrentPtr
        ASSERT(eax !<= BS.Limit)
        add         eax, BS.NbLeft
        ASSERT(eax == BS.Limit)
        popad
        popfd
        ret

DBG_CheckBS ENDP

;//=========================================================================
;// Dump cpuid features
;// params : edx : features
;//=========================================================================

DBG_Cpuid PROC

        pushfd
        pushad

        DBG "<CPUID>"
        bt          ecx, 0
        jnc         @F
        DBG "  SSE3"
@@:
        bt          edx, 26
        jnc         @F
        DBG "  SSE2"
@@:
        bt          edx, 25
        jnc         @F
        DBG "  SSE"
@@:
        bt          edx, 23
        jnc         @F
        DBG "  MMX"
@@:
        bt          edx, 15
        jnc         @F
        DBG "  CMOV"
@@:
        bt          edx, 28
        jnc         @F
        DBG "  HYPERTHREADING"
@@:
        bt          edx, 0
        jnc         @F
        DBG "  FPU"
@@:
        DBG "</CPUID>"

        popad
        popfd
        ret

DBG_Cpuid ENDP



END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -