📄 dbg.asm
字号:
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 + -