如何在AVR内联汇编中添加2个“浮点”类型编号?

时间:2019-05-29 19:15:01

标签: assembly arduino avr inline-assembly avr-gcc

我试图在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内联汇编的东西,但是实际上没有一个人在解决做更复杂的数学这一话题,所以我完全不知道该怎么做,不知道它在哪里以及为什么会失败。

请感谢简短的说明,因为我也想实现乘法和除法,以及一个工作代码示例。谢谢!

0 个答案:

没有答案