此帖出自DSP 与 ARM 处理器论坛
最新回复
1. Parent的意思是该寄存器由主函数(父函数)保存,除了Special Uses中指出的用处之外,在子函数中还可以用作中间变量;如果父函数是C函数,那么保存寄存器值的这步动作已经由编译器完成。
Child的意思是指如果在子函数中要修改该寄存器,必须由子函数保留该寄存器的值,并在子函数运行结束退出之前恢复,否则将破坏程序的runtime environment。
C与汇编混合编程,通常情况下,用汇编完成核心的、运算复杂的子函数,并由C程序调用之,所以在汇编代码中应注意Parent preserve的寄存器可以修改,Child preserve的寄存器必须先保存后再修改。
2. 你的代码中的问题在于MPY32指令有3个delay slot,其运算结果才生效。
修改如下(非优化繁琐版),仅供参考:
#include
extern void MPY1(int m, int n, int *r);
int main()
{
int m,n,r;
m = 10;
n = 20;
MPY1(m, n, &r);
printf("r=%d \n", r);
return 0;
}
.text
.global _MPY1
_MPY1:
MV .S1 A4, A1
MV .S1x B4, A2
B .S2 B3
MPY32 .M1 A1, A2, A0
NOP 3
STW .D1 A0, *A6 ;
详情
回复
发表于 2012-4-26 15:53
| ||
|
||
回复 楼主 breeze505 的帖子
此帖出自DSP 与 ARM 处理器论坛
| ||
|
||
回复 沙发 carrotchen 的帖子
此帖出自DSP 与 ARM 处理器论坛
| ||
|
||
回复 板凳 breeze505 的帖子
此帖出自DSP 与 ARM 处理器论坛
赞赏 | ||
|
||
回复 4楼 carrotchen 的帖子
此帖出自DSP 与 ARM 处理器论坛
| ||
|
||
回复 5楼 breeze505 的帖子
此帖出自DSP 与 ARM 处理器论坛
赞赏 | ||
|
||
回复 6楼 carrotchen 的帖子
此帖出自DSP 与 ARM 处理器论坛
| ||
|
||
回复 7楼 breeze505 的帖子
此帖出自DSP 与 ARM 处理器论坛
赞赏 | ||
|
||
回复 8楼 carrotchen 的帖子
此帖出自DSP 与 ARM 处理器论坛
| ||
|
||
回复 9楼 breeze505 的帖子
此帖出自DSP 与 ARM 处理器论坛
赞赏 | ||
|
||
| |
|
|
EEWorld Datasheet 技术支持