📄 corr2.asm
字号:
/**************************************************************************
corr2.asm ADSP-2106x
程序功能:计算X[]与Y[]的时域相关性,它们的长度可以不一样。
***************************************************************************/
#include "def21060.h" /* Memory Mapped IOP register definitions */
#define LENGTH_X 32 /* Constant for number of points in input */
#define LENGTH_Y 31
.SECTION/DM dm_data; /* 定义数据存储区中的变量 */
.VAR inputx[LENGTH_X]= "square0.dat";
.VAR inputy[LENGTH_Y]= "square2.dat";
.VAR output[LENGTH_X+LENGTH_Y-1]= "zeros.dat";
.SECTION/PM pm_rsti; /* The reset vector resides in this space */
NOP;
USTAT2= 0x108421; /* 1st instr. to be executed after reset */
DM(WAIT)=USTAT2; /* Set external memory waitstates to 0 */
JUMP start;
.SECTION/PM pm_code;
start: M1=1;
I0=inputx;
L0=0;
I3=output+LENGTH_Y-1;
L3=0;
/* 把inputx中的数据复制到output的后半段[LENGTH_Y-1,LENGTH_X+LENGTH_Y-2]*/
LCNTR=LENGTH_X, do copydata until lce;
F0=DM(I0,M1);
copydata:DM(I3,M1)=F0;
CALL relate; /* 调用子程序,进行相关性计算 */
end: IDLE;
/********************* 计算时域相关性的子程序 ****************************/
relate: I2=output;
M1=1;
M9=1;
F15=0; /* 用于给累加器清零 */
/* 计算前面 LENGTH_X 个相关数据 */
LCNTR=LENGTH_X, DO left UNTIL LCE;
I9=I2;
I1=inputy; /* 指向inputy */
F9=PASS F15, F0=DM(I1,M1), F5=PM(I9,M9);/* F0=x , F5=y */
LCNTR=LENGTH_Y, DO inner1 UNTIL LCE;
F13=F0*F5;
inner1: F9=F9+F13, F0=DM(I1,M1), F5=PM(I9,M9); /* F0=x , F5=y */
left: DM(I2,M1)=F9; /* 存储计算结果,I2递增 */
/* 计算后面 LENGTH_Y-1 个相关数据 */
R1=LENGTH_Y; /* 内循次数计数器 */
LCNTR=LENGTH_Y-1, DO right UNTIL LCE;
I9=I2;
I1=inputy; /* 指向inputy */
R1=R1-1; /* 内循环次数递减 */
F9=PASS F15, F0=DM(I1,M1), F5=PM(I9,M9);/*F0=y, F5=x */
LCNTR=R1, DO inner2 UNTIL LCE;
F13=F0*F5;
inner2: F9=F9+F13, F0=DM(I1,M1),F5=PM(I9,M9); /*F0=y, F5=x */
right: DM(I2,M1)=F9; /* 存储计算结果 */
RTS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -