用TMS320C54X实现Vertibi译码器
;以下程序中,累加器A存放状态值,累加器B存放临时的数据
《用TMS320C54X实现Vertibi译码器(第4页)》
本文链接地址:http://www.oyaya.net/fanwen/view/149485.html
;K为约束长度,MASK=2 K-5-1,ONE=1
RSBX OVM ;关闭溢出模式
STM *NTRAN_END,AR2;转移表的结束地址
STM#NBWORDS-1,AR1;要计算的输出字的序号
MVMM AR1,AR4 ;复制AR1的数值到AR4中
STM #OUTPUT+NBWORDS-1,AR3
;输出比特的地址指针
LD #0,A 初始0状态存入累加器A中
STM#15,BRC ;do i=0,NBWORDS-1
BACK:RPTB TBEND-1 ;do j=0,15
;在转移字中计算比特位置
SFTL A,-(K-2),B ;B=A>>(K-2)
AND ONE,B ;B=B&1=msb of State
ADD A,1,B ;B=B+A<<1=2*State+msb of State
STLM B,T ;T=B(bit position)
;修正转移字
SFTL A,-3,B ;B=A/8=State/8
AND MASK,B ;B=B&MASK=(K-5)lsb'sof State/8
STLM AR0 ;AR0=转称字索引
MAR *+AR2(-2K-5) ;修正寄存器值使其复位
MAR *AR2+0 ;加偏移量修正转移字
BITT*AR2-0 ;测试转移字中的比特位
ROLTC A
TBEND:STL A,*AR3-
BANZD:BACK,*AR1-
STM #15,BRC ;指向输出缓冲区的首地址
LD*AR3,A ;将第一个字装入累加器A中
RVS:SFTA A,-1,A
STM #15,BRC
RPTB RVS2-1
ROL B
SFTA A,-1,A
RVS2:BANZD RVS,*AR4- ;判断所有的字是否都计算完
STL B,*AR3+ ;保存刚计算完的字
LD *AR3,A ;装入下一个字
《用TMS320C54X实现Vertibi译码器(第4页)》