错误:Clobber中的“ asm”中的未知寄存器名称“ r3”

时间:2019-08-01 18:40:05

标签: c assembly inline-assembly

我想编写一个内联汇编函数,该函数将进行乘法和移位,然后将结果移位为32位值,我需要使用Clobbers,但不能使用任何函数,从而产生错误

我想使用Clobbers进行计算,然后返回结果

    static inline int32_t multi(int32_t in0, int32_t in1)
{
    int32_t res=0;
    asm volatile ( "add.n r3 , %1 ,%1\n"
           "mull %0, %2 , r3\n"
           :"=r"(res) 
           : "r"(in0), "r"(in1)
               :"cc","r3");  
     return res;

}

正在产生以下错误,

  

错误:“ asm”中的未知寄存器名称“ r3”

我尝试了许多寄存器,例如a1 a2等,但是似乎没有任何作用,我在上面的代码中犯了一些愚蠢的错误

1 个答案:

答案 0 :(得分:-1)

我不确定“ add.n”是什么。但是从描述中,我猜想您可能想要执行以下操作:

#include "stdio.h"
#include "stdint.h"

static inline int32_t multi(int32_t in0, int32_t in1)
{
        asm volatile (  "mul %1 \t\n"
                        :"+a"(in0), "+c"(in1)
                        :
                        :"memory");
        return in0;

}

void main() {
        int32_t a, b;

        //test data
        a = 2;
        b = 7;

        printf("result: %d\n", multi(a,b));
}