汇编:8位芯片上的32位浮点指令
Assembly: 32 bit floating point instructions on an 8 bit chip
我试图帮助一位朋友在 8 位 AVR 芯片(Atmega8535)上编写一些汇编代码,但我的汇编知识非常少,而且主要集中在现代芯片上,而不是一些过时的化石。
所以它归结为如何在甚至不支持浮点特定指令集(如 FADD)的 8 位架构中添加 两个 32 位浮点数的问题...
; 3.1415926 (pi) is given by 0x40 0x49 0x0F 0xDA
; 2.7182818 (e) is given by 0x40 0x2D 0xF8 0x54
感兴趣的 here 是相关芯片的数据表。指令集从第301页开始。
我认为你有以下选择:
- 查看 avr-libc 了解实现细节
- 用 c 编写程序。
我敢打赌 avr-gcc 写的汇编代码(在效率 和 正确性方面)比你更好
- 使用更简单的数字格式。例如:
- 一些具有固定缩放比例的定点格式
- 一些没有 IEEE 开销的快速浮点格式。取决于您的要求,例如:
- 8位/16位尾数,8位指数。
- 类似于 Analog Devices 在其 blackfin 应用笔记中显示的内容:http://www.analog.com/media/en/technical-documentation/application-notes/EE.185.Rev.4.08.07.pdf
下面这本书也是一个很好的基本理解来源:
"Software Manual for the Elementary Functions"
作者:威廉·科迪、威廉·韦特
它展示了如何仅使用基于整数的算法来实现各种(也是基本的)操作和算法。
So it boils down to the question of how to add two 32 bit floating points in an 8 bit architecture that doesn't even support floating point specific instruction sets such as FADD
avr-libc 库可以做到 like this。所以你也应该。
我试图帮助一位朋友在 8 位 AVR 芯片(Atmega8535)上编写一些汇编代码,但我的汇编知识非常少,而且主要集中在现代芯片上,而不是一些过时的化石。
所以它归结为如何在甚至不支持浮点特定指令集(如 FADD)的 8 位架构中添加 两个 32 位浮点数的问题...
; 3.1415926 (pi) is given by 0x40 0x49 0x0F 0xDA
; 2.7182818 (e) is given by 0x40 0x2D 0xF8 0x54
感兴趣的 here 是相关芯片的数据表。指令集从第301页开始。
我认为你有以下选择:
- 查看 avr-libc 了解实现细节
- 用 c 编写程序。
我敢打赌 avr-gcc 写的汇编代码(在效率 和 正确性方面)比你更好 - 使用更简单的数字格式。例如:
- 一些具有固定缩放比例的定点格式
- 一些没有 IEEE 开销的快速浮点格式。取决于您的要求,例如:
- 8位/16位尾数,8位指数。
- 类似于 Analog Devices 在其 blackfin 应用笔记中显示的内容:http://www.analog.com/media/en/technical-documentation/application-notes/EE.185.Rev.4.08.07.pdf
下面这本书也是一个很好的基本理解来源:
"Software Manual for the Elementary Functions" 作者:威廉·科迪、威廉·韦特
它展示了如何仅使用基于整数的算法来实现各种(也是基本的)操作和算法。
So it boils down to the question of how to add two 32 bit floating points in an 8 bit architecture that doesn't even support floating point specific instruction sets such as FADD
avr-libc 库可以做到 like this。所以你也应该。