📄 alaw2int.asm
字号:
; ALAW2INT.ASM
;
;IMPLEMENT EQUATION
;
; A-LAW = ASGN : ACHD : ASTEP
; X XXX XXXX
;
; INTNUM = [ (2*ASTEP + 33)*2^(ACHD) - 32*DELTA(ACHD)] * SGN(ASGN)
;
; DELTA(ACHD) = 1 ACHD == 0
; = 0 elsewhere
;
; Final output is stored in low accumulator B
.def CodeEntry
.mmregs
.data
TABLE .word 0ah,0b2h,81h,90h,0f3h,0d5h,42h,65h,6ch,19h,05h,0a6h
;TEST VALUES
MASK1 .word 0ABh;(55h<<1)+1 to account for left shift on load
MASK2 .word 0FFh
ONEF .word 1Fh
ONE .word 1
THREE2 .word 32
.text
CodeEntry STM #TABLE, AR5
LD #MASK1,DP
cbeg LD *AR5,1,B ;LOAD 2*ALAW CODE
XOR MASK1,B ;INVERT AT RECEIVER
AND MASK2,B ;REMOVE SIGN BIT
SFTA B,-5,A ;STORE CHORD (SHIFT VAL) TO A
SUB ONE,A ;A = CHD -1
STLM A,T ;STORE CHD-1 TO T FOR NORMALIZATION
AND ONEF,B ;ISOLATE SEGMENT
BIT *AR5+,8 ;CHECK SIGN OF ORIGINAL A-LAW CODE
XC 2,AGEQ ;IF CHD IS NOT -1 EXECUTE NEXT 2 INSTR
ADD THREE2,B ;ADD 32 OFFSET
NORM B ;ALIGN SEGMENT, (2*ASTEP+33)*2^(ACHR)
XC 1,TC ;CHECK IF A-CODE WAS NEGATIVE (BIT8 == 0)
NEG B ;IF SO NEGATE INTEGER
B cbeg ;DO IT AGAIN!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -