【发布时间】: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