.title "fdct.asm"
.mmregs
.global _asmfdct;start
x .usect "DATA3",8
h .usect "DATA4",8
y .usect "DATA5",8
size .set 8
.sect ".coef2"
COEF2 .word 32768/2, 32768/2, 32768/2, 32768/2
.word 45450/2, 38531/2, 25745/2, 9040/2
.word 42813/2, 17733/2, -17733/2, -42813/2
.word 38531/2, -9040/2, -45450/2, -25746/2
.word 32768/2, -32768/2, -32768/2, 32768/2
.word 25745/2, -45450/2, 9040/2, 38531/2
.word 17733/2, -42813/2, 42813/2, -17733/2
.word 9040/2, -25745/2, 38531/2, -45450/2
.text
_asmfdct:
PSHMAR1
PSHM AR6
PSHM AR7
PSHM ST0
PSHM ST1
STLM A,AR6
LD @6,A
STLM A,AR7
SSBX FRCT
;STM #1,BRC
STM #x,AR2
RPTZ A,#7
STL A,*AR2+%
STM #h,AR2
RPTZ A,#7
STL A,*AR2+%
STM #x,AR2
STM #x+(size-1),AR3
STM #h,AR4
STM #h+(size-1),AR5
STM #size,BK
STM #1,AR0
;RPTB FDCTEND-1
FDCT:
LD *AR6+,A;每次更新x0-x7
STL A,*AR2+%
LD *AR6+,A;每次更新x0-x7
STL A,*AR2+%
LD *AR6+,A;每次更新x0-x7
STL A,*AR2+%
LD *AR6+,A;每次更新x0-x7
STL A,*AR2+%
LD *AR6+,A;每次更新x0-x7
STL A,*AR2+%
LD *AR6+,A;每次更新x0-x7
STL A,*AR2+%
LD *AR6+,A;每次更新x0-x7
STL A,*AR2+%
LD *AR6+,A;每次更新x0-x7
STL A,*AR2+%
DLD *AR2+,B ;偶址高16位,低16位在下一个单元; AR2+2
DADD *AR3,B,A;奇地址高16位,低16位在上一个单元
DST A,*AR4+ ;h0=x0+x7,h1=x1+x6,
DSUB *AR3-,B
DST B,*AR5- ;h7=x0-x7,h6=x1-x6,
DLD *AR2+,B
DADD *AR3,B,A
DST A,*AR4 ;h2=x2+x5,h5=x3+x4,
DSUB *AR3-,B
DST B,*AR5 ;h3=x2-x5,h4=x3-x4
STM #COEF2,AR4
STM #h,AR5
STM #y,AR3
MPY *AR4+,*AR5+0%,A ;y0
MAC *AR4+,*AR5+0%,A
MAC *AR4+,*AR5+0%,A
MACR *AR4+,*AR5+0%,A
;STH A,*AR3+
STH A,*AR7+
MPY *AR4+,*AR5+0%,A ;y1
MAC *AR4+,*AR5+0%,A
MAC *AR4+,*AR5+0%,A
MACR *AR4+,*AR5+0%,A
STH A,*AR3+
STH A,*AR7+
MPY *AR4+,*AR5+0%,A ;y2
MAC *AR4+,*AR5+0%,A
MAC *AR4+,*AR5+0%,A
MACR *AR4+,*AR5+0%,A
; STH A,*AR3+
STH A,*AR7+
MPY *AR4+,*AR5+0%,A ;y3
MAC *AR4+,*AR5+0%,A
MAC *AR4+,*AR5+0%,A
MACR *AR4+,*AR5+0%,A
; STH A,*AR3+
STH A,*AR7+
MPY *AR4+,*AR5+0%,A ;y4
MAC *AR4+,*AR5+0%,A
MAC *AR4+,*AR5+0%,A
MACR *AR4+,*AR5+0%,A
; STH A,*AR3+
STH A,*AR7+
MPY *AR4+,*AR5+0%,A ;y5
MAC *AR4+,*AR5+0%,A
MAC *AR4+,*AR5+0%,A
MACR *AR4+,*AR5+0%,A
; STH A,*AR3+
STH A,*AR7+
MPY *AR4+,*AR5+0%,A ;y6
MAC *AR4+,*AR5+0%,A
MAC *AR4+,*AR5+0%,A
MACR *AR4+,*AR5+0%,A
; STH A,*AR3+
STH A,*AR7+
MPY *AR4+,*AR5+0%,A ;y7
MAC *AR4+,*AR5+0%,A
MAC *AR4+,*AR5+0%,A
MACR *AR4,*AR5,A
; STH A,*AR3+
STH A,*AR7+
FDCTEND POPM ST1
POPM ST0
POPM AR7
POPM AR6
POPM AR1
RET
.end
汇编输出结果:
c语言验证结果:
详细讲解及工程下载请关注我的公众号***For My Future***