(29) 标号: FSIN 功能:浮点正弦函数
入口条件:操作数在[R0]中。
出口信息:结果仍在[R0]中。
影响资源:DPTR、PSW、A、B、R2~R7、位1DH~1FH 堆栈需求: 6字节
FSIN: MOV A,@R0
MOV C,ACC.7
MOV 1DH,C ;保存自变量的符号
CLR ACC.7 ;统一按正数计算
MOV @R0,A
LCALL MVR0 ;将[R0]传送到第一工作区
MOV R5,#0 ;系数0.636627(2/Π)
MOV R6,#0A2H
MOV R7,#0FAH
CLR 1EH
LCALL MUL1 ;相乘,自变量按(Π/2)规一化
MOV A,R2 ;将结果复制到第二区
MOV R5,A
MOV A,R3
MOV R6,A
MOV A,R4
MOV R7,A
LCALL INT ;第一区取整,获得象限信息
MOV A,R2
JZ SIN2
SIN1: CLR C ;将浮点象限数转换成定点象限数
LCALL RR1
CJNE R2,#10H,SIN1
MOV A,R4
JNB ACC.1,SIN2
CPL 1DH ;对于第三、四象限,结果取反
SIN2: JB ACC.0,SIN3
CPL 1FH ;对于第一、三象限,直接求规一化的小数
SJMP SIN4
SIN3: MOV A,R4 ;对于第二、四象限,准备求其补数
INC A
MOV R4,A
JNZ SIN4
INC R3
SIN4: LCALL RLN ;规格化
SETB F0
LCALL AS1 ;求自变量归一化等效值
LCALL MOV0 ;回传
LCALL FPLN ;用多项式计算正弦值
DB 7DH,93H,28H;0.07185
DB 41H,0,0 ;0
DB 80H,0A4H,64H;-0.64215
DB 41H,0,0 ;0
DB 1,0C9H,2;1.5704
DB 41H,0,0 ;0
DB 40H ;结束
MOV A,@R0 ;结果的绝对值超过1.00吗?
JZ SIN5
JB ACC.6,SIN5
INC R0 ;绝对值按1.00封顶
MOV @R0,#80H
INC R0
MOV @R0,#0
DEC R0
DEC R0
MOV A,#1
SIN5: MOV C,1DH ;将数符拼入结果中
MOV ACC.7,C
MOV @R0,A
RET
(30) 标号: FATN 功能:浮点反正切函数
入口条件:操作数在[R0]中。
出口信息:结果仍在[R0]中。
影响资源:DPTR、PSW、A、B、R2~R7、位1CH~1FH 堆栈需求:7字节
FATN: MOV A,@R0
MOV C,ACC.7
MOV 1DH,C ;保存自变量数符
CLR ACC.7 ;自变量取绝对值
MOV @R0,A
CLR 1CH ;清求余运算标志
JB ACC.6,ATN1;自变量为纯小数否?
JZ ATN1
SETB 1CH ;置位求余运算标志
LCALL FRCP ;通过倒数运算,转换成纯小数
ATN1: LCALL FPLN ;通过多项式运算,计算反正切函数值
DB 0FCH,0E4H,91H;-0.055802
DB 7FH,8FH,37H;0.27922
DB 0FFH,0EDH,0E0H;-0.46460
DB 7BH,0E8H,77H;0.028377
DB 0,0FFH,68H;0.9977
DB 72H,85H,0ECH;3.1930×10-5
DB 40H ;结束
JNB 1CH,ATN2;需要求余运算否?
CPL 1FH ;准备运算标志
MOV C,1FH
MOV F0,C ;常数1.5708(Π/2)
MOV R5,#1
MOV R6,#0C9H
MOV R7,#10H
LCALL AS1 ;求余运算
LCALL MOV0 ;回传
ATN2: MOV A,@R0 ;拼入结果的数符
MOV C,1DH
MOV ACC.7,C
MOV @R0,A
RET
(31) 标号: RTOD 功能:浮点弧度数转换成浮点度数
入口条件:浮点弧度数在[R0]中。
出口信息:转换成的浮点度数仍在[R0]中。
影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
RTOD: MOV R5,#6 ;系数(180/Π)传送到第二工作区
MOV R6,#0E5H
MOV R7,#2FH
SJMP DR ;通过乘法进行转换
(32) 标号: DTOR 功能:浮点度数转换成浮点弧度数
入口条件:浮点度数在[R0]中。
出口信息:转换成的浮点弧度数仍在[R0]中。
影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
DTOR: MOV R5,#0FBH;系数(Π/180)传送到第二工作区
MOV R6,#8EH
MOV R7,#0FAH
DR: LCALL MVR0 ;将[R0]传送到第一工作区
CLR 1EH ;系数为正
LCALL MUL1 ;通过乘法进行转换
LJMP MOV0 ;结果传送到[R0]中
END |