31、原码有符号双字节减法程序
32、原码有符号双字节加法程序
33、原码有符号双字节乘法程序
34、原码有符号双字节除法程序
35、单字节顺序查找程序
36、单字节顺序查找程序
37、双字节字符串顺序查找程序
38、双字节字符串顺序查找程序
39、N字节字符串顺序查找程序
40、单字节最值查找程序
41、浮点数顺序查找程序
42、浮点数最值查找程序
43、单字节折半查找程序
;原码有符号双字节减法程序 (R3R4-R6R7)=R3R4
;入口 :R3,R4,R6,R7
;占用资源:ACC,DADD
;堆栈需求:6字节
;出口 :R3,R4,OV
DSUB : MOV A,R6
CPL ACC.7
MOV R6,A
LCALL DADD
RET
;原码有符号双字节加法程序 (R3R4+R6R7)=R3R4
;入口 :R3,R4,R6,R7
;占用资源:ACC,SR0,NADD,NSUB,CMPT
;堆栈需求:4字节
;出口 :R3,R4,OV
DADD : MOV A,R3
MOV C,ACC.7
MOV SR0,C
XRL A,R6
MOV C,ACC.7
MOV A,R3
CLR ACC.7
MOV R3,A
MOV A,R6
CLR ACC.7
MOV R6,A
JC DAB2
LCALL NADD
MOV A,R3
JB ACC.7,DABE
DAB1 : MOV C,SR0
MOV ACC.7,C
MOV R3,A
CLR OV
RET
DABE :SETB OV
RET
DAB2 :LCALL NSUB
MOV A,R3
JNB ACC.7,DAB1
LCALL CMPT
CPL SR0
SJMP DAB1
;原码有符号双字节乘法程序 (R3R4*R6R7)=(R5R2R3R4)
;入口 :R3,R4,R6,R7
;占用资源:ACC,SR0,NMUL22
;堆栈需求:4字节
;出口 :R5,R2,R3,R4
IMUL : MOV A,R3
XRL A,R6
MOV C,ACC.7
MOV SR0,C
MOV A,R3
CLR ACC.7
MOV R3,A
MOV A,R6
CLR ACC.7
MOV R6,A
LCALL NMUL22
MOV A,R5
MOV C,SR0
MOV ACC.7,C
MOV R5,A
RET
;原码有符号双字节除法程序 (R5R2R3R4/R6R7)=(R3R4) 余数(R6R7)
;入口 :R5,R2,R3,R4
;占用资源:ACC,SR0,NDIV42
;堆栈需求:6字节
;出口 :R3,R4,R6,R7,OV
IDIV : MOV A,R5
XRL A,R6
MOV C,ACC.7
MOV SR0,C
MOV A,R5
CLR ACC.7
MOV R5,A
MOV A,R6
CLR ACC.7
MOV R6,A
LCALL NDIV42
MOV A,R3
JB ACC.7,IDIVE
JB OV,IDIVE
MOV C,SR0
MOV ACC.7,C
MOV R3,A
RET
IDIVE :SETB OV
RET
;单字节顺序查找程序
;入口 :R0,R1,A,R7
;占用资源:B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDB1 : MOV B,A
MOV DPL,R1
MOV DPH,R0
FINDB11 : MOV X A,@DPTR
CJNE A,B,FINDB12
MOV R1,DPL
MOV R0,DPH
CLR A
RET
FINDB12 :INC DPTR
DJNZ R7,FINDB11
MOV A,#0FFH
RET
;单字节顺序查找程序
;入口 :R0,R1,A,R6,R7
;占用资源:B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDB2 : MOV B,A
MOV DPL,R1
MOV DPH,R0
MOV A,R7
JZ FINDB21
INC R6
FINDB21 : MOV X A,@DPTR
CJNE A,B,FINDB22
MOV R1,DPL
MOV R0,DPH
CLR A
RET
FINDB22 :INC DPTR
DJNZ R7,FINDB21
DJNZ R6,FINDB21
MOV A,#0FFH
RET
;双字节字符串顺序查找程序
;入口 :R0,R1,R3,R4,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDS1 : MOV DPL,R1
MOV DPH,R0
FINDS11 : MOV X A,@DPTR
INC DPTR
CLR C
SUBB A,R4
JNZ FINDS12
MOV X A,@DPTR
SUBB A,R3
JNZ FINDS12
MOV A,DPL
CLR C
SUBB A,#01H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDS12 :DJNZ R7,FINDS11
MOV A,#0FFH
RET
;双字节字符串顺序查找程序
;入口 :R0,R1,R3,R4,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDS2 : MOV DPL,R1
MOV DPH,R0
MOV A,R7
JZ FINDS21
INC R6
FINDS21 : MOV X A,@DPTR
INC DPTR
CLR C
SUBB A,R4
JNZ FINDS22
MOV X A,@DPTR
SUBB A,R3
JNZ FINDS22
MOV A,DPL
CLR C
SUBB A,#01H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDS22 :DJNZ R7,FINDS21
DJNZ R6,FINDS21
MOV A,#0FFH
RET
;N字节字符串顺序查找程序
;入口 :ADDPH,ADDPL,R0,R6,R7,N
;占用资源:ACC,B,R2,NCNT
;堆栈需求:2字节
;出口 :ADDPH,ADDPL,A
FINDN : MOV A,R0
MOV R2,A
MOV A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
MOV A,R7
JZ FINDN1
INC R6
FINDN1 : MOV A,R2
MOV R0,A
MOV A,N
MOV NCNT,A
FINDN2 : MOV X A,@DPTR
CLR C
SUBB A,@R0
JNZ FINDN3
INC DPTR
INC R0
DJNZ NCNT,FINDN2
MOV A,DPL
CLR C
SUBB A,N
MOV ADDPL,A
MOV A,DPH
SUBB A,#00H
MOV ADDPH,A
CLR A
RET
FINDN3 :CLR C
MOV A,R0
SUBB A,R2
JNZ FINDN4
INC DPTR
FINDN4 :DJNZ R7,FINDN1
DJNZ R6,FINDN1
MOV A,#0FFH
RET
;单字节最值查找程序
;入口 :R0,R1,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0(最大值),R1(最小值),R2,R3,R4,R5
FMAMIB : MOV DPL,R1
MOV DPH,R0
MOV X A,@DPTR
MOV R0,A
MOV R1,A
MOV A,DPL
MOV R3,A
MOV R5,A
MOV A,DPH
MOV R2,A
MOV R4,A
MOV A,R7
JZ FMMB1
INC R6
FMMB1 : MOV X A,@DPTR
MOV B,A
SETB C
SUBB A,R0
JC FMMB2
MOV R0,B
MOV R3,DPL
MOV R2,DPH
SJMP FMMB3
FMMB2 : MOV A,B
CLR C
SUBB A,R1
JNC FMMB3
MOV R1,B
MOV R5,DPL
MOV R4,DPH
FMMB3 :INC DPTR
DJNZ R7,FMMB1
DJNZ R6,FMMB1
RET
;浮点数顺序查找程序
;入口 :R0,R1,R2,R3,R4,R6,R7
;占用资源:B,NCNT,FCMP
;堆栈需求:2字节
;出口 :R0,R1,A
FINDF : MOV DPL,R1
MOV DPH,R0
MOV A,R7
MOV B,A
MOV NCNT,R6
JZ FINDF1
INC NCNT
FINDF1 : MOV X A,@DPTR
INC DPTR
MOV R5,A
MOV X A,@DPTR
INC DPTR
MOV R6,A
MOV X A,@DPTR
INC DPTR
MOV R7,A
LCALL FCMP
JNZ FINDF2
MOV A,DPL
CLR C
SUBB A,#03H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDF2 :DJNZ B,FINDF1
DJNZ NCNT,FINDF1
MOV A,#0FFH
RET
;浮点数最值查找程序
;入口 :ADDPH,ADDPL,R6,R7
;占用资源:ACC,B,NCNT,ITE MOV ,EBMOV,MOVB,MOVR1,FCMP
;堆栈需求:5字节
;出口 :[R0](最大值),[R1](最小值),R2,R3,R4,R5
FMAMIF : MOV A,ADDPL
MOV R3,A
MOV R5,A
MOV DPL,A
MOV A,ADDPH
MOV R2,A
MOV R4,A
MOV DPH,A
MOV B,R7
MOV R7,#03H
LCALL ITE MOV
MOV R7,#03H
LCALL IB MOV
MOV A,B
JZ FMMF1
INC NCNT
FMMF1 :PUSH B
MOV X A,@DPTR
INC DPTR
MOV R2,A
MOV X A,@DPTR
INC DPTR
MOV R3,A
MOV X A,@DPTR
INC DPTR
MOV R4,A
LCALL MOV R1
LCALL FCMP
JNC FMMF2
MOV A,R0
XCH A,R1
MOV R0,A
LCALL MOV B
MOV R5,DPL
MOV R4,DPH
MOV A,R0
XCH A,R1
MOV R0,A
SJMP FMMF3
FMMF2 : MOV A,R0
XCH A,R1
MOV R0,A
LCALL MOV R1
LCALL FCMP
MOV A,R0
XCH A,R1
MOV R0,A
JZ FMMF3
JC FMMF3
LCALL MOV B
MOV R3,DPL
MOV R2,DPH
FMMF3 :POP B
DJNZ B,FMMF1
DJNZ NCNT,FMMF1
RET
;单字节折半查找程序
;入口 :A,R0,R1,R6,R7
;占用资源:B,R2
;堆栈需求:2字节
;出口 :R0,R1
SEARCHB : MOV B,A
MOV A,R1
ADD A,R7
MOV R7,A
MOV A,R0
ADDC A,R6
MOV R6,A
MOV A,R7
SUBB A,#01H
MOV R7,A
JNC SECH1
DEC R6
SECH1 : MOV A,R7
CLR C
SUBB A,R1
MOV A,R6
SUBB A,R0
JNC SECH2
MOV A,#0FFH
RET
SECH2 : MOV A,R7
ADD A,R1
MOV R2,A
MOV A,R6
ADDC A,R0