📄 decode_2i40_9bits.asm
字号:
*****************************************************************************
** Description: decode_2i40_9bits() in d2_9pf.c
**
** Inputs
**
** AR1: Word16 subNr
** AR2: Word16 sign
** AR3: Word16 index
** XAR4: Word16 &cod[0]
**
** Outputs:
**
** &cod[0]
**
** Return value:
**
** none
**
** Attribute: Cycles: 242 Pm: 50
**
** Modified Registers: all
**
** Programmer: Liu Yang
**
** Complete time: 2003 4 12
*****************************************************************************
.global _decode_2i40_9bits
.ref startpos
.ref L_SUBFR
_decode_2i40_9bits:
; Decode the positions
AND AL,@AR3,#0x0040 ; AL = index & 64
ASR AL,#6 ; AL = j = shr((index & 64),6)
AND AH,@AR3,#0x0007 ; AH = i = index & 7
MOV @AR5,AH ; AR5 = i
; pos0 =i*5+startPos[j*8+subNr*2]
LSL AH,#2 ; AH = shl(i, 2)
ADD @AR5,AH ; AR5 = i = i = add(i, shl(i, 2))
LSL AL,#3 ; AL = shl(j, 3)
MOV AH,@AR1 ; AH = subNr
LSL AH,#1 ; AH = shl(subNr, 1)
ADD AL,@AH ; AL = add(shl(j, 3), shl(subNr, 1))
MOV ACC,@AL ; ACC = add(shl(j, 3), shl(subNr, 1))
MOVL XAR0,#startpos ; XAR0 = &starpos[0]
ADDL @XAR0,ACC ; XAR0 = &starpos[add(shl(j, 3), shl(subNr, 1))]
MOV AL,*XAR0 ; AL = k = starpos[add(shl(j, 3), shl(subNr, 1))]
ADD @AR5,AL ; AR5 = pos[0] = add(i, k)
MOV AL,@AR3 ; AL = index
ASR AL,#3 ; AL = index = shr(index, 3)
ANDB AL,#0x0007 ; AL = i = index & 7
MOV @AR6,AL ; AR6 = i
; pos1 =i*5+startPos[j*8+subNr*2+1]
LSL AL,#2 ; AL = shl(i, 2)
ADD @AR6,AL ; AR6 = i = add(i, shl(i, 2))
ADDB XAR0,#1 ; XAR0 = &startpos[add(add(shl(j, 3), shl(subNr, 1)), 1)]
MOV AL,*XAR0 ; AL = k = startpos[add(add(shl(j, 3), shl(subNr, 1)), 1)]
ADD @AR6,AL ; AR6 = pos[1] = add(i, k)
; Decode the signs and build the codeword
MOVL XAR0,@XAR4 ; XAR0 = &cod[0]
NOP
NOP
RPT #L_SUBFR-1 ; cod[i] = 0
||MOV *XAR0++,#0
MOVL ACC,@XAR4 ; ACC = &cod[0]
ADD ACC,@AR5 ; ACC = &cod[pos[0]]
MOVL @XAR0,ACC ; XAR0 = &cod[pos[0]]
AND AL,@AR2,#0x0001 ; AL = i = sign & 1
MOV AH,@AR2 ; AH = sign
ASR AH,#1 ; AH = shr(sign, 1)
MOV @AR2,AH ; AR2 = sign
CMP AL,#0 ; if i != 0
SB B1,EQ
MOV *XAR0,#8191 ; cod[pos[0]] = 8191
SB B2,UNC
B1: MOV *XAR0,#-8192 ; else cod[pos[j]] = -8192
B2: MOVL ACC,@XAR4 ; ACC = &cod[0]
ADD ACC,@AR6 ; ACC = &cod[pos[1]]
MOVL @XAR0,ACC ; XAR0 = &cod[pos[1]]
AND AL,@AR2,#0x0001 ; AL = i = sign & 1
; if i != 0
SB B3,EQ
MOV *XAR0,#8191 ; cod[pos[0]] = 8191
LRETR
B3: MOV *XAR0,#-8192 ; else cod[pos[j]] = -8192
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -