×
嵌入式 > 技术百科 > 详情

以e为底的浮点对数函数

发布时间:2020-06-06 发布时间:
|
标号: FLN 功能:以e为底的浮点对数函数

入口条件:操作数在[R0]中。
出口信息:OV=0时,结果仍在[R0]中,OV=1时,负数或零求对数出错。
影响资源:DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 7字节
 
FLN: LCALL MVR0 ;将[R0]传送到第一工作区
JB 1FH,LNOV;负数或零求对数,出错
MOV A,R3
ORL A,R4
JNZ LN0
LNOV: SETB OV
RET
LN0: CLR C
LCALL RL1 ;左规一次
CLR A
XCH A,R2 ;保存原阶码,清零工作区的阶码
PUSH ACC
LCALL RLN ;规格化
LCALL MOV0 ;回传
LCALL FPLN ;用多项式计算尾数的对数
DB 7BH,0F4H,30H;0.029808
DB 0FEH,85H,13H;-0.12996
DB 7FH,91H,51H;0.28382
DB 0FFH,0FAH,0BAH;-0.4897
DB 0,0FFH,0CAH;0.99918
DB 70H,0C0H,0;1.1442×10-5
DB 40H ;结束
POP ACC ;取出原阶码
JNZ LN1
RET ;如为零,则结束
LN1: CLR 1EH ;清第二区数符
MOV C,ACC.7
MOV F0,C ;保存阶符
JNC LN2
CPL A ;当阶码为负时,求其绝对值
INC A
LN2: MOV R2,A ;阶码的绝对值乘以0.69315
MOV B,#72H
MUL AB
XCH A,R2
MOV R7,B
MOV B,#0B1H
MUL AB
ADD A,R7
MOV R7,A ;乘积的尾数在R6R7R2中
CLR A
ADDC A,B
MOV R6,A
MOV R5,#8 ;乘积的阶码初始化(整数部分为一字节)
LN3: JB ACC.7,LN4;乘积格式化
MOV A,R2
RLC A
MOV R2,A
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
DEC R5
SJMP LN3
LN4: MOV C,F0 ;取出阶符,作为乘积的数符
MOV ACC.7,C
LJMP ASN ;与尾数的对数合并,得原操作数的对数

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题