⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dotprod_func.asm

📁 dsp2191的c与汇编混合编程示例,适合初学者学习,官方的经过验证
💻 ASM
字号:
///////////////////////////////////////////////////////////////////////////////
//
// 	FILE: dotprod_func.asm
//
//	A hand-tuned assembly version of a_dot_c
//
///////////////////////////////////////////////////////////////////////////////
#define N 20

.section/data data1;
.var saveI7;                // memory location to save off i7
.global saveI7;
.GLOBAL _a_dot_c_asm;

.section/code     my_asm_section;

_a_dot_c_asm:

	DM(saveI7) = i7;  // i7 is preserved, must save/restore        
    ax1 = dm(1, i4);  // fetch a[] pointer from stack
    i7  = ax1;        // assign i7 as a[] pointer
    reg(b7) = ax1;    // set base register of i7 for circular buffering

    ax1 = dm(2, i4);  // fetch c[] pointer from stack
    i0  = ax1;        // assign i0 as c[] pointer
    reg(b0) = ax1;    // set base register of i6 for circular buffering

    l7  = 0;          // clear the l7 length register
    l0  = 0;          // clear the l0 length register
  
	M7 = 1;			  // set modify reg to 1 so that we can pull each element of a[] out of memory
	M0 = 1;			  // set modify reg to 1 so that we can pull each element of c[] out of memory
	MR = 0;			  // make sure MR is cleared before we use it
	MX0 = DM(I0,M0);  // put first element in a[] into MX0
 	MY0 = PM(I7,M7);  // put first element in b[] into MY0
	CNTR=N;

    DO dploop UNTIL CE;    
dploop:		MR=MR+MX0*MY0(ss), MX0=DM(I0,m0), MY0=PM(I7,m7); // multiply our 2 array values and add to MR, 
															 // then get our next array values

	RTS(db);		  // return from subroutine, you can do exactly 2 instructions after this
	i7 = DM(saveI7);  // restore value in i7
	ax1 = mr0;		  // our return value is expected to be in ax1 if returning a WORD
asm_end:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -