【问题标题】:Assembly: 32 bit floating point instructions on an 8 bit chip汇编:8位芯片上的32位浮点指令
【发布时间】:2015-06-30 22:58:21
【问题描述】:

我试图帮助一位朋友在 8 位 AVR 芯片(Atmega8535)上编写一些汇编代码,但我的汇编知识相当薄弱,主要集中在现代芯片上,而不是一些过时的化石。

所以归结为如何在一个甚至不支持浮点特定指令集(例如 FADD)的 8 位架构中添加 两个 32 位浮点的问题... p>

; 3.1415926 (pi) is given by 0x40 0x49 0x0F 0xDA
; 2.7182818 (e)  is given by 0x40 0x2D 0xF8 0x54

有兴趣的here 是相关芯片的数据表。指令集从第 301 页开始。

【问题讨论】:

  • 与任何其他定点机器进行浮点数学运算的方式相同。这和你在小学做数学的方式一样。加上你排列你的小数点(指数必须匹配),做加法。那么对于浮点数,您可能必须规范化小数点后一位。基本上,如果您不知道如何进行此组装,即使您这样做,那也太疯狂了,只需将源代码获取到工作库并对其进行编译,或者获取已编译库的对象并将其链接到并调用它。
  • 如果您有硬件 fpu,这与硬件的处理方式相同。
  • @BlooIt 一点也不疯狂。直到大约 80 年代后期,任何 PC 中的浮点单元都是稀有且昂贵的配件——如果它们完全可用的话。编译器只是生成了对使用整数指令来实现浮点数学的库的调用。它很慢,工作正常。即使你不能使用库,从中提取代码来做必须做的事情也是一种前进的方式。
  • 8 位 AVR 是当前最先进的技术,远未过时。尝试以不到 1 美元的价格购买一个 8 针封装的 Intel 32 位 CPU + 电源 + 内存控制器 + RAM + 非易失性内存 + ADC + 串行接口控制器 + ...。

标签: assembly floating-point avr atmega


【解决方案1】:

我认为您有以下选择:

  • 查看 avr-libc 了解实现细节
  • 用c 编写程序。
    我敢打赌,avr-gcc 写的汇编代码比你写得更好(就效率正确性而言)
  • 使用更简单的数字格式。例如:

下面这本书也是一个很好的基本理解来源:

《基本功能软件手册》 作者:William J. Cody、William Waite

它展示了如何仅使用基于整数的算术来实现各种(也是基本的)操作和算法。

【讨论】:

  • 假设 OP 需要完成一些作业,这是一个非常好的答案,可以帮助他了解他需要做什么。 +1
【解决方案2】:

所以它归结为如何在一个甚至不支持浮点特定指令集(例如 FADD)的 8 位架构中添加两个 32 位浮点的问题

avr-libc 库做到了like this。因此,您也应该这样做。

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多