我试图在arduino uno上使用内联汇编将2个浮点数加在一起。最终目标是创建一个计算器,但我希望使用asm();进行每个操作。这段代码可以很好地工作:
void setup() {
Serial.begin(9600);
volatile long highNumber1 = 123, highNumber2 = 123, highResult = 0;
asm (
"add %A1, %A2 \n" //Add low byte
"adc %B1, %B2 \n" //Add with carry high byte
"adc %C1, %C2 \n" //so on
"adc %D1, %D2 \n" //so on
: "=r" (highResult) :"r" (highNumber1), "r" (highNumber2)
);
Serial.print("highResult = "); Serial.println(highResult);
Serial.print("highNumber1 = "); Serial.println(highNumber1);
Serial.print("highNumber2 = "); Serial.println(highNumber2);
}
并返回:
highResult = 246
highNumber1 = 123
highNumber2 = 123
应有的
但是当我像这样将'long'更改为'float'
volatile float highNumber1 = 123, highNumber2 = 123, highResult = 0;
输出为:
highResult = -0.00
highNumber1 = 123.00
highNumber2 = 123.00
这显然是错误的。
我读了很多关于arduino内联汇编的东西,但是实际上没有一个人在解决做更复杂的数学这一话题,所以我完全不知道该怎么做,不知道它在哪里以及为什么会失败。
请感谢简短的说明,因为我也想实现乘法和除法,以及一个工作代码示例。谢谢!