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 + -
显示快捷键?