亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ad_pcm.asm

?? 運(yùn)行環(huán)境:CCS2.1,嵌入式核心:TMS5402
?? ASM
字號(hào):
* 編碼函數(shù)C語言聲明
* extern void AdpcmEncoder(int* pBufferIn, int* pBufferOut, 
*		   			       int* pPrevValue,int* pPrevIndex, int Length);
* 解碼函數(shù)C語言聲明(解碼長(zhǎng)度為實(shí)際解碼后長(zhǎng)度的1/4)
* extern void AdpcmDecoder(int* pBufferIn, int* pBufferOut, 
*					       int* pPrevValue,int* pPrevIndex, int Length);
*
* 編解碼后的PrevValue和PrevIndex都被修改,在后續(xù)的編解碼中將繼續(xù)被使用
*
* CCS2.1下測(cè)試通過

 .title "Intel/DVI ADPCM coder/decoder"
 .def _AdpcmEncoder
 .def _AdpcmDecoder
 .mmregs

 ;索引表 
 .data
IndexTable:    ; 實(shí)際上只用了15個(gè),考慮到速度問題,有一個(gè)舍棄了 
   .word  -8, -5, -3, -1, 1, 3, 5, 8
   .word  8,  5,  3,  1, -1,-3,-5,-8
   
 ;步進(jìn)量   
StepSizeTable:  ; 共84個(gè)
   .word     4,     5,     6,     7,    8,     9,   10,    11,    12,    14
   .word    16,    18,    20,    22,   25,    28,   32,    36,    42,    49
   .word    57,    67,    78,    90,  103,   118,  134,   152,   170,   189 
   .word   209,   230,   253,   279,  307,   337,  371,   408,   449,   494
   .word   544,   598,   658,   724,  796,   876,  963,  1060,  1166,  1282
   .word  1411,  1552,  1707,  1878, 2066,  2272, 2499,  2749,  3024,  3327
   .word  3660,  4026,  4428,  4871, 5358,  5894, 6484,  7132,  7845,  8630
   .word  9493, 10442, 11487, 12635,13899, 15289,16818, 18500, 20350, 22385
   .word 24623, 27086, 29794, 32767
 
    
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
; 寄存器使用規(guī)則(調(diào)用時(shí)不設(shè)置)
; AR0: 臨時(shí)變量
; AR2: 輸入緩沖區(qū)指針
; AR3: 輸出緩沖區(qū)指針
; AR4: 步進(jìn)量地址指針
; AR5: 當(dāng)前輸出數(shù)據(jù)計(jì)數(shù)器(0--3: 16位長(zhǎng)度可保存4個(gè)編碼數(shù)據(jù))
	.asg *SP(3), pBufferOut
	.asg *SP(4), pPrevValue
	.asg *SP(5), pPrevIndex
	.asg *SP(6), Length
	
	.asg *SP(0), PrevValue      ; 占用了這兩個(gè)堆棧位置,存放臨時(shí)數(shù)據(jù)
	.asg *SP(1), PrevIndex      ;
   .text
_AdpcmEncoder:
    TC = (*SP(4) == #0)         ; 首先檢測(cè)緩沖區(qū)長(zhǎng)度是否為0,為0則結(jié)束
    if(TC) dgoto EncoderEnd
    AR5 = #4                    ; 設(shè)置計(jì)數(shù)器初值
    SP += -2                    ; 調(diào)整堆棧指針,以便利用其中的兩個(gè)子
	AR2 = A                     ; 讀取輸入緩沖區(qū)地址
    B = pBufferOut              ; 讀入輸出緩沖區(qū)地址
    AR3 = B
    B = pPrevValue              ; 讀入上次轉(zhuǎn)換值地址 
    AR0 = B
    ASM = #0
    SXM = 1                     ; 設(shè)置符號(hào)位擴(kuò)展
    Length -= 1                 ; 長(zhǎng)度減1
    A = pPrevIndex              ; 讀取上次轉(zhuǎn)換的索引
    B = *AR0                  
    AR0 = A
    PrevValue = B               ; 讀取上次轉(zhuǎn)換值        
    FRCT = 0 
    A = *AR0                    
    PrevIndex = A               ; 保存上次轉(zhuǎn)換索引
    A = Length                  ; 讀取轉(zhuǎn)換長(zhǎng)度 
    BRC = A                     ; 設(shè)置塊循環(huán)計(jì)數(shù)器
    A = PrevIndex 
    DBLOCKREPEAT(EncoderLoopEnd-1)    ; 啟動(dòng)塊循環(huán)(根據(jù)循環(huán)最后一條指令確定是1還是2)
    *AR3 = #0                   ; 輸出緩沖區(qū)第一個(gè)字清零
EncoderLoop:
    A += #StepSizeTable         ; 偏移 
    AR4 = A                     ; 取得步進(jìn)基地址 + 偏移
    B = *AR2+                   ; 取得輸入緩沖區(qū)的值(沒有必要規(guī)范到-32768...+32767)
    B -= PrevValue              ; 獲得當(dāng)前值與上次計(jì)算值之間的差值
	
    A = |B|                     ; 計(jì)算delta=diff/step,并將商規(guī)范到-8...+7
    REPEAT(#16)                 ; 循環(huán)減(做除法)多除了一次,相當(dāng)于商×2
    SUBC(*AR4, A) 
    A += #1                     ; 調(diào)整0.5的差值
    A &= #0FFFFh                ; (清除高位無效數(shù)據(jù)) 
    A = A >> 1
    if(BGEQ) DGOTO EncoderSetDelta  ; 檢測(cè)是否是負(fù)數(shù)
    B = #7                      ; 將Delta數(shù)據(jù)規(guī)范到-8...+7
    A = MIN(A, B)
    
    A = -A                      ; 是負(fù)數(shù),商取負(fù)
EncoderSetDelta:    
    ;B = #-8                    ; 已經(jīng)規(guī)范到0--7了,取負(fù)數(shù)后也沒有關(guān)系
    ;A =MAX(A, B)

    T = A    
                                ; 計(jì)算PrevValue值,并將其規(guī)范到(-32768)--(+32767) 
    B = T*(*AR4)                ; 獲得Delta*Step的值,保存在B寄存器中
    B += PrevValue              ; 計(jì)算上次值與這次差值的和
    ;B += *AR4 >> 1
    B = B <<C 8                 ; 只有32位的飽和運(yùn)算
    B = B <<C 8                 ; 移位操作比用max/min指令要快 
    saturate(B)                 ; 飽和成32位的數(shù)據(jù)
    
    ; 檢測(cè)是否需要將輸出指針移動(dòng)到下一個(gè)字
    if(*AR5- != 0) DGOTO EncoderNoInc
    A &= #0Fh                    ; 保留低4位

    AR5 = #3                     ; 重新設(shè)置計(jì)數(shù)器
    *+AR3 = #0                   ; 輸出緩沖區(qū)清零
EncoderNoInc:
    PrevValue = hi(B)            ; 保存當(dāng)前轉(zhuǎn)換結(jié)果
    B = A + *AR3 << 4            ; 將輸出緩沖區(qū)當(dāng)前字左移4位,然后加上當(dāng)前值 
    *AR3 = B                     ; 
    
    AR0 = A						 ; 取得更新后的索引 
    B = #0
    A = PrevIndex
    A += *AR0(IndexTable)        ; 基地址 + 偏移
    
    A = MAX(A, B)                ; 將PrevIndex規(guī)范到0-83
    B = #83
    A = MIN(A, B)
    PrevIndex = A
EncoderLoopEnd:    
    B = pPrevValue               ; 設(shè)置轉(zhuǎn)換后的PrevIndex和PrevValue
    AR0 = B
    A = pPrevIndex
    AR2 = A
    A = PrevIndex
    B = PrevValue 
    *AR2 = A
    SP += 2                      ; 將堆棧指針調(diào)整回原來的值
    *AR0 = B
    NOP                          ; 避免沖突用的
EncoderEnd:    
	RETURN
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
; 寄存器使用規(guī)則(調(diào)用時(shí)不設(shè)置)
; AR0: 臨時(shí)變量
; AR1: 當(dāng)前轉(zhuǎn)換值
; AR2: 輸入緩沖區(qū)指針
; AR3: 輸出緩沖區(qū)指針
; AR4: 步進(jìn)量地址指針
; AR5: 當(dāng)前輸出數(shù)據(jù)計(jì)數(shù)器(0--3: 16位長(zhǎng)度可保存4個(gè)編碼數(shù)據(jù))
	.asg *SP(3), StepValue        ; 臨時(shí)變量,存放當(dāng)前的輸入處理值(不斷左移4位)
	
_AdpcmDecoder:
	TC = (*SP(4) == #0) 
	if(TC) DGOTO DecoderEnd       ; 如果長(zhǎng)度為0,退出
	AR5 = #3                      ; 設(shè)置循環(huán)計(jì)數(shù)器 
	SP -= 2                       ; 調(diào)整堆棧指針,以便有多余的兩個(gè)字可供臨時(shí)使用
	AR2 = A                       ; 取輸入緩沖區(qū)地址 
	A = pBufferOut                ; 取輸出緩沖區(qū)地址
    B = pPrevValue                ; 取存放上次轉(zhuǎn)換值變量的地址
    AR0 = B
    ASM = #0                      ; (好像沒有用)
    SXM = 1                       ; 設(shè)置符號(hào)位擴(kuò)展
	AR3 = A                       ; 取得輸出緩沖區(qū)
    B= *AR0                       ; 取得PrevValue 
    A = pPrevIndex                ; 取PrevIndex的地址 
    AR0 = A                       ; 臨時(shí)存放地址(直接存會(huì)出錯(cuò)(編譯得就不對(duì))) 
    PrevValue = B                 ; 呵呵,終于取出來了  
    OVM = 1                       ; 溢出吧,我的兄弟,就等你了
    A = *AR0                      ; 讀取PrevIndex的值
    PrevIndex = A
	A = Length<<2                 ; 因?yàn)槭?6位操作,可存放4個(gè)轉(zhuǎn)換值,乘以4 
	A -= #1                       ; 減去1,循環(huán)次數(shù)要比實(shí)際次數(shù)少1
	BRC = A                       ; 設(shè)置塊循環(huán)計(jì)數(shù)器 
	A = *AR2+                     ; 取輸入緩沖區(qū)的值
	
	DBLOCKREPEAT(DecoderLoopEnd-1) ; 運(yùn)轉(zhuǎn)起來吧,要不然飯都涼了
	StepValue = A                 ; 獲得當(dāng)前處理值
	A = PrevIndex				  ; 取得當(dāng)前index所對(duì)應(yīng)的值
DecoderLoop:
	A += #StepSizeTable
	AR4 = A
	A = StepValue << 4            ; 取當(dāng)前轉(zhuǎn)換值,獲得delta值(利用了符號(hào)擴(kuò)展功能)
	StepValue = A      
	B = PrevValue
	B = B + hi(A)*(*AR4)          ; 獲得計(jì)算的差值
    ;B += *AR4 >> 1
    B = B <<C 8                   ; 因?yàn)橹荒苓M(jìn)行32位的飽和運(yùn)算,沒有辦法啦      
    B = B <<C 8                   ; 將數(shù)據(jù)規(guī)范到-32768...+32767
    saturate(B)
    
	if(*AR5- != 0) DGOTO DecoderNoInc
    *AR3+ = hi(B)
    PrevValue = hi(B)
	
	AR5 = #3                      ; 重新設(shè)置計(jì)數(shù)器
	B = *AR2+
	StepValue = B
DecoderNoInc:
    
	A = A >> 16                   ; 調(diào)整PrevIndex的值
	A &= #0Fh                     ; 并將其調(diào)整在0...83之間
    AR0 = A
    B = #0
    A = PrevIndex
    A += *AR0(IndexTable)
    A = MAX(A, B)                 
    B = #83
    A = MIN(A, B)
    PrevIndex = A
DecoderLoopEnd:    
    B = pPrevValue                 ; 設(shè)置PrevValue和PrevIndex
    AR0 = B
    B = PrevValue
    A = pPrevIndex
    AR2 = A
    A = PrevIndex
    *AR0 = B
    *AR2 = A
    SP += 2                        ; 將堆棧指針調(diào)整回原來的值
    NOP                            ; 避免沖突用的
DecoderEnd:    
    RETURN
    
 .end
 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产影片| 日韩精品综合一本久道在线视频| 国产精品乱人伦| 欧美午夜片在线看| 国产精品18久久久久| 亚洲综合一二区| 久久久一区二区| 91国产免费看| 大胆欧美人体老妇| 国产综合久久久久久鬼色| 亚洲天堂a在线| 精品精品欲导航| 99久久精品国产一区| 国产麻豆精品视频| 日韩av午夜在线观看| 中文字幕在线不卡国产视频| 日韩精品一区国产麻豆| 一本久道久久综合中文字幕 | 国产成人免费网站| 日韩主播视频在线| 亚洲成av人影院| 亚洲国产成人高清精品| 一区二区三区在线观看视频| 国产欧美一区二区三区网站 | 欧美日韩一区在线| 色欲综合视频天天天| 国产91精品一区二区| 免费看日韩a级影片| 亚洲成av人在线观看| 亚洲精品日日夜夜| 国产精品久久久久久亚洲毛片| 欧美怡红院视频| 777久久久精品| 精品精品国产高清一毛片一天堂| 日韩欧美色综合网站| 久久美女高清视频| 亚洲精选视频在线| 亚洲国产精品精华液网站| 日本三级亚洲精品| 成人avav在线| 91精品国产综合久久久久久久久久| 制服丝袜国产精品| 国产日韩精品一区| 亚洲国产日韩精品| 国产精品一区不卡| 91成人免费在线| 日韩精品一区二区三区中文不卡| 一区二区三区中文免费| 日本v片在线高清不卡在线观看| 蜜桃在线一区二区三区| 成人性生交大片免费看视频在线| 国产寡妇亲子伦一区二区| 欧美三级一区二区| 国产精品麻豆欧美日韩ww| 日韩电影在线一区二区三区| 国产综合久久久久久鬼色| 欧美性猛片xxxx免费看久爱| 久久综合九色综合97婷婷 | 91网站视频在线观看| 国产无遮挡一区二区三区毛片日本| 亚洲卡通动漫在线| 91在线视频在线| 最新国产成人在线观看| 久久99精品国产91久久来源| 在线国产亚洲欧美| 亚洲欧洲在线观看av| 国产乱对白刺激视频不卡| 久久久久久久一区| 国产一区二区三区久久久| 欧美刺激午夜性久久久久久久| 性感美女久久精品| 在线免费不卡电影| 日韩毛片视频在线看| 精品在线免费观看| 欧美精品一区二区三区很污很色的| 老汉av免费一区二区三区| 精品美女在线观看| 福利一区在线观看| 国产精品福利影院| 欧美精品在线一区二区三区| 婷婷综合久久一区二区三区| 欧美精品18+| 极品少妇xxxx精品少妇偷拍| 国产女人aaa级久久久级| 欧美午夜精品久久久| 亚洲成人av在线电影| 久久九九99视频| 日韩精品一区二区三区蜜臀| 国产成人免费视频网站高清观看视频| 国产日韩欧美精品电影三级在线| 91玉足脚交白嫩脚丫在线播放| 亚洲午夜精品在线| 国产精品素人视频| 欧美成人vps| 色狠狠av一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 日韩毛片一二三区| 欧美激情在线观看视频免费| 日韩精品一区二区三区视频播放| 在线免费观看视频一区| 成人激情动漫在线观看| 韩国成人福利片在线播放| 亚洲一区二区欧美激情| 亚洲欧洲日韩一区二区三区| 精品1区2区在线观看| 精品久久久网站| 精品国产一区二区亚洲人成毛片 | 国产精品三级在线观看| 久久久激情视频| 日本一区二区三区在线不卡| 欧美电视剧在线观看完整版| 成人一区在线看| 国产精品资源在线观看| 国产成人夜色高潮福利影视| 国产大陆a不卡| eeuss影院一区二区三区| 风流少妇一区二区| 97se亚洲国产综合在线| 色婷婷久久综合| 欧美一区二区性放荡片| 欧美va在线播放| 2023国产精品自拍| 国产精品成人网| 午夜精品在线视频一区| 久久成人免费网站| 成人深夜在线观看| 欧美天堂亚洲电影院在线播放| 91麻豆精品国产91久久久久久| 欧美videofree性高清杂交| 国产精品免费av| 日韩精品一二三四| 成人中文字幕电影| 3d动漫精品啪啪| 中文字幕一区二区三区在线播放 | 欧美日韩一区二区三区四区| 精品国产乱码久久久久久久久| 一区二区三区日韩欧美| 国产一区二区中文字幕| 欧美亚洲尤物久久| 精品国产网站在线观看| 亚洲啪啪综合av一区二区三区| 毛片av中文字幕一区二区| 在线观看视频欧美| 亚洲免费电影在线| www.综合网.com| 国产欧美综合在线| 国产jizzjizz一区二区| 欧美一区二区成人| 日韩国产欧美在线观看| 一本色道久久综合亚洲精品按摩| 国产精品二区一区二区aⅴ污介绍| 国产精品亚洲专一区二区三区 | 国产精品久久久久久久久久免费看| 久久福利资源站| 精品免费国产一区二区三区四区| 美女任你摸久久| 欧美精品一区二区三区在线| 久久超级碰视频| 国产精品色呦呦| 欧美性猛交一区二区三区精品| 天天综合日日夜夜精品| 91.xcao| 狠狠狠色丁香婷婷综合久久五月| 日韩欧美在线网站| 欧美色图一区二区三区| 成人精品国产一区二区4080| 欧美一区二区三区视频免费播放| 亚洲国产精品久久久久秋霞影院| 欧美三区在线视频| 91精品国产色综合久久不卡电影| 亚洲精品国产视频| 伊人婷婷欧美激情| 一区二区三区在线视频观看58| 亚洲特黄一级片| 亚洲黄色小视频| 日韩福利视频导航| 国产成人午夜精品5599| 成人av电影在线网| 欧美日韩一区久久| 精品国产91亚洲一区二区三区婷婷| 精品福利一二区| 欧美国产日韩精品免费观看| 亚洲视频小说图片| 婷婷国产v国产偷v亚洲高清| 蜜臀精品久久久久久蜜臀| 国产麻豆成人精品| av不卡免费电影| 欧美日本视频在线| 久久久无码精品亚洲日韩按摩| 中文av一区二区| 亚洲成人免费视| 福利一区福利二区| 日韩午夜中文字幕| 亚洲欧洲99久久| 男人的天堂久久精品| 欧美性xxxxxxxx| 中文字幕成人在线观看| 七七婷婷婷婷精品国产| 日本乱人伦一区| 日本一区二区三区久久久久久久久不 |