| 标号: 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 ;与尾数的对数合并,得原操作数的对数
|