📄 math.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 + -