51单片机实现的简易计算器(8)

2018-12-23 23:43

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

;(11) 标号: FCMP 功能:浮点数代数值比较(不影响待比较操作数)

;入口条件:待比较操作数分别在[R0]和[R1]中。

;出口信息:若CY=1,则[R0] < [R1],若CY=0且A=0则 [R0] = [R1],否则[R0] > [R1]。 ;影响资源:A、B、PSW 堆栈需求: 2字节

FCMP: MOV A,@R0 ; 数符比较 XRL A,@R1 JNB ACC.7,CMP2

MOV A,@R0 ; 两数异号,以[R0]数符为准 RLC A MOV A,#0FFH RET

CMP2: MOV A,@R1 ; 两数同号,准备比较阶码 MOV C,ACC.6 MOV ACC.7,C MOV B,A MOV A,@R0 MOV C,ACC.7

MOV F0,C ; 保存[R0]的数符 MOV C,ACC.6 MOV ACC.7,C CLR C ; 比较阶码 SUBB A,B JZ CMP6

RLC A ; 取阶码之差的符号 JNB F0,CMP5

CPL C ; [R0]为负时,结果取反 CMP5: MOV A,#0FFH ; 两数不相等 RET

CMP6: INC R0 ; 阶码相同时,准备比较尾数 INC R0 INC R1 INC R1 CLR C MOV A,@R0 SUBB A,@R1

MOV B,A ; 保存部分差 DEC R0 DEC R1 MOV A,@R0 SUBB A,@R1 DEC R0 DEC R1

ORL A,B ; 生成是否相等信息 JZ CMP7 JNB F0,CMP7

CPL C ; [R0]为负时,结果取反 CMP7: RET


51单片机实现的简易计算器(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小学语文二年级上册(人教版)期中测试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: