我试图memcpy
在 asm 中实现我自己的功能。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
是不可行的,因为如果编译器选择了一个寄存器,那将会中断。
它是微芯片编译器的错误吗?
有什么方法可以编写可以正确扩展为
repeat reg
or repeat #imm
for "ri"
or的内联 asm"g"
吗?