ph32.asm

来自「一个用汇编写的基于BCE32的压缩和解压引擎」· 汇编 代码 · 共 67 行

ASM
67
字号
MULTICOMPRESS=1
        
        mov     esi,pview
        mov     edi,pcomp_view
        mov     ecx,src_size      
        mov     ebx,offset c_c1
        mov     edx,offset c_c2
       
        call    hC32_compress
        mov     cb_out,eax
        cmp     eax,src_size
        ja      error_compress_negative

        inc     GDD(cpd_passes)
        
        
        add     eax,128*1024            ;增加128KB工作区
        mov     pt_msize,eax
        INVOKE	VirtualAlloc,0,eax,MEM_COMMIT,PAGE_EXECUTE_READWRITE	        
        JEAXZ   error_alloc_fail
        mov     pt_Mem,eax
;-----------------------------------------

IF      MULTICOMPRESS

      look_for_best:
        xor     eax,eax
        lea     edi,c_c1
        mov     ecx,8
        rep     stosd           ;clear counters

        mov     ecx,cb_out
        mov     esi,pcomp_view
        mov     edi,pt_Mem  
        mov     ebx,offset c_c1
        mov     edx,offset c_c2
        call    hC32_compress
        cmp     eax,cb_out
        jae     no_compress_once_again
        
        inc     cpd_passes
        mov     cb_out,eax
        mov     esi,pt_Mem
        mov     edi,pcomp_view
        mov     ecx,eax
        shr     ecx,2
        rep     movsd
        mov     ecx,eax
        and     ecx,3
        rep     movsb

        jmp     look_for_best
no_compress_once_again: 
ENDIF

        INVOKE	VirtualFree,pt_Mem,pt_msize,MEM_RELEASE
       
        mov     eax,src_size
        sub     eax,cb_out        
        INVOKE	wsprintf,addr buf,CTEXT(13,10,"origin %d, new %d, %d Decreased,%d passes...."),src_size,cb_out,eax,cpd_passes
        lea     esi,buf
        call    write_con_string
        
        mov     esi,CTEXT("Ok...succeed...")
        call    write_con_string

⌨️ 快捷键说明

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