C语言浮点数取整,c语言浮点型除法取整数

标号: FINT 功能:浮点取整函数

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

出口信息:结果仍在[R0]中。

影响资源:PSW、A、R2、R3、R4、位1FH 堆栈需求: 6字节

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

LCALL INT ;在工作寄存器中完成取整运算

LJMP MOV0 ;将结果传回到[R0]中

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 ;阶码小于16否?

JC INTD

RET ;阶码大于16,已经是整数

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;阶码达到16尾数完全为整数)否?

JNB F0,INTF ;舍去部分为零否?

JNB 1FH,INTF;操作数为正数否?

INC R4 ;对于带小数的负数,向下取整

MOV A,R4

JNZ INTF

INC R3

INTF: LJMP RLN ;将结果规格化

大小单双必赢技巧R2,#41H

INTC: RET

INTD: CLR F0 ;舍尾标志初始化

INTE: CLR C

LCALL RR1 ;右规一次

ORL C,F0 ;记忆舍尾情况

MOV F0,C

CJNE R2,#10H,INTE;阶码达到16尾数完全为整数)否?

JNB F0,INTF ;舍去部分为零否?

JNB 1FH,INTF;操作数为正数否?

INC R4 ;对于带小数的负数,向下取整

MOV A,R4

JNZ INTF

INC R3

INTF: LJMP RLN ;将结果规格化

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注