问题描述
我正在尝试在 asm 中实现我自己的 memcpy
函数。 cpu为dsPIC33F,编译器microchip C30。
asm("repeat %2 \n mov.b [%1++],[%0++]"
: : "r"(dst),"r"(src),"ri"(len));
当 len
是变量时,这工作正常:编译器选择一个寄存器并且没有问题。
但是当 len
是编译时常量(例如 10)时,汇编程序会说:Error: Invalid operands specified ('repeat 10').
这是因为微芯片汇编器在立即数之前需要 #
:repeat #10
在源代码中使用 #%2
是不可行的,因为如果编译器选择了一个寄存器,它就会中断。
这是微芯片编译器的错误吗?
有什么方法可以编写内联 asm 可以正确扩展到 repeat reg
或 repeat #imm
代表 "ri"
或 "g"
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)