Board logo

标题: MCS-51浮点运算子程序及其使用说明(3) [打印本页]

作者: 苹果也疯狂    时间: 2015-3-15 22:15     标题: MCS-51浮点运算子程序及其使用说明(3)

(5) 标号: FDIV 功能:浮点数除法



入口条件:被除数在[R0]中,除数在[R1]中。

出口信息:OV=0时,商仍在[R0]中,OV=1时,溢出。

影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 5字节

FDIV: INC R0

MOV A,@R0

INC R0

ORL A,@R0

DEC R0

DEC R0

JNZ DIV1

MOV @R0,#41H;被除数为零,不必运算

CLR OV

RET

DIV1: INC R1

MOV A,@R1

INC R1

ORL A,@R1

DEC R1

DEC R1

JNZ DIV2

SETB OV ;除数为零,溢出

RET

DIV2: LCALL MVR0 ;将[R0]传送到第一工作区中

MOV A,@R0

XRL A,@R1 ;比较两个操作数的符号

RLC A

MOV 1FH,C ;保存结果的符号

LCALL MVR1 ;将[R1]传送到第二工作区中

LCALL DIV3 ;调用工作区浮点除法

LJMP MOV0 ;回传结果

DIV3: CLR C ;比较尾数的大小

MOV A,R4

SUBB A,R7

MOV A,R3

SUBB A,R6

JC DIV4

LCALL RR1 ;被除数右规一次

SJMP DIV3

DIV4: CLR A ;借用R0R1R2作工作寄存器

XCH A,R0 ;清零并保护之

PUSH ACC

CLR A

XCH A,R1

PUSH ACC

MOV A,R2

PUSH ACC

MOV B,#10H ;除法运算,R3R4/R6R7-→R0R1

DIV5: CLR C

MOV A,R1

RLC A

MOV R1,A

MOV A,R0

RLC A

MOV R0,A

MOV A,R4

RLC A

MOV R4,A

XCH A,R3

RLC A

XCH A,R3

MOV F0,C

CLR C

SUBB A,R7

MOV R2,A

MOV A,R3

SUBB A,R6

ANL C,/F0

JC DIV6

MOV R3,A

MOV A,R2

MOV R4,A

INC R1

DIV6: DJNZ B,DIV5

MOV A,R6 ;四舍五入

CLR C

RRC A

SUBB A,R3

CLR A

ADDC A,R1 ;将结果存回R3R4

MOV R4,A

CLR A

ADDC A,R0

MOV R3,A

POP ACC ;恢复R0R1R2

MOV R2,A

POP ACC

MOV R1,A

POP ACC

MOV R0,A

MOV A,R2 ;计算商的阶码

CLR C

SUBB A,R5

LCALL MD ;阶码检验

LJMP RLN ;规格化



(6) 标号: 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




(7) 标号: 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



(8) 标号: 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




(9) 标号: FPUS 功能:浮点数压栈



入口条件:操作数在[R0]中。

出口信息:操作数压入栈顶。

影响资源:A、R2、R3 堆栈需求: 5字节

FPUS: POP ACC ;将返回地址保存在R2R3中

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 ;返回主程序



(10) 标号: FPOP 功能:浮点数出栈



入口条件:操作数处于栈顶。

出口信息:操作数弹至[R0]中。

影响资源:A、R2、R3 堆栈需求: 2字节

FPOP: POP ACC ;将返回地址保存在R2R3中

MOV R2,A

POP ACC

MOV R3,A

INC R0

INC R0

POP ACC ;将操作数弹出堆栈,传送到[R0]中

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 ;返回主程序




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0