📄 pcrcasm.asm
字号:
; .version 50
; .mmregs
; .DEF P10,P10_1,TEMP,CORFLAG,STACK,DIVISOR,SIGNFLAG,ALPHA,BETA,ACCBUF
; .GLOBAL COR,RC,TMP,SIGNAL,FLEN,HFLEN_1,HFLEN,P10_2
; .OPTION X
; .BSS TJ,2
; .BSS LPC0,1
; .BSS LPC,10
; .bss RC,10
; .bss RCEXP,10
; .BSS TMP,10
; .BSS TEMP,1
;=======================
;AR7, LOOP
;AR0:LPC+9,
;AR1:RCEXP,
;AR2:TMP,
;AR3:LPC[j]-----------------------
PCTORC
LACC #8
SAMM AR7
LACC #15
SAMM TREG1
LAR AR0,#LPC+9
LAR AR1,#RCEXP+9
LAR AR2,#TMP+9
LDP #TJ
LACC #P10_1
SACL TJ
MAR *,AR0
PCTORC_1
;------------for (i = n; i > 1; i--)-------------------
;------------rc[i-1] = -a[i]---------
LACC *-,0,AR1 ;AR0->a[i-1]
NEG
sacb
abs
sub #2000h ;if a[]>=0x2000 then rc[]>1
bcndd ENDPCTORC,C
LACB
SFL
SFL
SACL * ;AR1->rc[i-1]
;----for (j = 1; j < i; j++)
;------t[i-j] = (a[i-j] + rc[i-1] * a[j]) / (1.0 - rc[i-1] * rc[i-1]);
;=====ARP=1*******==
SAMM TREG0
LAR AR3,#LPC
LACC TJ
SUB #1
SACL TJ
SACL TJ+1
SAMM BRCR
;MAR *,AR3
;MAR *,AR1
MPY *,AR3 ;TREG0=rc[i-1]
PAC
SATL
BCND PCTORC_1A,NEQ
;--ARP=3-----------
RPTB PCTORC_1B-1
MPY *+,AR0
PAC
SATL ;ACC>>=15
ADD *-,0,AR2
SACL *-,0,AR3
PCTORC_1B
B PCTORC_2
;====ARP=3==============
PCTORC_1A
ADD #8000H ;1-rc[]*rc[]
ABS
SACL TEMP
;SACB
RPTB PCTORC_2-1
MPY *+,AR0
PAC
SATL ;ACC>>=15
ADD *-
SACB
LACC TEMP ;ACCB/ACC
CALL INTDIV
MAR *,AR2
SACL *-,0,AR3
PCTORC_2
;-------for (j = 1; j < i; j++) a[j] = t[j]---------------
;-----------ARP=3-----------
LAR AR3,#LPC
LACC #TMP+1
SAMM BMAR
RPT TJ+1
BLDD BMAR,*+
SBRK #1 ;AR3-=1
LAMM AR3
SAMM AR0 ;AR0->a[i-1]
LACC #TMP ;AR2->tmp[i-1]
ADD TJ
SAMM AR2
MAR *,AR1 ;AR1->rc[i-1]
MAR *-,AR7
BANZ PCTORC_1,*-,AR0
;-----------========================
LACC LPC
NEG
;SFL
;SFL
SACL RCEXP,2
RET
ENDPCTORC
LDP #CORFLAG
LACC #1
SACL CORFLAG
LAR AR0,#LPC
LAR AR1,#RCEXP
MAR *,AR1
LACC #P10_1
SAMM BRCR
LACC #0
RPTB ENDPCTORC2-1
SACL *+,0,AR0
SACL *+,0,AR1
NOP
ENDPCTORC2
RET
; //for (i = 0; i <= n; i++) a[i] = lpc[i];
; for (i = n; i > 1; i--)
; { rc[i-1] = -a[i];
; for (j = 1; j < i; j++)
; t[i-j] = (a[i-j] + rc[i-1] * a[j]) / (1.0 - rc[i-1] * rc[i-1]);
; for (j = 1; j < i; j++) a[j] = t[j];
; }
; rc[0] = -a[1];
;--------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -