📄 baserej.asm
字号:
.def start
.ref rawdata
.mmregs
Npoint .set 2000
fil_length .set 124 ;=actual length-1
integ_length .set 36
.data
.bss fil_window,125
.bss dat_buff,600
temp_l .word 0 ;buffer
beg_addr .word 0
data_addr .word 0
temp .word 0
buf .word 0
new_data .word 0
.text
;pay attention to "!"
start: ssbx intm ;disable all interrupts
ssbx sxm ;extend sign
ssbx frct ;fraction multiply
stm #0FFFFh,sp ;stack initialize
stm #7FACh,pmst
;initial
stm #dat_buff,AR3 ;data store addr
stm #fil_window,AR5 ;filter coff store addr
ld #rawdata,A ;output store addr
stm #rawdata,ar1
stl a,*(data_addr)
;input data
stm #62,ar2 ;ar2->counter
ldm ar5,a
add #62,a ;point to middle of window
stlm a,ar5
nop
loop: ld *ar1+,b
stl b,*ar5+
banz next,*ar2- ;input 63 point
; stm #fil_length+1,ar2 ;entry point!
ld #fil_window,a
stl a,*(beg_addr)
ld #fil_length,a
b sort1 ;call!
ret1: stm #fil_window,ar5
ldm ar5,a
add #62,a ;point to middle of window
stlm a,ar5
nop
nop
ld *ar5,a ;fildata
stl a,*(temp)
ld *(data_addr),b ;rawdata
add #1,b
stl b,*(data_addr)
sub #1,b ;adjust rawdata pointer
stlm b,ar5
nop
nop
ld *ar5,b
sub *(temp),b,a
add #50,a ;raise data to positive!
stl a,*ar3+
stm #fil_window+1,ar5 ;data input
b inf
next: b loop
inf: b blr
loopn:
b loopn
;************validated**************
;***********************************
; sort a group of nums
; using pop method
;***********************************
sort1:
stlm a,ar2 ;ar2->counter
loop1: BANZ loop2, *AR2-
B lea
loop2: ldm ar2,a
stlm a,ar6 ;ar6->counter
ld *(beg_addr),a
stlm a,ar5 ;start address
leave1: BANZ cmp2, *AR6-
B lea1
cmp2: ld *ar5+,b
stlm b,ar4
ld *ar5,b
stlm b,ar0
rsbx tc
nop
nop
cmpr 2,ar4 ;compare
bc leave1,ntc
ldm ar4,a ;exchange if necessary
stl a,*ar5-
stl b,*ar5+
B leave1
lea1: b loop1
lea: b ret1
;***********************************
; sort the new added num
; ignore the biggest one
; block right shift one unit
;***********************************
sort2:
stlm a,ar2 ;ar2->counter
loop21: BANZ loop22, *AR2-
B lea2
loop22: ldm ar2,a
stlm a,ar6 ;ar6->counter
ld *(beg_addr),a
stlm a,ar5 ;start address
leave21:BANZ cmp, *AR6-
B lea21
cmp: ld *ar5+,b
stlm b,ar4
ld *ar5,b
stlm b,ar0
rsbx tc
nop
nop
cmpr 2,ar4 ;compare
bc leave21,ntc
ldm ar4,a ;exchange if necessary
stl a,*ar5-
stl b,*ar5+
B leave21
lea21: b loop21
lea2: b ret2
;blr filter
blr: ld *ar1+,a ;rawdata
stl a,*(fil_window);circular left shift
ld #fil_window,a
stl a,*(beg_addr)
ld #fil_length,a
b sort2
ret2: stm #fil_window,ar5
ldm ar5,a
add #62,a ;point to middle of window
stlm a,ar5
nop
nop
ld *ar5,a ;fildata
stl a,*(temp)
ld *(data_addr),b ;rawdata
add #1,b
stl b,*(data_addr)
sub #1,b
stlm b,ar5
nop
nop
ld *ar5,b
sub *(temp),b,a
add #50,a ;raise data to positive!
stl a,*ar3+
end_b: b blr
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -