|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
剛寫的一個(gè)8位ADPCM壓縮程序,秀一下. |
| 作者:shuaihu 欄目:單片機(jī) |
.PUBLIC _statei,_stateo,_indextable,_stepsizetable //定義全局變量 S_STATE:.STRUCT PrevValue:.DW 1 DUP(?) PrevIndex:.DW 1 DUP(?) .ENDS .DATA _indextable: .DW -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8 _stepsizetable: .DW 4, 5, 6, 7, 8, 9, 11,13,15,17,19, 22, 25,28, 31, 34,38, 42, 46, 50, 54, 59, 64, 69, 74, 79, 85, 91, 97, 103, 109,116,123,127 .RAM _statei:.S_STATE[] _stateo:.S_STATE[] .DEFINE STEP 5 .DEFINE BUFOSTEP 4 .DEFINE BUFISTEP 3 .DEFINE SIGN 2 .DEFINE LEN 11 .DEFINE OUTDATA 10 .DEFINE INDATA 9 .CODE .PUBLIC _ADPCM_ENCODE,_ADPCM_DECODE _ADPCM_ENCODE: .PROC PUSH bp to [sp] sp-=6 bp=SP+1 r1=[_statei.PrevIndex] r1+=_stepsizetable R1=[r1] [BP+STEP]=R1 R1=0 [BP+BUFOSTEP]=R1 //BUFOSTEP [BP+BUFISTEP]=R1 //BUFISTEP T1: R1=[BP+LEN] cmp R1,0 JNE LOOP PC= EXIT LOOP: R4=[BP+INDATA] R2=[R4] R3=[BP+BUFISTEP] TEST R3,1 JNZ LOW_BIT R2=R2 LSR R2 R2=R2 LSR R2 JMP T2 LOW_BIT: R2&=0x00FF R1-=1 R4+=1 [BP+INDATA]=R4 [BP+LEN]=R1 T2: R3=R3 XOR 0xFFFF [BP+BUFISTEP]=R3 //R1,R3,R4 FREE; R1=0 R3=[_statei.PrevValue] R2-=R3 JSC T3 R1=8 R2=-R2 //R2 DIFF T3: //R1 DELTA [BP+SIGN]=R1 R3=[BP+STEP] //R3 STEP R4=R3 LSR 3 //R4 vpdiff CMP R2,R3 JNGE T4 R1=4 R2-=R3 R4+=R3 T4: R3=R3 LSR 1 CMP R2,R3 JNGE T5 R1|=2 R2-=R3 R4+=R3 T5: R3=R3 LSR 1 CMP R2,R3 JNGE T6 R1|=1 R4+=R3 T6: //R2 R3 FREE r3=[_statei.PrevValue] R2=[BP+SIGN] TEST R2,0x8 JNZ T7 R3+=R4 JMP T8 T7: R3-=R4 T8: CMP R3,127 JLE T9 R3=127 T9: CMP R3,-128 JGE T10 R3=-128 T10:[_statei.PrevValue]=R3 R1|=R2 R2=R1+_indextable R2=[R2] R2+=[_statei.PrevIndex] JSC T11_1 R2=0 T11_1: CMP R2,33 JLE T11 R2=33 T11: [_statei.PrevIndex]=R2 R3=R2+_stepsizetable R3=[R3] [BP+STEP]=R3 R3=[BP+OUTDATA] R4=[R3] R2=[BP+BUFOSTEP] CMP R2,0 JNE T12 R1 = R1 LSR 4 R1 = R1 ROR 4 [R3]=R1 JMP T15 T12: CMP R2,1 JNE T13 R1=R1 LSL 4 R1=R1 LSL 4 R4|=R1 [R3]=R4 JMP T15 T13: CMP R2,2 JNE T14 R1=R1 LSL 4 R4|=R1 [R3]=R4 JMP T15 T14: CMP R2,3 JNE T15 R4|=R1 [R3]=R4 R3+=1 [BP+OUTDATA]=R3 R2=0 [BP+BUFOSTEP]=R2 PC=T1 T15: R2+=1 [BP+BUFOSTEP]=R2 PC=T1 EXIT: sp+=6; pop bp from [sp] retf .ENDP _ADPCM_DECODE:.PROC .ENDP |
| 2樓: | >>參與討論 |
| 作者: tg.liu 于 2005/9/10 9:17:00 發(fā)布:
好貼! 最近正在學(xué)習(xí),謝謝! |
|
| 3樓: | >>參與討論 |
| 作者: 紅葉醉花 于 2006/4/29 14:38:00 發(fā)布:
這是什么單片機(jī)上的? 畢業(yè)設(shè)計(jì)陷入泥沼了。 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |