📄 ¿
字号:
;------------------------------------------------;
;****** [单字节十六进制整数转换成单字节BCD码整数] HBCD ;
;入口条件: 待转换的单字节十六进制整数在累加器A中。
;出口信息: 转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
;影响资源: PSW、A、B、R3 堆栈需求: 2字节
;调用子程序: 无
HBCD: MOV B,#100
DIV AB
MOV R3,A
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
;------------------------------------------------;
;****** [双字节十六进制整数转换成双字节BCD整数] HB2 ;
;入口条件: 待转换的双字节十六进制整数在R6、R7中。
;出口信息: 转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源: PSW、A、R2~R7 堆栈需求: 2字节
;调用子程序: 无
HB2: CLR A
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H
HB3: MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC 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
MOV A,R3
ADDC A,R3
MOV R3,A
DJNZ R2,HB3
RET
;------------------------------------------------;
;****** [单字节十六进制小数转换成单字节BCD码小数] HBD ;
;入口条件: 待转换的单字节十六进制小数在累加器A中。
;出口信息: CY=0时转换后的BCD码小数仍在A中。CY=1时原小数接近整数1。
;影响资源: PSW、A、B 堆栈需求: 2字节
;调用子程序: 无
HBD: MOV B,#100
MUL AB
RLC A
CLR A
ADDC A,B
MOV B,#10
DIV AB
SWAP A
ADD A,B
DA A
RET
;------------------------------------------------;
;****** [双字节十六进制小数转换成双字节BCD码小数] HBD2 ;
;入口条件: 待转换的双字节十六进制小数在R2、R3中。
;出口信息: 转换后的双字节BCD码小数仍在R2、R3中。
;影响资源: PSW、A、B、R2、R3、R4、R5 堆栈需求: 6字节
;调用子程序: 无
HBD2: MOV R4,#4
HBD3: MOV A,R3
MOV B,#10
MUL AB
MOV R3,A
MOV R5,B
MOV A,R2
MOV B,#10
MUL AB
ADD A,R5
MOV R2,A
CLR A
ADDC A,B
PUSH ACC
DJNZ R4,HBD3
POP ACC
MOV R3,A
POP ACC
SWAP A
ORL A,R3
MOV R3,A
POP ACC
MOV R2,A
POP ACC
SWAP A
ORL A,R2
MOV R2,A
RET
;------------------------------------------------;
;****** [单字节BCD码整数转换成单字节十六进制整数] BCDH ;
;入口条件: 待转换的单字节BCD码整数在累加器A中。
;出口信息: 转换后的单字节十六进制整数仍在累加器A中。
;影响资源: PSW、A、B、R4 堆栈需求: 2字节
;调用子程序: 无
BCDH: MOV B,#10H
DIV AB
MOV R4,B
MOV B,#10
MUL AB
ADD A,R4
RET
;------------------------------------------------;
;****** [双字节BCD码整数转换成双字节十六进制整数] BH2 ;
;入口条件: 待转换的双字节BCD码整数在R2、R3中。
;出口信息: 转换后的双字节十六进制整数仍在R2、R3中。
;影响资源: PSW、A、B、R2、R3、R4 堆栈需求: 4字节
;调用子程序: 1个 BCDH
BH2: MOV A,R3
LCALL BCDH
MOV R3,A
MOV A,R2
LCALL BCDH
MOV B,#100
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
;------------------------------------------------;
;****** [单字节BCD码小数转换成单字节十六进制小数] BHD ;
;入口条件: 待转换的单字节BCD码数在累加器A中。
;出口信息: 转换后的单字节十六进制小数仍在累加器A中。
;影响资源: PSW、A、R2、R3 堆栈需求: 2字节
;调用子程序: 无
BHD: MOV R2,#8
BHD0: ADD A,ACC
DA A
XCH A,R3
RLC A
XCH A,R3
DJNZ R2,BHD0
ADD A,#0B0H
JNC BHD1
INC R3
BHD1: MOV A,R3
RET
;------------------------------------------------;
;****** [双字节BCD码小数转换成双字节十六进制小数] BHD2 ;
;入口条件: 待转换的双字节BCD码小数在R4、R5中。
;出口信息: 转换后的双字节十六进制小数在R2、R3中。*
;影响资源: PSW、A、R2~R6 堆栈需求: 2字节
;调用子程序: 无
BHD2: MOV R6,#10H
BHD3: MOV A,R5
ADD A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
DJNZ R6,BHD3
MOV A,R4
ADD A,#0B0H
JNC BHD4
INC R3
MOV A,R3
JNZ BHD4
INC R2
BHD4: RET
;------------------------------------------------;
;****** [求单字节十六进制无符号数据块的极值] MM *;
;入口条件: 数据块的首址在DPTR中,数据个数在R7中。
;出口信息: 最大值在R6中,地址在R2R3中;最小值在R7中,地址在R4R5中。
;影响资源: PSW、A、B、R1~R7 堆栈需求: 4字节
;调用子程序: 无
MM: MOV B,R7
MOVX A,@DPTR
MOV R6,A
MOV R7,A
MOV A,DPL
MOV R3,A
MOV R5,A
MOV A,DPH
MOV R2,A
MOV R4,A
MOV A,B
DEC A
JZ MME
MOV R1,A
PUSH DPL
PUSH DPH
MM1: INC DPTR
MOVX A,@DPTR
MOV B,A
SETB C
SUBB A,R6
JC MM2
MOV R6,B
MOV R2,DPH
MOV R3,DPL
AJMP MM3
MM2: MOV A,B
CLR C
SUBB A,R7
JNC MM3
MOV R7,B
MOV R4,DPH
MOV R5,DPL
MM3: DJNZ R1,MM1
POP DPH
POP DPL
MME: RET
;------------------------------------------------;
;****** [求单字节十六进制有符号数据块的极值] MMS ;
;入口条件: 数据块的首址在DPTR中,数据个数在R7中。
;出口信息: 最大值在R6中, 地址在R2R3中;最小值在R7中,地址在R4R5中。
;影响资源: PSW、A、B、R1~R7 堆栈需求: 4字节
;调用子程序: 无
MMS: MOV B,R7
MOVX A,@DPTR
MOV R6,A
MOV R7,A
MOV A,DPL
MOV R3,A
MOV R5,A
MOV A,DPH
MOV R2,A
MOV R4,A
MOV A,B
DEC A
JZ MMSE
MOV R1,A
PUSH DPL
PUSH DPH
MMS1: INC DPTR
MOVX A,@DPTR
MOV B,A
SETB C
SUBB A,R6
JZ MMS4
JNB OV,MMS2
CPL ACC.7
MMS2: JB ACC.7,MMS4
MOV R6,B
MOV R2,DPH
MOV R3,DPL
AJMP MMS7
MMS4: MOV A,B
CLR C
SUBB A,R7
JNB OV,MMS6
CPL ACC.7
MMS6: JNB ACC.7,MMS7
MOV R7,B
MOV R4,DPH
MOV R5,DPL
MMS7: DJNZ R1,MMS1
POP DPH
POP DPL
MMSE: RET
;------------------------------------------------;
;****** [顺序查找(ROM)单字节表格] FDS1 **********;
;入口条件: 待查找的内容在A中,表格首址在DPTR中,表格的字节数在R7中。
;出口信息: OV=0时,顺序号在累加器A中;OV=1时,未找到。
;影响资源: PSW、A、B、R2、R6 堆栈需求: 2字节
;调用子程序: 无
FDS1: MOV B,A
MOV R2,#0
MOV A,R7
MOV R6,A
FD11: MOV A,R2
MOVC A,@A+DPTR
CJNE A,B,FD12
CLR OV
MOV A,R2
RET
FD12: INC R2
DJNZ R6,FD11
SETB OV
RET
;------------------------------------------------;
;****** [顺序查找(ROM)双字节表格] FDS2 **********;
;入口条件: 查找内容在R4、R5中,表格首址在DPTR中,数据总个数在R7中。
;出口信息: OV=0时顺序号在累加器A中,地址在DPTR中;OV=1时未找到。
;影响资源: PSW、A、R2、R6、DPTR 堆栈需求: 2字节
;调用子程序: 无
FDS2: MOV A,R7
MOV R6,A
MOV R2,#0
FD21: CLR A
MOVC A,@A+DPTR
XRL A,R4
JNZ FD22
MOV A,#1
MOVC A,@A+DPTR
XRL A,R5
JNZ FD22
CLR OV
MOV A,R2
RET
FD22: INC DPTR
INC DPTR
INC R2
DJNZ R6,FD21
SETB OV
RET
;----------------------------------------------------;
;****** [对分查找(ROM)单字节无符号增序数据表格] FDD1 ;
;入口条件: 待查找的内容在累加器A中,表格首址在DPTR中,字节数在R7中。
;出口信息: OV=0 时,顺序号在累加器A中;OV=1 时,未找到。
;影响资源: PSW、A、B、R2、R3、R4 堆栈需求: 2字节
;调用子程序: 无
FDD1: MOV B,A
MOV R2,#0
MOV A,R7
DEC A
MOV R3,A
FD61: CLR C
MOV A,R3
SUBB A,R2
JC FD69
RRC A
ADD A,R2
MOV R4,A
MOVC A,@A+DPTR
CJNE A,B,FD65
CLR OV
MOV A,R4
RET
FD65: JC FD68
MOV A,R4
DEC A
MOV R3,A
AJMP FD61
FD68: MOV A,R4
INC A
MOV R2,A
AJMP FD61
FD69: SETB OV
RET
;------------------------------------------------;
;****** [对分查找(ROM)双字节无符号增序数据表格] FDD2 ;
;入口条件: 查找内容在R4、R5中,表格首址在DPTR中,数据个数在R7中。
;出口信息: OV=0 时顺序号在累加器A中,址在DPTR中;OV=1 时未找到。
;影响资源: PSW、A、B、R1~R7、DPTR 堆栈需求: 2字节
;调用子程序: 无
FDD2: MOV R2,#0
MOV A,R7
DEC A
MOV R3,A
MOV R6,DPH
MOV R7,DPL
FD81: CLR C
MOV A,R3
SUBB A,R2
JC FD89
RRC A
ADD A,R2
MOV R1,A
MOV DPH,R6
CLR C
RLC A
JNC FD82
INC DPH
FD82: ADD A,R7
MOV DPL,A
JNC FD83
INC DPH
FD83: CLR A
MOVC A,@A+DPTR
MOV B,R4
CJNE A,B,FD84
MOV A,#1
MOVC A,@A+DPTR
MOV B,R5
CJNE A,B,FD84
MOV A,R1
CLR OV
RET
FD84: JC FD86
MOV A,R1
DEC A
MOV R3,A
AJMP FD81
FD86: MOV A,R1
INC A
MOV R2,A
AJMP FD81
FD89: MOV DPH,R6
MOV DPL,R7
SETB OV
RET
;------------------------------------------------;
;****** [求单字节十六进制无符号数据块的平均值] DDM1 ;
;入口条件: 数据块的首址在DPTR中,数据个数在R7中。
;出口信息: 平均值在累加器A中。
;影响资源: PSW、A、R2~R6 堆栈需求: 4字节
;调用子程序: 无
DDM1: MOV A,R7
MOV R2,A
PUSH DPH
PUSH DPL
CLR A
MOV R4,A
MOV R5,A
DM11: MOVX A,@DPTR
ADD A,R5
MOV R5,A
JNC DM12
INC R4
DM12: INC DPTR
DJNZ R2,DM11
LCALL D457
MOV A,R3
POP DPL
POP DPH
RET
;------------------------------------------------;
;****** [求双字节十六进制无符号数据块的平均值] DDM2 ;
;入口条件: 数据块的首址在DPTR中,双字节数据总个数在R7中。
;出口信息: 平均值在R4、R5中。
;影响资源: PSW、A、R2~R6 堆栈需求: 4字节
;调用子程序: 1个 DV31
DDM2: MOV A,R7
MOV R2,A
PUSH DPL
PUSH DPH
CLR A
MOV R3,A
MOV R4,A
MOV R5,A
DM20: MOVX A,@DPTR
MOV B,A
INC DPTR
MOVX A,@DPTR
INC DPTR
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R4
MOV R4,A
JNC DM21
INC R3
DM21: DJNZ R2,DM20
POP DPH
POP DPL
LCALL DV31
RET
;------------------------------------------------;
;****** [求单字节数据块的(异或)校验和] XR1 ******;
;入口条件: 数据块的首址在DPTR中,数据的个数在R6、R7中。
;出口信息: 校验和在累加器A中。
;影响资源: PSW、A、B、R4~R7 堆栈需求: 2字节
;调用子程序: 无
XR1: MOV R4,DPH
MOV R5,DPL
MOV A,R7
JZ XR10
INC R6
XR10: MOV B,#0
XR11: MOVX A,@DPTR
XRL B,A
INC DPTR
DJNZ R7,XR11
DJNZ R6,XR11
MOV DPH,R4
MOV DPL,R5
MOV A,B
RET
;------------------------------------------------;
;****** [求双字节数据块的(异或)校验和] XR2 ******;
;入口条件: 数据块的首址在DPTR中,双字节数据总个数在R6、R7中。
;出口信息: 校验和在R2、R3中。
;影响资源: PSW、A、R2~R7 堆栈需求: 2字节
;调用子程序: 无
XR2: MOV R4,DPH
MOV R5,DPL
MOV A,R7
JZ XR20
INC R6
XR20: CLR A
MOV R2,A
MOV R3,A
XR21: MOVX A,@DPTR
XRL A,R2
MOV R2,A
INC DPTR
MOVX A,@DPTR
XRL A,R3
MOV R3,A
INC DPTR
DJNZ R7,XR21
DJNZ R6,XR21
MOV DPH,R4
MOV DPL,R5
RET
;------------------------------------------------;
;****** [单字节无符号数据块排序(增序)] SORT *****;
;入口条件: 数据块的首址在R0中,字节数在R7中。
;出口信息: 完成排序(增序)
;影响资源: PSW、A、R2~R6 堆栈需求: 2字节
;调用子程序: 无
SORT: MOV A,R7
MOV R5,A
SRT1: CLR F0
MOV A,R5
DEC A
MOV R5,A
MOV R2,A
JZ SRT5
MOV A,R0
MOV R6,A
SRT2: MOV A,@R0
MOV R3,A
INC R0
MOV A,@R0
MOV R4,A
CLR C
SUBB A,R3
JNC SRT4
SETB F0
MOV A,R3
MOV @R0,A
DEC R0
MOV A,R4
MOV @R0,A
INC R0
SRT4: DJNZ R2,SRT2
MOV A,R6
MOV R0,A
JB F0,SRT1
SRT5: RET
;------------------------------------------------;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -