Microchip C 内联汇编不会为内联汇编中的立即数生成前缀

问题描述

我正在尝试在 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 regrepeat #imm 代表 "ri""g"

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)