📄
字号:
CLR A
ADDC A,R3
MOV R3,A
JNC BTF4
MOV R3,#80H
INC R2
BTF4: MOV DPTR,#BTFL
MOV A,@R0
ADD A,#19
MOV B,#3
MUL AB
ADD A,DPL
MOV DPL,A
JNC BTF5
INC DPH
BTF5: CLR A
MOVC A,@A+DPTR
MOV C,ACC.6
MOV ACC.7,C
MOV R5,A
MOV A,#1
MOVC A,@A+DPTR
MOV R6,A
MOV A,#2
MOVC A,@A+DPTR
MOV R7,A
LCALL MUL1
MOV C,1DH
MOV 1FH,C
ACALL MOV0
RET
;------------------------------------------------;
;****** [格式化浮点数转换成浮点BCD码] FTOB ******;
;入口条件: 格式化浮点操作数在[R0]中。
;出口信息: 转换成的浮点BCD码仍在[R0]中。
;影响资源: PSW、A、B、R2~R7、位1DH~1FH 堆栈需求:6字节
;调用子程序: 3个
FTOB: INC R0
MOV A,@R0
INC R0
ORL A,@R0
DEC R0
DEC R0
JNZ FTB0
MOV @R0,#41H
RET
FTB0: MOV A,@R0
MOV C,ACC.7
MOV 1DH,C
CLR ACC.7
MOV @R0,A
LCALL MVR0
MOV DPTR,#BFL0
MOV B,#0
MOV A,R2
JNB ACC.7,FTB1
MOV DPTR,#BTFL
MOV B,#0EDH
ADD A,#16
JNC FTB1
MOV DPTR,#BFLN
MOV B,#0FAH
FTB1: CLR A
MOVC A,@A+DPTR
MOV C,ACC.6
MOV ACC.7,C
MOV R5,A
MOV A,#1
MOVC A,@A+DPTR
MOV R6,A
MOV A,#2
MOVC A,@A+DPTR
MOV R7,A
MOV A,R5
CLR C
SUBB A,R2
JB ACC.7,FTB2
JNZ FTB3
MOV A,R6
CLR C
SUBB A,R3
JC FTB2
JNZ FTB3
MOV A,R7
CLR C
SUBB A,R4
JC FTB2
JNZ FTB3
MOV R5,B
INC R5
MOV R6,#10H
MOV R7,#0
SJMP FTB6
FTB2: INC DPTR
INC DPTR
INC DPTR
INC B
SJMP FTB1
FTB3: PUSH B
LCALL DIV3
FTB4: MOV A,R2
JZ FTB5
CLR C
LCALL RR1
SJMP FTB4
FTB5: POP ACC
MOV R5,A
LCALL HB2
MOV R6,A
LCALL HB2
MOV R7,A
MOV A,R3
RLC A
CLR A
ADDC A,R7
DA A
MOV R7,A
CLR A
ADDC A,R6
DA A
MOV R6,A
JNC FTB6
MOV R6,#10H
INC R5
FTB6: INC R0
INC R0
MOV A,R7
MOV @R0,A
DEC R0
MOV A,R6
MOV @R0,A
DEC R0
MOV A,R5
MOV C,1DH
MOV ACC.7,C
MOV @R0,A
RET
HB2: MOV A,R4
MOV B,#100
MUL AB
MOV R4,A
MOV A,B
XCH A,R3
MOV B,#100
MUL AB
ADD A,R3
MOV R3,A
JNC HB21
INC B
HB21: MOV A,B
MOV B,#10
DIV AB
SWAP A
ORL A,B
RET
BTFL: DB 41H,0ECH,1EH ;1.0000E-19
DB 45H,93H,93H ;1.0000E-18
DB 48H,0B8H,78H ;1.0000E-17
DB 4BH,0E6H,96H ;1.0000E-16
DB 4FH,90H,1DH ;1.0000E-15
DB 52H,0B4H,25H ;1.0000E-14
DB 55H,0E1H,2EH ;1.0000E-13
DB 59H,8CH,0BDH ;1.0000E-12
DB 5CH,0AFH,0ECH ;1.0000E-11
DB 5FH,0DBH,0E7H ;1.0000E-10
DB 63H,89H,70H ;1.0000E-9
DB 66H,0ABH,0CCH ;1.0000E-8
DB 69H,0D6H,0C0H ;1.0000E-7
BFLN: DB 6DH,86H,38H ;1.0000E-6
DB 70H,0A7H,0C6H ;1.0000E-5
DB 73H,0D1H,0B7H ;1.0000E-4
DB 77H,83H,12H ;1.0000E-3
DB 7AH,0A3H,0D7H ;1.0000E-2
DB 7DH,0CCH,0CDH ;1.0000E-1
BFL0: DB 1,80H,00H ;1.0000
DB 4,0A0H,00H ;1.0000E1
DB 7,0C8H,00H ;1.0000E2
DB 0AH,0FAH,00H ;1.0000E3
DB 0EH,9CH,40H ;1.0000E4
DB 11H,0C3H,50H ;1.0000E5
DB 14H,0F4H,24H ;1.0000E6
DB 18H,98H,97H ;1.0000E7
DB 1BH,0BEH,0BCH ;1.0000E8
DB 1EH,0EEH,6BH ;1.0000E9
DB 22H,95H,03H ;1.0000E10
DB 25H,0BAH,44H ;1.0000E11
DB 28H,0E8H,0D5H ;1.0000E12
DB 2CH,91H,85H ;1.0000E13
DB 2FH,0B5H,0E6H ;1.0000E14
DB 32H,0E3H,60H ;1.0000E15
DB 36H,8EH,1CH ;1.0000E16
DB 39H,31H,0A3H ;1.0000E17
DB 3CH,0DEH,0BH ;1.0000E18
DB 40H,8AH,0C7H ;1.0000E19
; 以上是中型浮点库 可以单独使用 ;
;------------------------------------------------;
; 以下是大型浮点库 可以单独使用 ;
;****** [浮点数清零] FCLR ***********************;
;入口条件: 操作数在[R0]中。
;出口信息: 操作数被清零。
;影响资源: A 堆栈需求: 2字节
;调用子程序: 无
FCLR: INC R0
INC R0
CLR A
MOV @R0,A
DEC R0
MOV @R0,A
DEC R0
MOV @R0,#41H
RET
;------------------------------------------------;
;****** [浮点数判零] FZER ***********************;
;入口条件: 操作数在[R0]中。
;出口信息: 若累加器A为零,则操作数[R0]为零,否则不为零。
;影响资源: A 堆栈需求: 2字节
;调用子程序: 无
FZER: INC R0
INC R0
MOV A,@R0
DEC R0
ORL A,@R0
DEC R0
JNZ ZERO
MOV @R0,#41H
ZERO: RET
;------------------------------------------------;
;****** [浮点数传送] FMOV ***********************;
;入口条件: 源操作数在[R1]中,目标地址为[R0]。
;出口信息: [R0]=[R1],[R1]不变。
;影响资源: A 堆栈需求: 2字节
;调用子程序: 无
FMOV: INC R0
INC R0
INC R1
INC R1
MOV A,@R1
MOV @R0,A
DEC R0
DEC R1
MOV A,@R1
MOV @R0,A
DEC R0
DEC R1
MOV A,@R1
MOV @R0,A
RET
;------------------------------------------------;
;****** [浮点数压栈] FPUS ***********************;
;入口条件: 操作数在[R0]中。
;出口信息: 操作数压入栈顶。
;影响资源: A、R2、R3 堆栈需求: 5字节
;调用子程序: 无
FPUS: POP ACC
MOV R2,A
POP ACC
MOV R3,A
MOV A,@R0
PUSH ACC
INC R0
MOV A,@R0
PUSH ACC
INC R0
MOV A,@R0
PUSH ACC
DEC R0
DEC R0
MOV A,R3
PUSH ACC
MOV A,R2
PUSH ACC
RET
;------------------------------------------------;
;****** [浮点数出栈] FPOP ***********************;
;入口条件: 操作数处于栈顶。
;出口信息: 操作数弹至[R0]中。
;影响资源: A、R2、R3 堆栈需求: 2字节
;调用子程序: 无
FPOP: POP ACC
MOV R2,A
POP ACC
MOV R3,A
INC R0
INC R0
POP ACC
MOV @R0,A
DEC R0
POP ACC
MOV @R0,A
DEC R0
POP ACC
MOV @R0,A
MOV A,R3
PUSH ACC
MOV A,R2
PUSH ACC
RET
;------------------------------------------------;
;****** [浮点数符号函数] FSGN *******************;
;入口条件: 操作数在[R0]中。
;出口信息: 累加器 A=1 时为正数,A=0FFH时为负数,A=0 时为零。
;影响资源: PSW、A 堆栈需求: 2字节
;调用子程序: 无
FSGN: INC R0
MOV A,@R0
INC R0
ORL A,@R0
DEC R0
DEC R0
JNZ SGN
RET
SGN: MOV A,@R0
RLC A
MOV A,#1
JNC SGN1
MOV A,#0FFH
SGN1: RET
;------------------------------------------------;
;****** [浮点取整函数] FINT *********************;
;入口条件: 操作数在[R0]中。
;出口信息: 结果仍在[R0]中。
;影响资源: PSW、A、R2、R3、R4、位1FH 堆栈需求: 6字节
;调用子程序: 3个
FINT: LCALL MVR0
LCALL INT
LCALL MOV0
RET
INT: MOV A,R3
ORL A,R4
JNZ INTA
CLR 1FH
MOV R2,#41H
RET
INTA: MOV A,R2
JZ INTB
JB ACC.7,INTB
CLR C
SUBB A,#10H
JC INTD
RET
INTB: CLR A
MOV R4,A
MOV C,1FH
RRC A
MOV R3,A
RL A
MOV R2,A
JNZ INTC
MOV R2,#41H
INTC: RET
INTD: CLR F0
INTE: CLR C
LCALL RR1
ORL C,F0
MOV F0,C
CJNE R2,#10H,INTE
JNB F0,INTF
JNB 1FH,INTF
INC R4
MOV A,R4
JNZ INTF
INC R3
INTF: ACALL RLN
RET
;------------------------------------------------;
;****** [浮点数多项式计算] FPLN *****************;
;入口条件: 自变量在[R0]中,多项式系数在调用指令之后,以40H结束。
;出口信息: OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源: DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 4字节
;调用子程序: 2个
FPLN: POP DPH
POP DPL
XCH A,R0
XCH A,R1
XCH A,R0
CLR A
MOV R2,A
MOV R3,A
MOV R4,A
CLR 1FH
PLN1: CLR A
MOVC A,@A+DPTR
MOV C,ACC.7
MOV 1EH,C
MOV C,ACC.6
MOV ACC.7,C
MOV R5,A
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R6,A
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R7,A
INC DPTR
MOV C,1EH
RRC A
XRL A,23H
RLC A
MOV F0,C
LCALL AS1
CLR A
MOVC A,@A+DPTR
CJNE A,#40H,PLN2
XCH A,R0
XCH A,R1
XCH A,R0
LCALL MOV0
CLR A
INC DPTR
JMP @A+DPTR
PLN2: MOV A,@R1
XRL A,23H
RLC A
MOV 1FH,C
LCALL MUL0
AJMP PLN1
;------------------------------------------------;
;****** [以10为底的浮点对数函数] FLOG ***********;
;入口条件: 操作数在[R0]中。
;出口信息: OV=0时,结果仍在[R0]中,OV=1时,负数或零求对数出错。
;影响资源: DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:9字节
;调用子程序: 3个
FLOG: LCALL FLN
JNB OV,LOG
RET
LOG: MOV R5,#0FFH
MOV R6,#0DEH
MOV R7,#5CH
LCALL MUL1
LCALL MOV0
RET
;------------------------------------------------;
;****** [以e为底的浮点对数函数] FLN *************;
;入口条件: 操作数在[R0]中。
;出口信息: OV=0时,结果仍在[R0]中,OV=1时,负数或零求对数出错。
;影响资源: DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 7字节
;调用子程序:
FLN: LCALL MVR0
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
DB 0FEH,85H,13H
DB 7FH,91H,51H
DB 0FFH,0FAH,0BAH
DB 0,0FFH,0CAH
DB 70H,0C0H,0
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
MOV B,#72H
MUL AB
XCH A,R2
MOV R7,B
MOV B,#0B1H
MUL AB
ADD A,R7
MOV R7,A
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
LCALL ASN
RET
;------------------------------------------------;
;****** [以10为底的浮点指数函数] FE10 ***********;
;入口条件: 操作数在[R0]中。
;出口信息: OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源: DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
;调用子程序: 1个
FE10: MOV R5,#2
MOV R6,#0D4H
MOV R7,#9AH
ACALL EXP
RET
;------------------------------------------------;
;****** [以e为底的浮点指数函数] FEXP ************;
;入口条件: 操作数在[R0]中。
;出口信息: OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源: DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
;调用子程序: 3个
FEXP: MOV R5,#1
MOV R6,#0B8H
MOV R7,#0ABH
EXP: CLR 1EH
LCALL MVR0
LCALL MUL1
ACALL E20
RET
;------------------------------------------------;
;****** [以2为底的浮点指数函数] FE2 *************;
;入口条件: 操作数在[R0]中。
;出口信息: OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源: DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
;调用子程序: 7 个
FE2: LCALL MVR0
E20: MOV A,R3
ORL A,R4
JZ EXP1
MOV A,R2
JB ACC.7,EXP2
SETB C
SUBB A,#6
JC EXP2
JB 1FH,EXP0
MOV @R0,#3FH
INC R0
MOV @R0,#0FFH
INC R0
MOV @R0,#0FFH
DEC R0
DEC R0
SETB OV
RET
EXP0: MOV @R0,#41H
CLR A
INC R0
MOV @R0,A
INC R0
MOV @R0,A
DEC R0
DEC R0
CLR OV
RET
EXP1: MOV @R0,#1
INC R0
MOV @R0,#80H
INC R0
MOV @R0,#0
DEC R0
DEC R0
CLR OV
RET
EXP2: MOV A,R2
MOV R5,A
MOV A,R3
MOV R6,A
MOV A,R4
MOV R7,A
MOV C,1FH
MOV 1EH,C
LCALL INT
MOV A,R3
JZ EXP4
EXP3: CLR C
RRC A
INC R2
CJNE R2,#8,EXP3
EXP4: MOV R3,A
JNB 1FH,EXP5
CPL A
INC A
EXP5: PUSH ACC
LCALL RLN
CPL 1FH
SETB F0
LCALL AS1
LCALL MOV0
LCALL FPLN
DB 77H,0B1H,0C9H
DB 7AH,0A1H,68H
DB 7CH,0E3H,4FH
DB 7EH,0F5H,0E7H
DB 0,0B1H,72H
DB 1,80H,0
DB 40H
POP ACC
ADD A,R2
MOV R2,A
CLR 1FH
ACALL MOV0
RET
;------------------------------------------------;
;****** [浮点余弦函数] FCOS *********************;
;入口条件: 操作数在[R0]中。
;出口信息: 结果仍在[R0]中。
;影响资源: DPTR、PSW、A、B、R2~R7、位1DH~1FH 堆栈需求: 6字节
;调用子程序: 5个
FCOS: LCALL FABS
MOV R5,#1
MOV R6,#0C9H
MOV R7,#10H
CLR 1EH
LCALL MVR0
CLR F0
LCALL AS1
LCALL MOV0
ACALL FSIN
RET
;------------------------------------------------;
;****** [浮点正弦函数] FSIN *********************;
;入口条件: 操作数在[R0]中。
;出口信息: 结果仍在[R0]中。
;影响资源: DPTR、PSW、A、B、R2~R7、位1DH~1FH 堆栈需求: 6字节
;调用子程序: 7个
FSIN: MOV A,@R0
MOV C,ACC.7
MOV 1DH,C
CLR ACC.7
MOV @R0,A
LCALL MVR0
MOV R5,#0
MOV R6,#0A2H
MOV R7,#0FAH
CLR 1EH
LCALL MUL1
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
DB 41H,0,0
DB 80H,0A4H,64H
DB 41H,0,0
DB 1,0C9H,2
DB 41H,0,0
DB 40H
MOV A,@R0
JZ SIN5
JB ACC.6,SIN5
INC R0
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
;------------------------------------------------;
;****** [浮点反正切函数] FATN *******************;
;入口条件: 操作数在[R0]中。
;出口信息: 结果仍在[R0]中。
;影响资源: DPTR、PSW、A、B、R2~R7、位1CH~1FH 堆栈需求:7字节
;调用子程序: 4个
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
DB 7FH,8FH,37H
DB 0FFH,0EDH,0E0H
DB 7BH,0E8H,77H
DB 0,0FFH,68H
DB 72H,85H,0ECH
DB 40H
JNB 1CH,ATN2
CPL 1FH
MOV C,1FH
MOV F0,C
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
;------------------------------------------------;
;****** [浮点弧度数转换成浮点度数] RTOD *********;
;入口条件: 浮点弧度数在[R0]中。
;出口信息: 转换成的浮点度数仍在[R0]中。
;影响资源: PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
;调用子程序: 1个
RTOD: MOV R5,#6
MOV R6,#0E5H
MOV R7,#2FH
ACALL DR
RET
;------------------------------------------------;
;****** [浮点度数转换成浮点弧度数] DTOR *********;
;入口条件: 浮点度数在[R0]中。
;出口信息: 转换成的浮点弧度数仍在[R0]中。
;影响资源: PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
;调用子程序: 3个
DTOR: MOV R5,#0FBH
MOV R6,#8EH
MOV R7,#0FAH
DR: LCALL MVR0
CLR 1EH
LCALL MUL1
LCALL MOV0
RET
;------------------------------------------------;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -