3

我试图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 regor repeat #immfor "ri"or的内联 asm"g"吗?

4

0 回答 0