?? 9-2.asm
字號:
.bss Tdr,4,4 ; 微分Tdr值
.bss DStCurrbss,4,4 ; 當前延遲狀態指針
.bss DelayPath,320,4 ; 延遲狀態和路徑狀態向量(半字格式)
.bss AccDist,32,4 ; 距離累積值向量(字格式)
.bss Distance,32,4 ; 距離結果向量(字格式)
.bss Dummy,2,2 ; 允許同步進入
.bss State,16,4 ; 狀態向量(半字格式)
.bss MCurr,4,4 ; 存儲當前調制指針
SK .set 1024 ; 比例因子
.sect "LUTable"
MMMMM .set 0x7FFF ; 有符號數據最大值
SS .set 0xFFFF ; 無符號數據最大值
SZ .set 3 ; 數據指針字大小
.def _M14
_M14: ; 調整方式為14.4 kbps
.int M140 ; 首地址
.int 0x35E ; 提取第4和第5位
.int 0x39C ; 提取第0到第3位
.int 4 ; 移位累加值
M140 .int M141 ; 下一個地址
.short -5*SK,-6*SK,4*SK,4*SK,(3+1)*SZ,(4+1)*SZ ; Ys,Xs,Yq,Xq,Ny+1,Nx+1
.short -7*SK,-4*SK,-3*SK,-8*SK,0x05,0x00 ; Y0,X0,Y1,X1,S0,S1
.short -7*SK,-4*SK,MMMMM,MMMMM,0x05,SS
.short -7*SK,+0*SK,MMMMM,MMMMM,0x07,SS
.short -7*SK,+4*SK,MMMMM,MMMMM,0x03,SS
.short -7*SK,+4*SK,-3*SK,+8*SK,0x03,0x01
.short -3*SK,-8*SK,MMMMM,MMMMM,0x00,SS
.short -3*SK,-4*SK,MMMMM,MMMMM,0x04,SS
.short -3*SK,+0*SK,MMMMM,MMMMM,0x06,SS
.short -3*SK,+4*SK,MMMMM,MMMMM,0x02,SS
.short -3*SK,+8*SK,MMMMM,MMMMM,0x01,SS
.short +1*SK,-8*SK,MMMMM,MMMMM,0x08,SS
.short +1*SK,-4*SK,MMMMM,MMMMM,0x0C,SS
.short +1*SK,+0*SK,MMMMM,MMMMM,0x0E,SS
.short +1*SK,+4*SK,MMMMM,MMMMM,0x0A,SS
.short +1*SK,+8*SK,MMMMM,MMMMM,0x09,SS
.short +5*SK,-4*SK,+1*SK,-8*SK,0x0D,0x08
.short +5*SK,-4*SK,MMMMM,MMMMM,0x0D,SS
.short +5*SK,+0*SK,MMMMM,MMMMM,0x0F,SS
.short +5*SK,+4*SK,MMMMM,MMMMM,0x0B,SS
.short +5*SK,+4*SK,+1*SK,+8*SK,0x0B,0x09
M141 .int M142 ; 下一個地址
.short -3*SK,-6*SK,4*SK,4*SK,(3+1)*SZ,(4+1)*SZ ; Ys,Xs,Yq,Xq,Ny+1,Nx+1
.short -5*SK,-4*SK,-1*SK,-8*SK,0x1B,0x19 ; Y0,X0,Y1,X1,S0,S1
.short -5*SK,-4*SK,MMMMM,MMMMM,0x1B,SS
.short -5*SK,+0*SK,MMMMM,MMMMM,0x1F,SS
.short -5*SK,+4*SK,MMMMM,MMMMM,0x1D,SS
.short -5*SK,+4*SK,-1*SK,+8*SK,0x1D,0x18
.short -1*SK,-8*SK,MMMMM,MMMMM,0x19,SS
.short -1*SK,-4*SK,MMMMM,MMMMM,0x1A,SS
.short -1*SK,+0*SK,MMMMM,MMMMM,0x1E,SS
.short -1*SK,+4*SK,MMMMM,MMMMM,0x1C,SS
.short -1*SK,+8*SK,MMMMM,MMMMM,0x18,SS
.short +3*SK,-8*SK,MMMMM,MMMMM,0x11,SS
.short +3*SK,-4*SK,MMMMM,MMMMM,0x12,SS
.short +3*SK,+0*SK,MMMMM,MMMMM,0x16,SS
.short +3*SK,+4*SK,MMMMM,MMMMM,0x14,SS
.short +3*SK,+8*SK,MMMMM,MMMMM,0x10,SS
.short +7*SK,-4*SK,+3*SK,-8*SK,0x13,0x11
.short +7*SK,-4*SK,MMMMM,MMMMM,0x13,SS
.short +7*SK,+0*SK,MMMMM,MMMMM,0x17,SS
.short +7*SK,+4*SK,MMMMM,MMMMM,0x15,SS
.short +7*SK,+4*SK,+3*SK,+8*SK,0x15,0x10
M142 .int M143 ; Next address
.short -7*SK,-4*SK,4*SK,4*SK,(4+1)*SZ,(3+1)*SZ ; Ys,Xs,Yq,Xq,Ny+1,Nx+1
.short -9*SK,-2*SK,-5*SK,-6*SK,0x28,0x2D ; Y0,X0,Y1,X1,S0,S1
.short -9*SK,-2*SK,MMMMM,MMMMM,0x28,SS
.short -9*SK,+2*SK,MMMMM,MMMMM,0x20,SS
.short -9*SK,+2*SK,-5*SK,+6*SK,0x20,0x25
.short -5*SK,-6*SK,MMMMM,MMMMM,0x2D,SS
.short -5*SK,-2*SK,MMMMM,MMMMM,0x2C,SS
.short -5*SK,+2*SK,MMMMM,MMMMM,0x24,SS
.short -5*SK,+6*SK,MMMMM,MMMMM,0x25,SS
.short -1*SK,-6*SK,MMMMM,MMMMM,0x2F,SS
.short -1*SK,-2*SK,MMMMM,MMMMM,0x2E,SS
.short -1*SK,+2*SK,MMMMM,MMMMM,0x26,SS
.short -1*SK,+6*SK,MMMMM,MMMMM,0x27,SS
.short +3*SK,-6*SK,MMMMM,MMMMM,0x2B,SS
.short +3*SK,-2*SK,MMMMM,MMMMM,0x2A,SS
.short +3*SK,+2*SK,MMMMM,MMMMM,0x22,SS
.short +3*SK,+6*SK,MMMMM,MMMMM,0x23,SS
.short +7*SK,-2*SK,+3*SK,-6*SK,0x29,0x2B
.short +7*SK,-2*SK,MMMMM,MMMMM,0x29,SS
.short +7*SK,+2*SK,MMMMM,MMMMM,0x21,SS
.short +7*SK,+2*SK,+3*SK,+6*SK,0x21,0x23
M143 .int M144 ; Next address
.short -5*SK,-4*SK,4*SK,4*SK,(4+1)*SZ,(3+1)*SZ ; Ys,Xs,Yq,Xq,Ny+1,Nx+1
.short -7*SK,-2*SK,-3*SK,-6*SK,0x31,0x33 ; Y0,X0,Y1,X1,S0,S1
.short -7*SK,-2*SK,MMMMM,MMMMM,0x31,SS
.short -7*SK,+2*SK,MMMMM,MMMMM,0x39,SS
.short -7*SK,+2*SK,-3*SK,+6*SK,0x39,0x3B
.short -3*SK,-6*SK,MMMMM,MMMMM,0x33,SS
.short -3*SK,-2*SK,MMMMM,MMMMM,0x32,SS
.short -3*SK,+2*SK,MMMMM,MMMMM,0x3A,SS
.short -3*SK,+6*SK,MMMMM,MMMMM,0x3B,SS
.short +1*SK,-6*SK,MMMMM,MMMMM,0x37,SS
.short +1*SK,-2*SK,MMMMM,MMMMM,0x36,SS
.short +1*SK,+2*SK,MMMMM,MMMMM,0x3E,SS
.short +1*SK,+6*SK,MMMMM,MMMMM,0x3F,SS
.short +5*SK,-6*SK,MMMMM,MMMMM,0x35,SS
.short +5*SK,-2*SK,MMMMM,MMMMM,0x34,SS
.short +5*SK,+2*SK,MMMMM,MMMMM,0x3C,SS
.short +5*SK,+6*SK,MMMMM,MMMMM,0x3D,SS
.short +9*SK,-2*SK,+5*SK,-6*SK,0x30,0x35
.short +9*SK,-2*SK,MMMMM,MMMMM,0x30,SS
.short +9*SK,+2*SK,MMMMM,MMMMM,0x38,SS
.short +9*SK,+2*SK,+5*SK,+6*SK,0x38,0x3D
M144 .int M145 ; 下一個地址
.short -4*SK,-5*SK,4*SK,4*SK,(3+1)*SZ,(4+1)*SZ ; Ys,Xs,Yq,Xq,Ny+1,Nx+1
.short -6*SK,-3*SK,-2*SK,-7*SK,0x4B,0x49 ; Y0,X0,Y1,X1,S0,S1
.short -6*SK,-3*SK,MMMMM,MMMMM,0x4B,SS
.short -6*SK,+1*SK,MMMMM,MMMMM,0x4F,SS
.short -6*SK,+5*SK,MMMMM,MMMMM,0x4D,SS
.short -6*SK,+5*SK,-2*SK,+9*SK,0x4D,0x48
.short -2*SK,-7*SK,MMMMM,MMMMM,0x49,SS
.short -2*SK,-3*SK,MMMMM,MMMMM,0x4A,SS
.short -2*SK,+1*SK,MMMMM,MMMMM,0x4E,SS
.short -2*SK,+5*SK,MMMMM,MMMMM,0x4C,SS
.short -2*SK,+9*SK,MMMMM,MMMMM,0x48,SS
.short +2*SK,-7*SK,MMMMM,MMMMM,0x41,SS
.short +2*SK,-3*SK,MMMMM,MMMMM,0x42,SS
.short +2*SK,+1*SK,MMMMM,MMMMM,0x46,SS
.short +2*SK,+5*SK,MMMMM,MMMMM,0x44,SS
.short +2*SK,+9*SK,MMMMM,MMMMM,0x40,SS
.short +6*SK,-3*SK,+2*SK,-7*SK,0x43,0x41
.short +6*SK,-3*SK,MMMMM,MMMMM,0x43,SS
.short +6*SK,+1*SK,MMMMM,MMMMM,0x47,SS
.short +6*SK,+5*SK,MMMMM,MMMMM,0x45,SS
.short +6*SK,+5*SK,+2*SK,+9*SK,0x45,0x40
M145 .int M146 ; 下一個地址
.short -4*SK,-7*SK,4*SK,4*SK,(3+1)*SZ,(4+1)*SZ ; Ys,Xs,Yq,Xq,Ny+1,Nx+1
.short -6*SK,-5*SK,-2*SK,-9*SK,0x55,0x50 ; Y0,X0,Y1,X1,S0,S1
.short -6*SK,-5*SK,MMMMM,MMMMM,0x55,SS
.short -6*SK,-1*SK,MMMMM,MMMMM,0x57,SS
.short -6*SK,+3*SK,MMMMM,MMMMM,0x53,SS
.short -6*SK,+3*SK,-2*SK,+7*SK,0x53,0x51
.short -2*SK,-9*SK,MMMMM,MMMMM,0x50,SS
.short -2*SK,-5*SK,MMMMM,MMMMM,0x54,SS
.short -2*SK,-1*SK,MMMMM,MMMMM,0x56,SS
.short -2*SK,+3*SK,MMMMM,MMMMM,0x52,SS
.short -2*SK,+7*SK,MMMMM,MMMMM,0x51,SS
.short +2*SK,-9*SK,MMMMM,MMMMM,0x58,SS
.short +2*SK,-5*SK,MMMMM,MMMMM,0x5C,SS
.short +2*SK,-1*SK,MMMMM,MMMMM,0x5E,SS
.short +2*SK,+3*SK,MMMMM,MMMMM,0x5A,SS
.short +2*SK,+7*SK,MMMMM,MMMMM,0x59,SS
.short +6*SK,-5*SK,+2*SK,-9*SK,0x5D,0x58
.short +6*SK,-5*SK,MMMMM,MMMMM,0x5D,SS
.short +6*SK,-1*SK,MMMMM,MMMMM,0x5F,SS
.short +6*SK,+3*SK,MMMMM,MMMMM,0x5B,SS
.short +6*SK,+3*SK,+2*SK,+7*SK,0x5B,0x59
M146 .int M147 ; 下一個地址
.short -6*SK,-5*SK,4*SK,4*SK,(4+1)*SZ,(3+1)*SZ ; Ys,Xs,Yq,Xq,Ny+1,Nx+1
.short -8*SK,-3*SK,-4*SK,-7*SK,0x61,0x63 ; Y0,X0,Y1,X1,S0,S1
.short -8*SK,-3*SK,MMMMM,MMMMM,0x61,SS
.short -8*SK,+1*SK,MMMMM,MMMMM,0x69,SS
.short -8*SK,+1*SK,-4*SK,+5*SK,0x69,0x6B
.short -4*SK,-7*SK,MMMMM,MMMMM,0x63,SS
.short -4*SK,-3*SK,MMMMM,MMMMM,0x62,SS
.short -4*SK,+1*SK,MMMMM,MMMMM,0x6A,SS
.short -4*SK,+5*SK,MMMMM,MMMMM,0x6B,SS
.short +0*SK,-7*SK,MMMMM,MMMMM,0x67,SS
.short +0*SK,-3*SK,MMMMM,MMMMM,0x66,SS
.short +0*SK,+1*SK,MMMMM,MMMMM,0x6E,SS
.short +0*SK,+5*SK,MMMMM,MMMMM,0x6F,SS
.short +4*SK,-7*SK,MMMMM,MMMMM,0x65,SS
.short +4*SK,-3*SK,MMMMM,MMMMM,0x64,SS
.short +4*SK,+1*SK,MMMMM,MMMMM,0x6C,SS
.short +4*SK,+5*SK,MMMMM,MMMMM,0x6D,SS
.short +8*SK,-3*SK,+4*SK,-7*SK,0x60,0x65
.short +8*SK,-3*SK,MMMMM,MMMMM,0x60,SS
.short +8*SK,+1*SK,MMMMM,MMMMM,0x68,SS
.short +8*SK,+1*SK,+4*SK,+5*SK,0x68,0x6D
M147 .int M140 ; 下一個地址
.short -6*SK,-3*SK,4*SK,4*SK,(4+1)*SZ,(3+1)*SZ ; Ys,Xs,Yq,Xq,Ny+1,Nx+1
.short -8*SK,-1*SK,-4*SK,-5*SK,0x78,0x7D ; Y0,X0,Y1,X1,S0,S1
.short -8*SK,-1*SK,MMMMM,MMMMM,0x78,SS
.short -8*SK,+3*SK,MMMMM,MMMMM,0x70,SS
.short -8*SK,+3*SK,-4*SK,+7*SK,0x70,0x75
.short -4*SK,-5*SK,MMMMM,MMMMM,0x7D,SS
.short -4*SK,-1*SK,MMMMM,MMMMM,0x7C,SS
.short -4*SK,+3*SK,MMMMM,MMMMM,0x74,SS
.short -4*SK,+7*SK,MMMMM,MMMMM,0x75,SS
.short +0*SK,-5*SK,MMMMM,MMMMM,0x7F,SS
.short +0*SK,-1*SK,MMMMM,MMMMM,0x7E,SS
.short +0*SK,+3*SK,MMMMM,MMMMM,0x76,SS
.short +0*SK,+7*SK,MMMMM,MMMMM,0x77,SS
.short +4*SK,-5*SK,MMMMM,MMMMM,0x7B,SS
.short +4*SK,-1*SK,MMMMM,MMMMM,0x7A,SS
.short +4*SK,+3*SK,MMMMM,MMMMM,0x72,SS
.short +4*SK,+7*SK,MMMMM,MMMMM,0x73,SS
.short +8*SK,-1*SK,+4*SK,-5*SK,0x79,0x7B
.short +8*SK,-1*SK,MMMMM,MMMMM,0x79,SS
.short +8*SK,+3*SK,MMMMM,MMMMM,0x71,SS
.short +8*SK,+3*SK,+4*SK,+7*SK,0x71,0x73
.def _M12 ; Make this table visible to outside.
_M12: ; 調制方式為12.0 kbps,代碼同上
; 參數不同,根據需要修改參數
; . . .
TMBack .int 0x03122130 ; 定義矩陣43 42 41 40 03 02 01 00
.int 0x65475674 ; 53 52 51 50 13 12 11 10
.int 0x12033021 ; 63 62 61 60 23 22 21 20
.int 0x74564765 ; 73 72 71 70 33 32 31 30
Diff .int 0x1B4EE1B4
.text
.def _Init
_Init: ; DStCurrbss = *DelayPath.
MVK DStCurrbss,A0
MVKH DStCurrbss,A0
MVK DelayPath,A1
MVKH DelayPath,A1
STW A1,*A0
MVK 16,B0
PLoop: ; DelayPath[i][j] = 0
MVK 10,B1 ; i=0~15, j=0~9
ZERO A0
KLoop:
SUB 10,B1,A3
STH A0,*+A1[A3]
[B1] SUB B1,1,B1
[B1] B KLoop
NOP 5
ADDAH A1,10,A1
[B0] SUB B0,1,B0
[B0] B PLoop
NOP 5
MVK SK/2,A0
MVK AccDist,A1
MVKH AccDist,A1
MVK 8,B0
ILoop: ; AccDist[i] = 512, i=1~7
SUB 8,B0,A3 ; AccDist[0] = 0
STW A0,*+A1[A3]
[B0] SUB B0,1,B0
[B0] B ILoop
NOP 5
ZERO A0
STW A0,*+A1[0]
ZERO A0
MVK Tdr,A1
MVKH Tdr,A1
STW A0,*A1
B B3
NOP 5
DStCurr .set A13 ; 當前延遲狀態指針
TT0 .set A1 ; 臨時變量,用于測試
TT1 .set B1 ; 臨時變量,用于測試
Q0 .set A3 ; 臨時變量
Q1 .set B3 ; 臨時變量
W0 .set A6 ; 臨時變量
W1 .set B6 ; 臨時變量
DS0 .set A0 ; 延遲狀態0
DS1 .set B0 ; 延遲狀態1
DS2 .set A1 ; 延遲狀態2
DS3 .set B1 ; 延遲狀態3
DS4 .set A2 ; 延遲狀態4
DS5 .set B2 ; 延遲狀態5
DS6 .set A3 ; 延遲狀態6
DS7 .set B3 ; 延遲狀態7
Dist0 .set A7 ; 距離0
Dist1 .set B7 ; 距離1
G0 .set A5 ; 距離累積值0
G1 .set B5 ; 距離累積值1
G2 .set A10 ; 距離累積值2
G3 .set B10 ; 距離累積值3
G4 .set A11 ; 距離累積值4
G5 .set B11 ; 距離累積值5
G6 .set A9 ; 距離累積值6
G7 .set B9 ; 距離累積值7
TTT .set A8 ; 跟蹤回溯狀態地址
.def _Viterbi
.text
_Viterbi:
; Viterbi譯碼第一步
; 分配堆棧空間存儲B3、A10~A13、B10~B13
; 將參數3(A6)存儲到MCurr
; 設置當前延遲狀態指針為DStCurr
MV A6,B6 ;*
|| LDW *A6,MCurr0 ; 得到首個調制數據表
|| SUBAW B15,9,B15 ; 分配存儲空間
MVK MCurr,B0
|| MVK DStCurrbss,A1
|| MV B15,A9 ; 設置快速存儲寄存器
|| STW B3,*+B15[1] ; 保存寄存器內容
MVKH MCurr,B0
|| MVKH DStCurrbss,A1
|| STW A13,*+A9[8] ; 保存寄存器內容
|| STW B13,*+B15[9] ; 保存寄存器內容
STW B6,*B0 ; 保存當前指針
|| LDW *A1,DStCurr ; 取延遲狀態指針
STW A12,*+A9[6] ; 保存寄存器內容
|| STW B12,*+B15[7] ; 保存寄存器內容
; Viterbi譯碼第二步
; 輸入為Xi和Yi,輸出為距離和狀態
; 基于輸入Xi和Yi計算距離和狀態值
XY .set A0 ; X、Y 用于SUB2指令操作
Cc .set B0 ; 循環計數器
Xt .set A1 ; 測試X
Yt .set B1 ; 測試Y
S1 .set A1 ; 狀態 1
S0 .set B1 ; 狀態0
TT .set B2 ; 臨時變量
Nx .set A3 ; Nx
Ny .set B3 ; Ny
Xi .set A4 ; 接收數據參數1
Yi .set B4 ; 接收數據參數2
Xs .set A5 ; Xs
Ys .set B5 ; Ys
MCurr0 .set A6 ; 位速率調整表
StateP .set B6 ; 狀態結果指針
Xq .set A7 ; Xq
Yq .set B7 ; Yq
DistP .set A8 ; 距離結果指針
MCurr1 .set B8 ; B組寄存器指針
Ix .set A9 ; X索引
Iy .set B9 ; Y索引
Id0 .set A9 ; 區域結果
Id1 .set B9 ; B組寄存器區域結果
P2 .set A9 ; 乘法寄存器
P3 .set B9 ; 乘法寄存器
T0 .set A10 ; 臨時寄存器
T1 .set B10 ; 臨時寄存器
P0 .set A10 ; 乘法寄存器
P1 .set B10 ; 乘法寄存器
T2 .set A11 ; 臨時寄存器
T3 .set B11 ; 臨時寄存器
MNext0 .set A12 ; 下一個表指針
Step2:
MV MCurr0,TT
|| MVK State,StateP ; 設置狀態結果指針
|| MVK Distance,DistP ; 設置距離結果指針
|| STW A11,*+A9[4] ; 保存寄存器
|| STW B11,*+B15[5] ; 保存寄存器
LDH *+MCurr0[3],Xs ; 取Xs和Ys
|| LDH *+TT[2],Ys
|| MVKH State,StateP
|| MVKH Distance,DistP
LDH *+MCurr0[5],Xq ; 取Xq和Yq
|| LDH *+TT[4],Yq
LDH *+MCurr0[7],Nx ; 取Nx和Ny
|| LDH *+TT[6],Ny
|| ZERO Ix ; 初始化索引
|| ZERO Iy
|| MVK 8,Cc ; 初始化循環計數器
STW A10,*+A9[2] ; 保存寄存器
|| STW B10,*+B15[3] ; 保存寄存器
NOP 2
Cloop:
CMPGT Xi,Xs,Xt ; 比較和增加測試水平
|| ADD Xs,Xq,Xs
|| CMPGT Yi,Ys,Yt
|| ADD Ys,Yq,Ys
|| LDW *MCurr0,MNext0 ; 為下一個循環準備
|| MV MCurr0,TT
.loop 4 ; 設置Max (Nx, Ny).
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -