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

📄 dotprod_func.asm

📁 矩阵点乘
💻 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 + -