微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > c51单片机浮点数及其汇编程序设计

c51单片机浮点数及其汇编程序设计

时间:11-22 来源:互联网 点击:

, #00H, FAB5

MOV R4, #41 ;结果为0,规格化

RET

FAB5: MOV A, R6

MOV C, 38H

MOV ACC.7, C

XCH A, R4

MOV R6, A

RET

FAB6: CJNE R2, #00H, FAB8

CJNE R3, #00H, FAB8

MOV A, R7

MOV R6, A

SJMP FAB2

FAB7: CPL F0

FAB8: CLR C

LCALL FSDT

SJMP FAB1

FAB9: MOV A, R3 ;尾数相减

CLR C

SUBB A, R5

MOV R3, A

MOV A, R2

SUBB A, R4

MOV R2, A

JNC FAB10

CLR A

CLR C

SUBB A, R3

MOV R3, A

CLR A

SUBB A, R2

MOV R2, A

CPL 38H

FAB10: SETB C

SJMP FAB3

3. 浮点数乘法运算子程序

浮点数相乘时,阶码直接相加即获得积的阶码,尾数相乘时,结果可能小于0.5,需进行左规格化处理。下面是三字节浮点数乘法运算子程序,具体功能为:

(Ro)指向的三字节浮点数×(R1)指向的三字节浮点数→R4(阶)R2R3(尾数)。

图4-15三字节浮点数乘法的程序框图。程序为:

FMUL: LCALL FMLD ;传送浮点数

MOV A, R6 ;求积的数符

XRL A, R7

MOV C, ACC.7

MOV 38H, C

LCALL DMUL ;调用双字节无符号数乘法子程序

MOV A, R7

MOV C, ACC.7

MOV F0, C

MOV A, @R0

ADD A, @R1

MOV R6, A

SETB C

LCALL FSDT ;进行规格化操作

图4-15 三字节浮点数乘法子程序

MOV A, R6

MOV C, 38H

MOV ACC.7, C ;置积的数符

MOV R4, A

RET

注:(1)FMLD为浮点数取数子程序,功能为:将(R0)指向的三字节浮点数送入R6(阶)R2R3(尾数)中,将(R1)指向的三字节浮点数送入R7(阶)R4R5(尾数)中。

(2)DMUL为双字节无符号数乘法子程序。

4.浮点数除法运算子程序

在进行除法运算时,被除数的尾数可能比除数的尾数大很多,使结果大于1。为避免这种情况,如果被除数尾数大于除数的尾数,先将被除数的尾数右移,使其小于除数的尾数。阶码也相应增加,保持其数值不变。下面是三字节浮点数除法运算程序,其功能为:(R0)指向的三字节浮点数除以(R1)指向的三字节浮点数→R4(阶)R2R3(尾数)中。

程序框图如图4-16所示。程序为:

Fdiv: LCALL FMLD

MOV A, R6

XRL A, R7 ;求商的数符

MOV C, ACC.7

MOV 38H, C

CLR A

MOV R6, A

MOV R7, A

CJNE R4, #00H, Fdiv1

CJNE R5, #00H, Fdiv1

SETB C

RET ;除数为0返回

Fdiv1: MOV A, R3 ;比较被除数与

SUBB A, R5 ;除数的尾数

MOV A, R2

SUBB A, R4

JC Fdiv2

CLR F0

CLR 39H

LCALL FDST

RRC A

MOV R7, A

CLR C

SJMP Fdiv1

Fdiv2: CLR A

XCH A, R6

PUSH ACC

LCALL Ddiv ;调用双字节除法程序

POP ACC

ADD A, @R0

CLR C

SUBB A, @R1

MOV C, 38H

MOV ACC.7, C

MOV R4, A

CLR C

RET

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top