最近看前辈写的代码,其中算法部分用汇编写的,有些地方不太明白,以下是求和算法的代码
/****************************************************
求和计算
//void AsmAddProcess2(SWORD *pswResult,SWORD* pswAdd1,SWORD *pswAdd2,int nCount)
// SWORD* pswResult : 处理结果存放缓冲区,R0
// SWORD* pswAdd1: 被加数,R1
// SWORD* pswAdd2: 加数,R2
// int nCount : 个数,
*****************************************************/
.global _AsmAddProcess2;
_AsmAddProcess2:
LINK 0x00;
[ --sp ] = (P5:3); (1)
[ --sp ] = LC0;
[ --sp ] = LB0;
[ --sp ] = LT0;
P0 = R0;//处理结果缓冲区 (2)
P1 = R1;//被加数
P2 = R2;//加数
P3 = [ FP + 0x14 ];//处理个数
lsetup(LOOP_ADDPROCESS_START2,LOOP_ADDPROCESS_END2) lc0 = P3;
LOOP_ADDPROCESS_START2: R0 = w[ P1++ ](x) ;
R1 = w[ P2++ ](x) ;
R2 = R0 + R1;
LOOP_ADDPROCESS_END2: w[ P0++ ] = R2;
LT0 = [ sp++ ];
LB0 = [ sp++ ];
LC0 = [ sp++ ];
(P5:3) = [ sp++ ];
P0 = [ FP + 0x4 ] ;
UNLINK ;
JUMP ( P0 ) ;
_AsmAddProcess2.end:
1、入栈操作时,只将(p5:3)入栈,P0,P1,P2不需要入栈么
2、在用汇编语言编写函数时,函数参数的值都是自动存放在R0,R1,R2里么,当多余3个参数时,第四个参数放在那里呢