📄 ulawde.asm
字号:
; INT2MU.ASM
;
; Integer originally loaded into A Accumulator
; (Q13 number is assumed to be sign-extended to 16 bits)
;
; mucode = musign + muchord + mustep
;
; muchord = (19h - T|EXP)<<4
; = 190h - (T|EXP)*16
; = 180h - (T|EXP)*16 + 10h
;
; musign = (AH * (-1)) <<7
; = (AH * FFFFh) * 128 = AH * (FFFFh * 128)
; = AH * (FFFFh << 7) = AH * FF80h
;
; mustep = (((|int| + 33) << (T|EXP)) << -26) - 10h
;
; Inversion of 8-bit mu code is equivalent to:
;
; mucode' = FF - mucode = FF - musign - muchord - mustep
;
; mucode' = FF-180h-AH*FF80h+(T|EXP)*16-((|int|+33)<<(T|EXP))>>26
;
; Final output is stored in Low accumulator B(7:0)
**********************************************************************
*************this is ulaw compressing*********************************
**********************************************************************
.mmregs
.global _main
.data
bias1 .word 0FFh-180h
bias2 .word 0FF80h
bias3 .word 21h
bias4 .word 16
table .word 0,13,25,36,44,48,49,47,40,31,19,6
.word -6,-19,-31,-40,-47,-49,-48,-44,-36,-25,-13,0
;test values is sine wave lengh=24 start address=0x0a04h at data address
.text
_main: STM 3000h,AR3
STM 17h,AR4
STM #table, AR0
LD #bias1, DP
cbeg LD *AR0+, A ;LOAD INTEGER FOR CONVERSION
LD bias1, B ;LOAD (FFh-180h)
MASA bias2, B ;Acc B = (FFh-180h-AH*FF80h)
ABS A ;A = |int|
ADD bias3, A ;A = |int| + 33 (33 = 21H)
EXP A ;# OF LEADING ZEROS -> (T|EXP)
MAC bias4, B ;ACCB += (T|EXP)*16
NORM A ;A<<(T|EXP)
SFTA A,-16 ;(A<<(T|EXP))>>16
SUB A,-10, B ;mucode' = B - (A<<(T|EXP))>>26
STL B, *AR3
ANDM 0X00FF,*AR3+
BANZ cbeg ,*AR4- ;DO IT AGAIN!!
******************************************************************
*********this is ulaw companding**********************************
******************************************************************
; MU2INT.ASM
;
;IMPLEMENT EQUATION
;
; mucode = musign : muchord : mustep
; X XXX XXXX
;
; INTNUM = [ ((2 * mustep + 33) << muchord) - 33 ] * SGN(musign)
;
; NOTE: since mucode is inverted for xmission, received is
; mucode' = musign' : muchord' : mustep'
;
; Inversion of 8-bit mucode, extended to 15 bits is equivalent to
;
; mucode = 7FFFh - mucode'
;
; The 15 bit extension is used for easy musign removal
;
;The final output is stored in high accumulator B(31:16)
.data
BIAS .word 21h
MASK .word 7FFFh,1Fh
TREG .set 14
.text
STM 2000h,AR5
STM 17h,AR6
STM #3000h, AR4
STM #MASK, AR2
STM #TREG, AR3
LD #-12, ASM
LD #BIAS, DP
loop:
SUB *AR2+,*AR4, A ;7FFFh - mucode' -> AH
AND A,8 ;REMOVE POLARITY BIT
;(A<<8 AND A)=(7F AND A(16-23))<<24
ST A,*AR3 ;STORE CHORD TO T: (A<<ASM-16)-> T and
|| LD *AR2-,B ;LOAD MASK FOR STEP ISOLATION B=1F<<16
AND A,-7,B ;ISOLATE STEP BITS (17-20): BH = 2*mustep
ADD BIAS,16,B ;BH = 2*mustep + 33
BIT *AR4+,8 ;COPY SIGN OF mcode'->TC of ST0
NORM B ;BH = (2*mustep+33)<<(muchord)
SUB BIAS,16,B ;BH = (2*mustep+33)<< muchord) - 33
XC 1,NTC ;mucode NEGATIVE? (BIT8 == 0; TC ==0)
NEG B ;IF SO NEGATE INTEGER: BH *= -1
STH B,*AR5+ ;DO IT AGAIN!
BANZ loop, *AR6-
here: B here
.end
**************************************************************************
*****input data at address 0a04h (data space)*****************************
*****encoder result at address 3000h(ar3 data space)**********************
*****decoder result at address 2000h(ar5 data space)**********************
*****data length 24*******************************************************
**************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -