Assembly 汇编:8位芯片上的32位浮点指令
我曾试图帮助一位朋友在8位AVR芯片(Atmega8535)上编写一些汇编代码,但我的汇编知识非常贫乏,主要集中在现代芯片上,而不是一些过时的化石 因此,它归结为如何在8位体系结构中添加两个32位浮点的问题,该体系结构甚至不支持特定于浮点的指令集,如FADDAssembly 汇编:8位芯片上的32位浮点指令,assembly,floating-point,avr,atmega,Assembly,Floating Point,Avr,Atmega,我曾试图帮助一位朋友在8位AVR芯片(Atmega8535)上编写一些汇编代码,但我的汇编知识非常贫乏,主要集中在现代芯片上,而不是一些过时的化石 因此,它归结为如何在8位体系结构中添加两个32位浮点的问题,该体系结构甚至不支持特定于浮点的指令集,如FADD ; 3.1415926 (pi) is given by 0x40 0x49 0x0F 0xDA ; 2.7182818 (e) is given by 0x40 0x2D 0xF8 0x54 对于感兴趣的用户,请参阅相关芯片的数据表。
; 3.1415926 (pi) is given by 0x40 0x49 0x0F 0xDA
; 2.7182818 (e) is given by 0x40 0x2D 0xF8 0x54
对于感兴趣的用户,请参阅相关芯片的数据表。指令集从第301页开始。我认为您有以下选项:
- 查看avr libc以了解实现细节
- 用c语言编写程序
我打赌AVRCC编写的汇编代码(在效率和正确性方面)比您更好 - 使用更简单的数字格式。如:
- 具有固定缩放的某些定点格式
- 一些没有IEEE开销的快速浮点格式。取决于您的要求,例如:
- 8位/16位尾数,8位指数
- 类似于blackfin应用程序中显示的模拟设备注意:
它展示了如何仅使用基于整数的算术实现各种(也是基本的)操作和算法。我认为您有以下选项:
- 查看avr libc以了解实现细节
- 用c语言编写程序
我打赌AVRCC编写的汇编代码(在效率和正确性方面)比您更好 - 使用更简单的数字格式。如:
- 具有固定缩放的某些定点格式
- 一些没有IEEE开销的快速浮点格式。取决于您的要求,例如:
- 8位/16位尾数,8位指数
- 类似于blackfin应用程序中显示的模拟设备注意:
avr libc库可以做到这一点。因此,您也应该这样做。与任何其他定点计算机进行浮点运算的方式相同。这和你在小学时做数学一样。使用add,将小数点对齐(指数必须匹配),然后进行加法。然后对于float,您可能需要将小数点后一位标准化。基本上,如果你还不知道如何进行组装,你就不会进行组装,即使你知道了,那也太疯狂了,只要把源代码放到一个工作库中编译它,或者得到一个编译库的对象,链接它并调用它。如果你有一个硬件fpu,硬件也会这样做。@BlooIt一点也不疯狂。大约在80年代末之前,任何个人电脑中的浮点运算单元都是稀有而昂贵的配件——如果有的话。编译器刚刚生成了对使用整数指令实现浮点数学的库的调用。很慢,很好用。即使你不能使用一个库,从库中提取代码来完成必须要做的事情也是一个前进的方向。8位AVR是当前最先进的技术,远远没有过时。尝试获得Intel 32位CPU+电源+内存控制器+RAM+非易失性内存+ADC+串行接口控制器+。。。在一个8针的软件包中,价格不到1美元。与任何其他定点机器进行浮点运算的方式相同。这和你在小学时做数学一样。使用add,将小数点对齐(指数必须匹配),然后进行加法。然后对于float,您可能需要将小数点后一位标准化。基本上,如果你还不知道如何进行组装,你就不会进行组装,即使你知道了,那也太疯狂了,只要把源代码放到一个工作库中编译它,或者得到一个编译库的对象,链接它并调用它。如果你有一个硬件fpu,硬件也会这样做。@BlooIt一点也不疯狂。大约在80年代末之前,任何个人电脑中的浮点运算单元都是稀有而昂贵的配件——如果有的话。编译器刚刚生成了对使用整数指令实现浮点数学的库的调用。很慢,很好用。即使你不能使用一个库,从库中提取代码来完成必须要做的事情也是一个前进的方向。8位AVR是当前最先进的技术,远远没有过时。尝试获得Intel 32位CPU+电源+内存控制器+RAM+非易失性内存+ADC+串行接口控制器+。。。在一个不到1美元的8针包装中。假设OP需要做一些家庭作业,这是一个非常好的答案,可以帮助他学习他需要的东西+1假设OP需要做一些家庭作业,这是一个非常好的答案,可以帮助他学习他需要做的事情+1.