⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 math.asm

📁 在80C196单片机下的数学运算子程序
💻 ASM
字号:
;************************************************
;disprogramer.asm
;程序模快功能介绍:数学处理程序
;************************************************
;HEXW_TO_DEC:(字)    十六进制(4Byte)转换成十进制,
;                    输入参数:DX. 输出参数:EXL(低位),EXH,FXL,FXH,GXL(高位)

;HEXB_TO_DEC:(字节)  十六进制(2Byte)转换成十进制,
;                    输入参数:DXL. 输出参数:EXL(低位),EXH,FXL(高位)

;DEC_TO_HEXW:(字)    十进制转换成十六进制
                     ;输入参数:EXL(低位),EXH,FXL,FXH,GXL(高位),输出:DX
                     
;SQRT:               开根号 SQRT (AX,BX) RESULT IN CX                     

;UMUL                乘法运算 X1(32BIT) * X2(16BIT)--Y(64BIT)
                     ;X1-- AX,20H--23H
                     ;X2-- CX,24H
                     ;Y--- AX,20H--27H AX,BX,CX,DX
                     
;UDIV                除法运算 64BIT / 32BIT---->32BIT
                     ;64BIT IN AX(27H--20H)	32BIT IN EX(2BH--28H)
                     ;RESULT IN AX(23H--20H) , YUSHU IN CX(27H--24H)
                     
;taxisdata           排序并求平均值
                     ;INPUT:AX,BX,CX,DX,EX OUTPUT:AX
                     
;************************************************
;-------------------HEX to DEC-------------------
;十六进制(4Byte)转换成十进制:
;输入参数:DX. 输出参数:EXL(低位),EXH,FXL,FXH,GXL(高位)
HEXW_TO_DEC:
        LDB GXL,#00H
        LD EX,#0000H
        LD FX,#0000H          ;清零

HEX4_TO_DEC1:
        INCB GXL
        SUB DX,#2710H         ;10000
        JC HEX4_TO_DEC1
        DECB GXL
        ADD DX,#2710H

HEX4_TO_DEC2:
        INCB FXH
        SUB DX,#03E8H         ;1000
        JC HEX4_TO_DEC2
        DECB FXH
        ADD DX,#03E8H

HEX4_TO_DEC3:
        INCB FXL
        SUB DX,#0064H         ;100
        JC HEX4_TO_DEC3
        DECB FXL
        ADD DX,#0064H

HEX4_TO_DEC4:
        INCB EXH
        SUB DX,#0AH           ;10
        JC HEX4_TO_DEC4
        DECB EXH
        ADD DX,#0AH

        LDB EXL,DXL

        CMPB EXL,#00H
        JNE HEXW_TO_DEC5
        LDB EXL,#0AH
HEXW_TO_DEC5:
        CMPB EXH,#00H
        JNE HEXW_TO_DEC6
        LDB EXH,#0AH
HEXW_TO_DEC6:
        CMPB FXL,#00H
        JNE HEXW_TO_DEC7
        LDB FXL,#0AH
HEXW_TO_DEC7:
        CMPB FXH,#00H
        JNE HEXW_TO_DEC8
        LDB FXH,#0AH
HEXW_TO_DEC8:
        CMPB GXL,#00H
        JNE HEXW_TO_DEC9
        LDB GXL,#0AH
HEXW_TO_DEC9:

        RET
;-------------------HEX to DEC-------------------
;十六进制(2Byte)转换成十进制:
;输入参数:DXL. 输出参数:EXL(低位),EXH,FXL(高位)
HEXB_TO_DEC:
        LDB FXL,#00H
        LDB EXH,#00H
        LDB EXL,#00H

HEXB_TO_DEC1:
        INCB FXL
        SUBB DXL,#64H         ;100
        JC HEXB_TO_DEC1
        DECB FXL
        ADDB DX,#64H

HEXB_TO_DEC2:
        INCB EXH
        SUBB DXL,#0AH           ;10
        JC HEXB_TO_DEC2
        DECB EXH
        ADDB DX,#0AH

        LDB EXL,DXL

        CMPB EXL,#00H
        JNE HEXB_TO_DEC3
        LDB EXL,#0AH
HEXB_TO_DEC3:
        CMPB EXH,#00H
        JNE HEXB_TO_DEC4
        LDB EXH,#0AH
HEXB_TO_DEC4:
        CMPB FXL,#00H
        JNE HEXB_TO_DEC5
        LDB FXL,#0AH
HEXB_TO_DEC5:
        RET
;-------------------DEC to HEX-------------------
;十进制(4Byte)转换成十六进制:
;输入参数:EXL(低位),EXH,FXL,FXH,GXL(高位) 输出参数:DX.
DEC_TO_HEXW1:
        CMPB EXL,#0AH
        JNE DEC_TO_HEXW1_1
        LDB EXL,#00H
DEC_TO_HEXW1_1:
        CMPB EXH,#0AH
        JNE DEC_TO_HEXW1_2
        LDB EXH,#00H
DEC_TO_HEXW1_2:
        CMPB FXL,#0AH
        JNE DEC_TO_HEXW1_3
        LDB FXL,#00H
DEC_TO_HEXW1_3:
        CMPB FXH,#0AH
        JNE DEC_TO_HEXW1_4
        LDB FXH,#00H
DEC_TO_HEXW1_4:
        CMPB GXL,#0AH
        JNE DEC_TO_HEXW
        LDB GXL,#00H

DEC_TO_HEXW:
        LD DX,#0
        LDB DXL,EXL        ;个位直接赋值,十位*0AH,百位*64H.........

        LD AX,#0
        LDB AXL,EXH
        LDB BXH,#10        ;*10
        MULB AX,BXH
        ADD DX,AX          ;保存十位数据

        LD AX,#0
        LDB AXL,FXL
        LDB BXH,#100
        MULB AX,BXH
        ADD DX,AX          ;*100

        LD EX,#1000
        LDB FXL,FXH
        LDB FXH,#0
        MUL AX,EX,FX
        ADD DX,AX          ;*1000

        LD EX,#10000
        LD FX,#0
        LDB FXL,GXL
        MUL AX,EX,FX
        ADD DX,AX          ;*10000

        RET
;**********************************************************
;SQRT (AX,BX) RESULT IN CX
;USE REG EX,FX,DX
;**********************************************************
SQRT:	CMP	BX,#0FFFEH
	JH	SQ0
        LD	EX,AX
	LD	FX,BX
	NORML	AX,DXL
	JNE	SQ1
	CLR	CX
	SJMP	SQ6
SQ0:	LD	CX,#0FFFFH
	SJMP	SQ6
SQ1:	LDB	DXH,#32
	SUBB	DXH,DXL
	SHRB	DXH,#01H
	LD	CX,#0001H
	CMPB	DXH,#16
	JNE	SQ2
	LD	CX,#0FFFFH
	SJMP	SQ3
SQ2:	SHL	CX,DXH
SQ3:	LD	AX,EX
	LD	BX,FX
	DIVU	AX,CX
	CLR	BX
	ADD	AX,CX
	ADDC	BX,ZERO
	DIVU	AX,#02H
	SUB	BX,AX,CX
	JC	SQ4
	SUB	BX,CX,AX
SQ4:	CMP	BX,#0002H
	JNH	SQ5
	LD	CX,AX
	SJMP	SQ3
SQ5:	LD	CX,AX
SQ6:	RET
;-------------------------------------------
;UMUL X1(32BIT) * X2(16BIT)--Y(64BIT)
;X1-- AX,20H--23H
;X2-- CX,24H
;Y--- AX,20H--27H AX,BX,CX,DX
;USE REG AX--HX( 20H---2FH)
;-------------------------------------------
UMUL:	MULU	EX,AX,CX
	MULU	GX,BX,CX
	LD	AX,EX
	ADD	BX,FX,GX
	ADDC	HX,ZERO
	LD	CX,HX
	CLR	DX
	RET
;-------------------------------------------
;UDIV 64BIT / 32BIT---->32BIT
;64BIT IN AX(27H--20H)	32BIT IN EX(2BH--28H)
;RESULT IN AX(23H--20H) , YUSHU IN CX(27H--24H)
;USED 20H--2FH
;-------------------------------------------
UDIV:	LDB	2EH,#32
UDIV0:	SHLL	20H,#1
	LDB	2FH,#1
	JC	UDIV1
	CLRB	2FH
UDIV1:	SHLL	24H,#1
	JC	UDIV4
	ORB	24H,2FH
	SUB	2CH,24H,28H
	LD	2CH,26H
	SUBC	2CH,2AH
	JNC	UDIV3
UDIV2:	SUB	24H,28H
	SUBC	26H,2AH
	INC	20H
UDIV3:	DJNZ	2EH,UDIV0
UDIV5:	RET
UDIV4:	ORB	24H,2FH
	SJMP	UDIV2
;-------------------------------------------
;--------------------------------------
;排序并求平均值INPUT:AX,BX,CX,DX,EX OUTPUT:AX
taxisdata:
        CMP EX,DX
        JH taxisdata1
        XCH EX,DX
taxisdata1:
        CMP EX,CX
        JH taxisdata2
        XCH EX,CX
taxisdata2:
        CMP EX,BX
        JH taxisdata3
        XCH EX,BX
taxisdata3:
        CMP EX,AX
        JH taxisdata4
        XCH EX,AX
taxisdata4:
        ;HI COMP END
        CMP AX,BX
        JNH taxisdata5
        XCH AX,BX
taxisdata5:
        CMP AX,CX
        JNH taxisdata6
        XCH AX,CX
taxisdata6:
        CMP AX,DX
        JNH taxisdata7
        XCH AX,DX
taxisdata7:
        ;LO COMP END
        ADD AX,BX,CX
        ADD AX,DX
        LD BX,#0
        LD CX,#03H
        DIVU AX,CX                      ;AX为3次测试的平均值
        RET
;---------------------------------------------------------------
        ;END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -