我在arduino编码,但我也在我的c代码之间使用汇编代码。我想计算一个值的罪。到目前为止我有这个代码:
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);
}
我得到的错误是:' asm'中的操作数限制不一致 有趣的是,当我删除最后一行(Serial.print(answer))
时,我不会收到此错误我也找到了8086汇编程序的代码,而不是avr和8086" = t"是特定的浮动,但我找不到类似的avr。
答案 0 :(得分:1)
您使用的8位AVR几乎肯定没有fsin
指令。由于8086和AVR是两种不同的体系结构,它们将具有不同的指令,并且具有相同名称的指令可能具有不同的含义。您不能指望将汇编代码从一个体系结构复制到另一个体系结构。 8位AVR根本不支持浮点数;由编译器在软件中添加。
您要找的是sin
提供的avr-libc
功能。这只是一个普通的C函数,您可以通过先将#include <math.h>
添加到程序顶部然后编写类似answer = sin(angle);
的内容来调用。