《单片机原理及系统设计实用教程》课件浮点运算子程序库

上传人:小萌新****ao 文档编号:363441840 上传时间:2023-10-08 格式:DOC 页数:67 大小:136KB
返回 下载 相关 举报
《单片机原理及系统设计实用教程》课件浮点运算子程序库_第1页
第1页 / 共67页
《单片机原理及系统设计实用教程》课件浮点运算子程序库_第2页
第2页 / 共67页
《单片机原理及系统设计实用教程》课件浮点运算子程序库_第3页
第3页 / 共67页
《单片机原理及系统设计实用教程》课件浮点运算子程序库_第4页
第4页 / 共67页
《单片机原理及系统设计实用教程》课件浮点运算子程序库_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《《单片机原理及系统设计实用教程》课件浮点运算子程序库》由会员分享,可在线阅读,更多相关《《单片机原理及系统设计实用教程》课件浮点运算子程序库(67页珍藏版)》请在金锄头文库上搜索。

1、(二)浮点运算子程序库及其使用说明本浮点子程序库有三个不同层次的版本,以便适应不同的应用场合:小型库(FQ51A.ASM):只包含浮点加、减、乘、除子程序。中型库(FQ51B.ASM):在小型库的基础上再增加绝对值、倒数、比较、平方、开平方、数制转换等子程序。大型库(FQ51.ASM):包含本说明书中的全部子程序。为便于读者使用本程序库,先将有关约定说明如下:双字节定点操作数:用R0或R1来表示存放在由R0或R1指示的连续单元中的数据,地址小的单元存放高字节。如果R0=1234H,若(R0)=30H,则(30H)=12H,(31H)=34H。二进制浮点操作数:用三个字节表示,第一个字节的最高位

2、为数符,其余七位为阶码(补码形式),第二字节为尾数的高字节,第三字节为尾数的低字节,尾数用双字节纯小数(原码)来表示。当尾数的最高位为时,便称为规格化浮点数,简称操作数。在程序说明中,也用R0或R1来表示R0或R1指示的浮点操作数,例如:当R0=-6.000时,则二进制浮点数表示为83C000H。若(R0)=30H,则(30H)=83H,(31H)=0C0H,(32H)=00H。十进制浮点操作数:用三个字节表示,第一个字节的最高位为数符,其余七位为阶码(二进制补码形式),第二字节为尾数的高字节,第三字节为尾数的低字节,尾数用双字节码纯小数(原码)来表示。当十进制数的绝对值大于时,阶码就等于整数

3、部分的位数,如876.5的阶码是03H,-876.5的阶码是83H;当十进制数的绝对值小于1时,阶码就等于80H减去小数点后面零的个数,例如0.00382的阶码是7EH,-0.00382的阶码是0FEH。在程序说明中,用R0或R1来表示R0或R1指示的十进制浮点操作数。例如有一个十进制浮点操作数存放在30H、31H、32H中,数值是-0.07315,即-0.7315乘以10的-1次方,则(30H)=0FFH,31H=73H,(32H)=15H。若用R0来指向它,则应使(R0)=30H。运算精度:单次定点运算精度为结果最低位的当量值;单次二进制浮点算术运算的精度优于十万分之三;单次二进制浮点超越

4、函数运算的精度优于万分之一;码浮点数本身的精度比较低(万分之一到千分之一),不宜作为运算的操作数,仅用于输入或输出时的数制转换。不管那种数据格式,随着连续运算的次数增加,精度都会下降。工作区:数据工作区固定在A、B、R2R7,数符或标志工作区固定在PSW和23H单元(位1CH1FH)。在浮点系统中,R2、R3、R4和位1FH为第一工作区,R5、R6、R7和位1EH为第二工作区。用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的透明性。子程序调用范例:由于本程序库特别注意了各子程序接口的相容性,很容易采用积木方式(或流水线方式)完成一个公式的计算。以浮点运算为例:计算=()已知:a

5、=-123.4;b=0.7577;c=56.34;d=1.276;它们分别存放在30H、33H、36H、39H开始的连续三个单元中。用码浮点数表示时,分别为a=831234H;b=007577H;c=025634H;d=011276H。求解过程:通过调用子程序,将各变量转换成二进制浮点操作数,再进行各种运算,最后调用子程序,还原成十进制形式,供输出使用。程序如下:TEST:MOV R0,#39H;指向码浮点操作数LCALL BTOF;将其转换成二进制浮点操作数MOV R0,#36H;指向码浮点操作数LCALL BTOF;将其转换成二进制浮点操作数MOV R0,#33H;指向码浮点操作数LCAL

6、L BTOF;将其转换成二进制浮点操作数MOV R0,#30H;指向码浮点操作数LCALL BTOF;将其转换成二进制浮点操作数MOV R1,#33H;指向二进制浮点操作数LCALL FMUL;进行浮点乘法运算MOV R1,#36H;指向二进制浮点操作数LCALL FDIV;进行浮点除法运算MOV R1,#39H;指向二进制浮点操作数LCALL FADD;进行浮点加法运算LCALL FSIN;进行浮点正弦运算LCALL FABS;进行浮点绝对值运算LCALL FSQR;进行浮点开平方运算LCALL FLN;进行浮点对数运算LCALL FTOB;将结果转换成码浮点数STOP:LJMP STOPE

7、ND运行结果,R0=804915H,即=-0.4915,比较精确的结果应该是-0.491437。()标号:功能:浮点数格式化入口条件:待格式化浮点操作数在R0中。出口信息:已格式化浮点操作数仍在R0中。影响资源:PSW、A、R2、R3、R4、位1FH堆栈需求:字节FSDT:LCALL MVR0;将待格式化操作数传送到第一工作区中LCALL RLN;通过左规完成格式化LJMP MOV0;将已格式化浮点操作数传回到R0中()标号:功能:浮点数加法入口条件:被加数在R0中,加数在R1中。出口信息:OV=0时,和仍在R0中,OV=1时,溢出。影响资源:PSW、A、B、R2R7、位1EH、1FH堆栈需求

8、:字节FADD:CLR F0;设立加法标志SJMP AS;计算代数和()标号:功能:浮点数减法入口条件:被减数在R0中,减数在R1中。出口信息:OV=0时,差仍在R0中,OV=1时,溢出。影响资源:PSW、A、B、R2R7、位1EH、1FH堆栈需求:字节FSUB:SETB F0;设立减法标志AS:LCALL MVR1;计算代数和。先将R1传送到第二工作区MOV C,F0;用加减标志来校正第二操作数的有效符号RRC AXRL A,R1MOV C,ACC.7ASN:MOV1EH,C;将第二操作数的有效符号存入位1EH中XRL A,R0;与第一操作数的符号比较RLC AMOV F0,C;保存比较结果

9、LCALL MVR0;将R0传送到第一工作区中LCALL AS1;在工作寄存器中完成代数运算MOV0:INC R0;将结果传回到R0中的子程序入口INC R0MOV A,R4;传回尾数的低字节MOVR0,ADEC R0MOV A,R3;传回尾数的高字节MOVR0,ADEC R0MOV A,R2;取结果的阶码MOV C,1FH;取结果的数符MOV ACC.7,C;拼入阶码中MOVR0,ACLR ACC.7;不考虑数符CLR OV;清除溢出标志CJNE A,#3FH,MV01;阶码是否上溢?SETB OV;设立溢出标志MV01:MOV A,R0;取出带数符的阶码RETMVR0:MOV A,R0;将

10、R0传送到第一工作区中的子程序MOV C,ACC.7;将数符保存在位1FH中MOV1FH,CMOV C,ACC.6;将阶码扩充为补码MOV ACC.7,CMOV R2,A;存放在R2中INC R0MOV A,R0;将尾数高字节存放在R3中MOV R3,AINC R0MOV A,R0;将尾数低字节存放在R4中MOV R4,ADEC R0;恢复数据指针DEC R0RETMVR1:MOV A,R1;将R1传送到第二工作区中的子程序MOV C,ACC.7;将数符保存在位1EH中MOV1EH,CMOV C,ACC.6;将阶码扩充为补码MOV ACC.7,CMOV R5,A;存放在R5中INC R1MOV

11、 A,R1;将尾数高字节存放在R6中MOV R6,AINC R1MOV A,R1;将尾数低字节存放在R7中MOV R7,ADEC R1;恢复数据指针DEC R1RETAS1:MOV A,R6;读取第二操作数尾数高字节ORL A,R7JZ AS2;第二操作数为零,不必运算MOV A,R3;读取第一操作数尾数高字节ORL A,R4JNZ EQ1MOV A,R6;第一操作数为零,结果以第二操作数为准MOV R3,AMOV A,R7MOV R4,AMOV A,R5MOV R2,AMOV C,1EHMOV1FH,CAS2:RETEQ1:MOV A,R2;对阶,比较两个操作数的阶码XRL A,R5JZ A

12、S4;阶码相同,对阶结束JB ACC.7,EQ3;阶符互异MOV A,R2;阶符相同,比较大小CLR CSUBB A,R5JC EQ4EQ2:CLR C;第二操作数右规一次MOV A,R6;尾数缩小一半RRC AMOV R6,AMOV A,R7RRC AMOV R7,AINC R5;阶码加一ORL A,R6;尾数为零否?JNZ EQ1;尾数不为零,继续对阶MOV A,R2;尾数为零,提前结束对阶MOV R5,ASJMP AS4EQ3:MOV A,R2;判断第一操作数阶符JNB ACC.7,EQ2;如为正,右规第二操作数EQ4:CLR CLCALL RR1;第一操作数右规一次ORL A,R3;尾

13、数为零否?JNZ EQ1;不为零,继续对阶MOV A,R5;尾数为零,提前结束对阶MOV R2,AAS4:JB F0,AS5;尾数加减判断MOV A,R4;尾数相加ADD A,R7MOV R4,AMOV A,R3ADDC A,R6MOV R3,AJNC AS2LJMP RR1;有进位,右规一次AS5:CLR C;比较绝对值大小MOV A,R4SUBB A,R7MOV B,AMOV A,R3SUBB A,R6JC AS6MOV R4,B;第一尾数减第二尾数MOV R3,ALJMP RLN;结果规格化AS6:CPL1FH;结果的符号与第一操作数相反CLR C;结果的绝对值为第二尾数减第一尾数MOV

14、 A,R7SUBB A,R4MOV R4,AMOV A,R6SUBB A,R3MOV R3,ARLN:MOV A,R3;浮点数规格化ORL A,R4;尾数为零否?JNZ RLN1MOV R2,#0C1H;阶码取最小值RETRLN1:MOV A,R3JB ACC.7,RLN2;尾数最高位为一否?CLR C;不为一,左规一次LCALL RL1SJMP RLN;继续判断RLN2:CLR OV;规格化结束RETRL1:MOV A,R4;第一操作数左规一次RLC A;尾数扩大一倍MOV R4,AMOV A,R3RLC AMOV R3,ADEC R2;阶码减一CJNE R2,#0C0H,RL1E;阶码下溢否?CLR AMOV R3,A;阶码下溢,操作数以零计MOV R4,AMOV R2,#0C1HRL1E:CLR OVRETRR1:MOV A,R3;第一操作数右规一次RRC A;尾数缩小一半MOV R3,AMOV A,R4RRC AMO

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号