ten.asm
来自「定点十进制数转为二进制浮点操作数 入口:定点十进制整数在 R1,R2,R3中」· 汇编 代码 · 共 121 行
ASM
121 行
;------------------------------------------------
;清单18 标号:DTOB1 功能:定点十进制数转为二进制浮点操作数
;入口:定点十进制整数在 R1,R2,R3中,其中R1为高字节
;[如1: R1=00H,R2=00H,R3=01H]
;定点十进制小数在 R4,R5,R6,R7中,其中R4为高位字
;[如0.1: R4=10H,R5=00H,R6=00H,R7=00H]
;数符为7BH位,0表正,1表负
;出口: R4,R5,R6,R7.其中R4为阶码,R5,R6,R7为尾数
;------------------------------------------------
DTOB1: ACALL LD1 ;定点十进制数变二进制浮点数,数符已装入7BH位,0表正,1表负
ACALL CONV2 ;整数部分十翻二
ACALL GET1 ;取出小数部分
ACALL LD1
ACALL SAV0
CALL CONV4 ;小数部分十翻二
ACALL GET1 ;取整数部分
MOV R0,#98H ;预置阶码
LP11: MOV A,R1
JB ACC.7,NX63 ;已规格化,转
ACALL SHIF
XCH A,R4
RLC A
XCH A,R4
ACALL LR0 ;否则,整数、小数部分整体左移一位
DEC R0 ;阶减1
CJNE R0,#60H,LP11
RET ;浮点数为0
NX63: CALL EX ;二进制浮点数转入R4~R7
MOV A,R0
JNB ACC.7,PP6
CALL INC3 ;截去部分四舍五入
CJNE R5,#0,PP6
INC R4 ;调整
MOV R5,#80H
PP6: JBC 7BH,PPX
ANL 0DH,#7FH ;置数符
PPX: RET
;------------------------------------------------
; 清单1_4 标号: SAV0 功能:第1操作数(浮点数)装入0CH~0FH中
;入口条件:
;出口信息: []中
;影响资源:
;------------------------------------------------
SAV0: MOV R4,08H ;第1操作数(浮点数)装入0CH~0FH中
SAVT: MOV R5,09H
MOV R6,0AH
MOV R7,0BH
RET
CONV4: MOV B,#20H ;定点小数十翻二
CONV41: CLR A ;(R4 R5 R6 R7)→R0 R1 R2 R3→R4 R5 R6 R7
MOV R0,A
MOV R1,A
MOV R2,A
MOV R3,A
CV4: MOV A,R7
ADD A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
ACALL LR0
XCH A,R0
RLC A
XCH A,R0
DJNZ B,CV4
AJMP SAV0 ;结果转入R4~R7
LD1: MOV 30H,R4 ;存浮点数
MOV 31H,R5
MOV 32H,R6
MOV 33H,R7
RET
GET1: MOV R0,30H ;取浮点数
MOV R1,31H
MOV R2,32H
MOV R3,33H
RET
SHIF: CLR C ;尾数算术左移1位子程序
H0: XCH A,R7 ;尾数带进位左移1位
RLC A
XCH A,R7
XCH A,R6
RLC A
XCH A,R6
XCH A,R5
RLC A
XCH A,R5
RET
LR0: XCH A,R3 ;尾数带进位位左移1位子程序
RLC A
XCH A,R3
XCH A,R2
RLC A
XCH A,R2
XCH A,R1
RLC A
XCH A,R1
RET
INC3: INC R7 ;尾数增1子程序
CJNE R7,#0,RET0
INC R6
CJNE R6,#0,RET0
INC R5
RET0: RET
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?