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

📄 sendbits.s

📁 给出了 zip 压缩算法的完整实现过程。
💻 S
字号:
;===========================================================================; Copyright (c) 1990-1999 Info-ZIP.  All rights reserved.;; See the accompanying file LICENSE, version 1999-Oct-05 or later; (the contents of which are also included in zip.h) for terms of use.; If, for some reason, both of these files are missing, the Info-ZIP license; also may be found at:  ftp://ftp.cdrom.com/pub/infozip/license.html;===========================================================================; sendbits.s for ARM by Sergio Monesi and Darren Salt.r0      RN      0r1      RN      1r2      RN      2r3      RN      3r4      RN      4r5      RN      5r6      RN      6r7      RN      7r8      RN      8r9      RN      9sl      RN      10fp      RN      11ip      RN      12sp      RN      13lr      RN      14pc      RN      15        AREA    |Asm$$Code|, CODE, READONLY        =       "send_bits",0        ALIGN        &       &FF00000C        IMPORT  __rt_stkovf_split_small        IMPORT  flush_outbuf        IMPORT  bi_valid        IMPORT  bi_buf        IMPORT  out_size        IMPORT  out_offset        IMPORT  out_buf        EXPORT  send_bitssend_bits        MOV     ip,sp        STMDB   sp!,{r4,r5,fp,ip,lr,pc}        SUB     fp,ip,#4        LDR     r5,=bi_buf        LDR     r3,=bi_valid        LDR     r4,[r5]        LDR     r2,[r3]        ORR     r4,r4,r0,LSL r2 ; |= value<<bi_valid        ADD     r2,r2,r1        ; += length        CMP     r2,#&10        STRLE   r2,[r3]         ; short? store & return        STRLE   r4,[r5]        LDMLEDB fp,{r4,r5,fp,sp,pc}^        SUB     r2,r2,#&10      ; adjust bi_valid, bi_buf        MOV     ip,r4,LSR #16   ;  (done early, keeping the old bi_buf        STR     r2,[r3]         ;  in R4 for later storage)        STR     ip,[r5]        LDR     r0,=out_size        LDR     r1,=out_offset        LDR     r0,[r0]        LDR     r2,[r1]        SUB     r0,r0,#1        CMP     r2,r0           ; if out_offset >= out_size-1        LDRHS   r0,=out_buf        LDRHS   r0,[r0]        BLHS    flush_outbuf    ; then flush the buffer        LDR     r0,=out_buf        LDR     r1,=out_offset        LDR     r0,[r0]        LDR     r2,[r1]        MOV     r5,r4,LSR #8        STRB    r4,[r0,r2]!     ; store 'old' bi_buf        STRB    r5,[r0,#1]        ADD     r2,r2,#2        STR     r2,[r1]        LDMDB   fp,{r4,r5,fp,sp,pc}^ptr_bi          &       bi_valid                &       bi_buf        =       "bi_reverse",0        ALIGN        &       &FF00000C        EXPORT  bi_reversebi_reverse        MOV     r2,#0loop    MOVS    r0,r0,LSR #1        ADCS    r2,r2,r2        SUBS    r1,r1,#1        BNE     loop        MOV     r0,r2        MOVS    pc,lr        END

⌨️ 快捷键说明

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