2017-01-23 93 views
0

我在arduino中编码,但我也在我的C代码之间使用汇编代码。我想计算一个价值的罪恶。到目前为止,我有这样的代码:AVR内联汇编Fsin操作数约束

void setup() { 
    // put your setup code here, to run once: 

} 

void loop() { 
    // put your main code here, to run repeatedly: 
    Serial.begin(9600); 
    float answer; 
    float angle = 2; 
    int a = 2; 
    int b = 3; 
    asm("ADD %0,%1" : "+r"(a) : "r"(b)); 
    asm("fsin" : "=t" (answer) : "0" (angle)); 
    Serial.print(answer); 
} 

我得到这个错误是:在“汇编” 有趣的不一致的操作数的限制是,我不,当我删除的最后一行(串行得到这个错误。打印(答案))

我还发现这个代码为8086汇编程序,而不是avr和8086“= t”是特定于浮动,但我找不到任何类似的avr。

+1

在AVR上没有像'fsin'这样的汇编命令。这是一个C函数调用,需要像这样处理('CALL')。 – tofro

回答

1

不管你使用的8位AVR几乎可以肯定没有fsin指令。由于8086和AVR是两种不同的体系结构,它们将有不同的指令,并且具有相同名称的指令可能具有不同的含义。您不能期望将汇编代码从一个架构复制到另一个架构。 8位AVR根本没有对浮点数的本地支持;它被编译器添加到软件中。

你在找什么是由avr-libc提供的sin功能。这只是一个普通的C函数,你可以先调用#include <math.h>到你的程序的顶部,然后写入类似answer = sin(angle);的东西。