51单片机的汇编程序库-飞外网

1、片内RAM初始化子程序

2、片外RAM初始化子程序

3、片外RAM初始化子程序(双字节个单元)

4、内部RAM数据复制程序

5、外部RAM数据复制程序

6、外部RAM数据复制程序

7、外部RAM数据复制到内部RAM程序

8、限幅滤波程序

9、中位值滤波程序

10、N点算术平均滤波

11、N点加权平均滤波

12、一阶加权滞后滤波程序

13、双字节取补程序

14、N节取补程序

15、双字节无符号数加法程序

16、N字节无符号数加法程序

17、双字节无符号数减法程序

18、N字节无符号数减法程序

19、单字节无符号数乘法程序

20、单字节无符号数乘法程序

21、单字节无符号数乘法程序

22、双字节无符号数乘法程序

23、双字节无符号数乘法程序

24、N字节无符号数乘法程序

25、单字节无符号除法程序

26、单字节无符号除法程序

27、双字节无符号除法程序

28、N字节无符号除法程序(组合)

29、N字节无符号除法程序

30、N字节数据左移程序

31、原码有符号双字节减法程序

32、原码有符号双字节加法程序

33、原码有符号双字节乘法程序

34、原码有符号双字节除法程序

35、单字节顺序查找程序

36、单字节顺序查找程序

37、双字节字符串顺序查找程序

38、双字节字符串顺序查找程序

39、N字节字符串顺序查找程序

40、单字节最值查找程序

41、浮点数顺序查找程序

42、浮点数最值查找程序

43、单字节折半查找程序

片内RAM初始化子程序

IBCLR :MOV A,R0

MOV R1,A

CLR A

IBC1 :MOV @R1,A

INC R1

DJNZ R7,IBC1

RET

片外RAM初始化子程序

EBCLR1 :MOV A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

CLR C

EBC11 :MOVX @DPTR,A

INC DPTR

DJNZ R7,EBC11

RET

片外RAM初始化子程序(双字节个单元)

EBCLR2 :MOV A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

MOV A,R7

JZ EBC21

INC R6

EBC21 :CLR A

MOVX @DPTR,A

INC DPTR

DJNZ R7,EBC21

DJNZ R6,EBC21

RET

内部RAM数据复制程序

入口 :R0,R7

占用资源:A

堆栈需求:2字节

出口 :R1

IBMOV :MOV A,R0

ADD A,R7

MOV R0,A

MOV A,R1

ADD A,R7

MOV R1,A

IBM1 :DEC R0

DEC R1

MOV A,@R0

MOV @R1,A

DJNZ R7,IBM1

RET

外部RAM数据复制程序

入口 :ADDPH,ADDPL,R7

占用资源:ACC

堆栈需求:2字节

出口 :R0,R1

EBMOV1 :MOV A,ADDPL

ADD A,R7

MOV DPL,A

CLR A

ADDC A,ADDPH

MOV DPH,A

MOV A,R7

ADD A,R1

XCH A,R0

ADDC A,#00H

MOV P2,A

EBM11 :DEC R0

CJNE R0,#0FFH,EBM12

DEC P2

EBM12 :DEC DPL

MOV A,DPL

CJNE A,#0FFH,EBM13

DEC DPH

EBM13 :MOVX A,@R0

MOVX @DPTR,A

DJNZ R7,EBM11

RET

外部RAM数据复制程序

入口 :ADDPH,ADDPL,R6,R7

占用资源:ACC

堆栈需求:2字节

出口 :R0,R1

EBMOV2 :MOV A,ADDPL

ADD A,R7

MOV DPL,A

MOV A,R6

ADDC A,ADDPH

MOV DPH,A

MOV A,R7

ADD A,R1

XCH A,R0

ADDC A,R6

MOV P2,A

MOV A,R7

JZ EBM21

INC R6

EBM21 :DEC R0

CJNE R0,#0FFH,EBM22

DEC P2

EBM22 :DEC DPL

MOV A,DPL

CJNE A,#0FFH,EBM23

DEC DPH

EBM23 :MOVX A,@R0

MOVX @DPTR,A

DJNZ R7,EBM21

DJNZ R6,EBM21

RET

外部RAM数据复制到内部RAM程序

入口 :ADDPH,ADDPL,R7

占用资源:ACC

堆栈需求:2字节

出口 :R0

ITEMOV :MOV A,ADDPL

ADD A,R7

MOV DPL,A

MOV A,ADDPH

ADDC A,#00H

MOV DPH,A

MOV A,R0

ADD A,R7

MOV R0,A

ITEM1 :DEC R0

DEC DPL

MOV A,DPL

CJNE A,#0FFH,ITEM2

DEC DPH

ITEM2 :MOVX A,@DPTR

MOV @R0,A

DJNZ R7,ITEM1

RET

限幅滤波程序

入口 :A,SDAT,DELTY

占用资源:B

堆栈需求:2字节

出口 :A

JUGFILT :MOV B,A

CLR C

SUBB A,SDAT

JNC JUGFT1

CPL A

INC A

JUGFT1 :SETB A

SUBB A,#DELTY

JNC JUGFT3

MOV A,SDAT

RET

JUGFT3 :MOV A,B

MOV SDAT,A

RET

中位值滤波程序

入口 :ADDPH,ADDPL,N

占用资源:ESELSORT

堆栈需求:4字节

出口 :A

MEDFILT :LCALL ESELSORT

MOV A,N

CLR C

RRC A

ADD A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

JNC MEDFT1

INC DPH

MEDFT1 :MOVX A,@DPTR

RET

N点算术平均滤波

入口 :ADDPH,ADDPL,N

占用资源:B,R3,R4

堆栈需求:2字节

出口 :A

AVFILT :MOV A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

CLR A

MOV R3,A

MOV R4,A

MOV R7,N

AVFT1 :MOVX A,@DPTR

INC DPTR

ADD A,R4

MOV R4,A

JNC AVFT2

INC R3

AVFT2 :DJNZ R7,AVFT1

MOV R7,N

MOV R2,#00H

LCALL NDIV31

MOV A,R4

RET

N点加权平均滤波

入口 :ADDPH,ADDPL,N

占用资源:B,R3,R4

堆栈需求:2字节

出口 :A

QAVFILT :CLR A

MOV R3,A

MOV R4,A

MOV R7,N

MOV P2,ADDPH

MOV R1,ADDPL

MOV DPTR,#QAVTAB

QAVFT1 :MOVC A,@A+DPTR

MOV B,A

MOVX A,@R1

INC DPTR

INC R1

MUL AB

ADD A,R4

MOV R4,A

MOV A,B

ADDC A,R3

MOV R3,A

DJNZ R7,QAVFT1

MOV A,R4

JNB ACC.7,QAVFT2

INC R3

QAVFT2 :MOV A,R3

RET

QAVTAB :DB

一阶加权滞后滤波程序

入口 :A,DELTY

占用资源:B,R3,R4

堆栈需求:2字节

出口 :A

BQFILT :MOV B,A

CLR A

MOV DPTR,#ABTAB

MOVC A,@A+DPTR

MUL AB

MOV R4,A

MOV R3,B

MOV A,#01H

MOVC A,@A+DPTR

MOV B,DELTY

MUL AB

ADD A,R4

MOV R4,A

MOV A,B

ADDC A,R3

MOV R3,A

MOV A,R4

JNB ACC.7,FT1

INC R3

FT1 :MOV A,R3

MOV DELTY,A

RET

BQTAB :DB 80H,80H

双字节取补程序 /(R3R4)=(R3R4)

入口 :R3,R4

占用资源:ACC

堆栈需求:2字节

出口 :R3,R4

CMPT :MOV A,R4

CPL A

ADD A,#01H

MOV R4,A

MOV A,R3

CPL A

ADDC A,#00H

MOV R3,A

RET

N节取补程序 /([R0])=([R0])

入口 :R0,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R0

NCMPTN :MOV B,R0

SETB C

NCPT1 :MOV A,@R0

CPL A

ADDC A,#00H

MOV @R0,A

INC R0

DJNZ R7,NCPT1

MOV R0,B

RET

双字节无符号数加法程序 (R3R4+R6R7)=(R3R4)

入口 :R3,R4,R6,R7

占用资源:ACC

堆栈需求:2字节

出口 :R3,R4,CF

NADD :MOV A,R4

ADD A,R7

MOV R4,A

MOV A,R3

ADDC A,R6

MOV R3,A

RET

N字节无符号数加法程序 ([R0]+[R1])=([R0])

入口 :R0,R1,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R0,CF

NADDN :MOV B,R0

CLR C

NADN1 :MOV A,@R0

ADDC A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NADN1

MOV R0,B

RET

双字节无符号数减法程序 (R3R4-R6R7)=(R3R4)

入口 :R3,R4,R6,R7

占用资源:ACC

堆栈需求:2字节

出口 :R3,R4

NSUB :MOV A,R4

CLR C

SUBB A,R7

MOV R4,A

MOV A,R3

SUBB A,R6

MOV R3,A

RET

N字节无符号数减法程序 ([R0]-[R1])=([R0])

入口 :R0,R1,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R0,CF

NSUBN :MOV B,R0

MOV R7,N

CLR C

NSUBN1 :MOV A,@R0

SUBB A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NSUBN1

MOV R0,B

RET

单字节无符号数乘法程序 (R3R4*R7)=(R2R3R4)

入口 :R3,R4,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R2,R3,R4

NMUL21 :MOV A,R4

MOV B,R7

MUL AB

MOV R4,A

MOV A,B

XCH A,R3

MOV B,R7

MUL AB

ADD A,R3

MOV R3,A

CLR A

ADDC A,B

MOV R2,A

CLR OV

RET

单字节无符号数乘法程序 (R2R3R4*R7)=(R5R2R3R4)

入口 :R2,R3,R4,R6,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R5,R2,R3,R4

NMUL31 :MOV A,R4

MOV B,R7

MUL AB

MOV R4,A

MOV A,B

XCH A,R3

MOV B,R7

MUL AB

ADD A,R3

MOV R3,A

CLR A

ADDC A,B

XCH A,R2

MOV B,R7

MUL AB

ADD A,R2

MOV R2,A

CLR A

ADDC A,B

MOV R5,A

CLR OV

RET

单字节无符号数乘法程序 (R5R2R3R4*R7)=(R7R5R2R3R4)

入口 :R5,R2,R3,R4,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R7,R5,R2,R3,R4

NMUL41 :MOV A,R4

MOV B,R7

MUL AB

MOV R4,A

MOV A,B

XCH A,R3

MOV B,R7

MUL AB

ADD A,R3

MOV R3,A

CLR A

ADDC A,B

XCH A,R2

MOV B,R7

MUL AB

ADD A,R2

MOV R2,A

CLR A

ADDC A,B

XCH A,R5

MOV B,R7

MUL AB

ADD A,R5

MOV R5,A

CLR A

ADDC A,B

MOV R7,A

CLR OV

RET

双字节无符号数乘法程序 (R3R4*R6R7)=(R5R2R3R4)

入口 :R3,R4,R6,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R5,R2,R3,R4

NMUL22 :MOV A,R4

MOV B,R7

MUL AB

XCH A,R4

MOV R5,B

MOV B,R6

MUL AB

ADD A,R5

MOV R5,A

CLR A

ADDC A,B

MOV R2,A

MOV A,R3

MOV B,R7

MUL AB

ADD A,R5

MOV R5,A

MOV A,B

ADDC A,R2

MOV R2,A

CLR A

ADDC A,#00H

XCH A,R3

MOV B,R6

MUL AB

ADD A,R2

MOV R2,A

MOV A,B

ADDC A,R3

XCH A,R5

MOV R3,A

CLR OV

RET

双字节无符号数乘法程序 (R2R3R4*R6R7)=(R1R5R2R3R4)

入口 :R2,R3,R4,R6,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R1,R5,R2,R3,R4

NMUL32 :MOV A,R4

MOV B,R7

MUL AB

XCH A,R4

MOV R5,B

MOV B,R6

MUL AB

ADD A,R5

MOV R5,A

CLR A

ADDC A,B

MOV R1,A

MOV A,R3

MOV B,R7

MUL AB

ADD A,R5

MOV R5,A

MOV A,B

ADDC A,R1

MOV R1,A

CLR A

ADDC A,#00H

XCH A,R3

MOV B,R6

MUL AB

ADD A,R1

MOV R1,A

MOV A,B

ADDC A,R3

XCH A,R5

MOV R3,A

MOV A,R2

MOV B,R7

MUL AB

ADD A,R1

MOV R1,A

MOV A,B

ADDC A,R5

MOV R5,A

CLR A

ADDC A,#00H

XCH A,R2

MOV B,R6

MUL AB

ADD A,R5

MOV R5,A

MOV A,B

ADDC A,R2

XCH A,R1

MOV R2,A

CLR OV

RET

N字节无符号数乘法程序 ([R0]*[R1])=([R0])

入口 :R0,R1,M,N

占用资源:ACC,B,R2,R5,R6,R7,NCNT

堆栈需求:2字节

出口 :R0

NMULMN :MOV A,M

ADD A,R0

MOV R5,A

XCH A,R1

XCH A,R5

ADD A,N

XCH A,R0

MOV R6,A

MOV B,M

MOV NCNT,B

NMLMN1 :DEC R0

DEC R1

CLR A

XCH A,@R1

MOV @R0,A

DJNZ NCNT,NMLMN1

MOV NCNT,B

NMLMN2 :CLR A

XCH A,@R0

MOV R2,A

MOV A,R6

MOV R0,A

MOV A,R5

MOV R1,A

MOV R7,N

CLR C

NMLMN3 :MOV A,R2

MOV B,@R1

INC R1

MUL AB

ADDC A,@R0

MOV @R0,A

INC R0

MOV A,B

ADDC A,@R0

MOV @R0,A

DJNZ R7,NMLMN3

INC R0

INC R6

DJNZ NCNT,NMLMN2

MOV A,R0

CLR C

SUBB A,M

SUBB A,N

MOV R0,A

RET

单字节无符号除法程序 (R2R3R4/R7)=(R2)R3R4 余数R7

入口 :R2,R3,R4,R7

占用资源:ACC,B,F0

堆栈需求:3字节

出口 :(R2),R3,R4,R7,OV

NDIV31 :MOV A,R2

MOV B,R7

DIV AB

PUSH A

MOV R2,B

MOV B,#10H

NDV311 :CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

MOV F0,C

CLR C

SUBB A,R7

JB F0,NDV312

JC NDV313

NDV312 :MOV R2,A

INC R4

NDV313 :DJNZ B,NDV311

POP A

CLR OV

JZ NDV314

SETB OV

NDV314 :XCH A,R2

MOV R7,A

RET

单字节无符号除法程序 (R5R2R3R4/R7)=(R5)R2R3R4 余数R7

入口 :R2,R3,R4,R7

占用资源:ACC,B,F0

堆栈需求:3字节

出口 :(R5),R2,R3,R4,R7,OV

NDIV41 :MOV A,R5

MOV B,R7

DIV AB

PUSH A

MOV R5,B

MOV B,#18H

NDV411 :CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

MOV A,R5

RLC A

MOV R5,A

MOV F0,C

CLR C

SUBB A,R7

JB F0,NDV412

JC NDV413

NDV412 :MOV R5,A

INC R4

NDV413 :DJNZ B,NDV411

POP A

CLR OV

JZ NDV414

SETB OV

NDV414 :XCH A,R5

MOV R7,A

RET

双字节无符号除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余数R6R7

入口 :R5,R2,R3,R4,R6,R7

占用资源:ACC,B,F0

堆栈需求:4字节

出口 :(R2),R3,R4,R6,R7,OV

NDIV42 :MOV A,R1

PUSH A

MOV B,#00H

NDV421 :MOV A,R2

CLR C

SUBB A,R7

MOV R1,A

MOV A,R5

SUBB A,R6

JC NDV422

MOV R5,A

MOV A,R1

MOV R2,A

INC B

SJMP NDV421

NDV422 :PUSH B

MOV B,#10H

NDV423 :CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

XCH A,R5

RLC A

XCH A,R5

MOV F0,C

CLR C

SUBB A,R7

MOV R1,A

MOV A,R5

SUBB A,R6

JB F0,NCV424

JC NDV425

NCV424 :MOV R5,A

MOV A,R1

MOV R2,A

INC R4

NDV425 :DJNZ B,NDV423

POP A

CLR OV

JNZ NDV426

SETB OV

NDV426 :XCH A,R2

MOV R7,A

MOV A,R5

MOV R6,A

POP A

MOV R1,A

RET

N字节无符号除法程序(组合) ([R0]/[R1])=([R0])

入口 :R0,R1,M,N

占用资源:ACC,R2,R3,R4,R5,R7,NCNT,F0,NADDN,NSUBBN,NRLCN

堆栈需求:4字节

出口 :R0

NDIVMN :MOV A,M

CLR C

SUBB A,N

MOV NCNT,A

ADD A,R0

MOV R4,A

XCH A,R0

MOV R3,A

MOV A,R1

MOV R5,A

MOV R2,#00H

NDVMN1 :MOV R7,N

LCALL NSUBN

MOV A,R5

MOV R1,A

JC NDVMN2

INC R2

SJMP NDVMN1

NDVMN2 :MOV R7,N

LCALL NADDN

MOV A,NCNT

SWAP A

RR A

MOV NCNT,A

NDVMN3 :MOV A,R3

MOV R0,A

MOV R7,M

LCALL NRLCN

MOV F0,C

MOV A,R4

MOV R0,A

MOV A,R5

MOV R1,A

MOV R7,N

LCALL NSUBN

JB F0,NDVMN4

JC NDVMN5

NDVMN4 :MOV A,R3

MOV R0,A

INC @R0

SJMP NDVMN6

NDVMN5 :MOV A,R5

MOV R1,A

MOV R7,N

LCALL NADDN

NDVMN6 :DJNZ NCNT,NDVMN3

MOV A,R4

MOV R1,A

MOV A,R2

MOV @R1,A

MOV A,R3

MOV R0,A

RET

N字节无符号除法程序(集成) ([R0]/R[1])=([R0])

入口 :R0,R1,M,N

占用资源:ACC,R2,R3,R4,R5,R7,F0

堆栈需求:2字节

出口 :R0

NDIVMN :MOV A,M

CLR C

SUBB A,N

MOV B,A

ADD A,R0

MOV R4,A

XCH A,R0

MOV R3,A

MOV A,R1

MOV R5,A

MOV R2,#00H

NDVMN1 :MOV R7,N

CLR C

NDVMN2 :MOV A,@R0

SUBB A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NDVMN2

MOV A,R4

MOV R0,A

MOV A,R5

MOV R1,A

JC NDVMN3

INC R2

SJMP NDVMN1

NDVMN3 :MOV R7,N

CLR C

NDVMN4 :MOV A,@R0

ADDC A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NDVMN4

MOV A,#08H

MUL AB

MOV B,A

NDVMN5 :MOV A,R3

MOV R0,A

MOV R7,M

CLR C

NDVMN6 :MOV A,@R0

RLC A

MOV @R0,A

INC R0

DJNZ R7,NDVMN6

MOV F0,C

MOV A,R4

MOV R0,A

MOV A,R5

MOV R1,A

MOV R7,N

CLR C

NDVMN7 :MOV A,@R0

SUBB A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NDVMN7

JB F0,NDVMNB

JC NDVMN8

NDVMNB :MOV A,R3

MOV R0,A

INC @R0

SJMP NDVMNA

NDVMN8 :MOV R7,N

MOV A,R4

MOV R0,A

MOV A,R5

MOV R1,A

CLR C

NDVMN9 :MOV A,@R0

ADDC A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NDVMN9

NDVMNA :DJNZ B,NDVMN5

MOV A,M

CLR C

SUBB A,N

ADD A,R3

MOV R1,A

MOV A,R2

MOV @R1,A

MOV A,R3

MOV R0,A

RET

N字节数据左移程序 RLC([R0])=(CF[R0])

入口 :R0,R7

占用资源:ACC,B

堆栈需求:2字节

出口 :R0,CF

NRLCN :MOV B,R0

CLR C

NRLN1 :MOV A,@R0

RLC A

MOV @R0,A

INC R0

DJNZ R7,NRLN1

MOV R0,B

RET

原码有符号双字节减法程序 (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 :MOVX 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 :MOVX 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 :MOVX A,@DPTR

INC DPTR

CLR C

SUBB A,R4

JNZ FINDS12

MOVX 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 :MOVX A,@DPTR

INC DPTR

CLR C

SUBB A,R4

JNZ FINDS22

MOVX 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 :MOVX 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

MOVX 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 :MOVX 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 :MOVX A,@DPTR

INC DPTR

MOV R5,A

MOVX A,@DPTR

INC DPTR

MOV R6,A

MOVX 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,ITEMOV,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 ITEMOV

MOV R7,#03H

LCALL IBMOV

MOV A,B

JZ FMMF1

INC NCNT

FMMF1 :PUSH B

MOVX A,@DPTR

INC DPTR

MOV R2,A

MOVX A,@DPTR

INC DPTR

MOV R3,A

MOVX A,@DPTR

INC DPTR

MOV R4,A

LCALL MOVR1

LCALL FCMP

JNC FMMF2

MOV A,R0

XCH A,R1

MOV R0,A

LCALL MOVB

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 MOVR1

LCALL FCMP

MOV A,R0

XCH A,R1

MOV R0,A

JZ FMMF3

JC FMMF3

LCALL MOVB

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

RRC A

MOV DPH,A

MOV A,R2

RRC A

MOV DPL,A

MOVX A,@DPTR

CLR C

SUBB A,B

JNC SECH3

INC DPTR

MOV R0,DPH

MOV R1,DPL

SJMP SECH1

SECH3 :JZ SECH5

MOV A,DPL

SUBB A,#01H

MOV R7,A

JNC SECH4

MOV R6,DPH

DEC R6

SECH4 :SJMP SECH1

SECH5 :MOV R0,DPH

MOV R1,DPL

CLR A

RET


根据很多 Java 程序员的“经验”来看,一个数据库表则对应着一个 domain 对象,所以很多程序.... Android编程精选 发表于 06-30 11:40 •
求助改电子针灸仪电路程序 现有的电子针疗仪只能2对贴片同时工作,需要改写程序做成8个部位自动循环按摩:第一秒肩颈按一下,第二秒腰背按一下,第三秒手臂... 发表于 06-28 19:07 • 542次
主要演示BL702/704/706系列mcu低功耗性能 1、主要演示BL702/704/706系列mcu低功耗性能低功耗模式:Running : Running 为 CPU 正常运行时的功耗,由客户应用代码... 发表于 06-28 18:19 • 3297次
如何安装一些经典的APP将firefly-rk3399改造成一台电视盒子 一、简介 这一节主要针对Adnroid系统进行一些性能测试,评测RK3399这颗六核处理器的整体性能和视频解码能力。最后,通... 发表于 06-28 16:21 • 1125次
基于51单片机的花样流水灯设计 花样流水灯就是让LED灯按照一定规律进行各种变化,流水灯在生活中也随处可见,例如在建筑物的棱角上装上.... 王子变青蛙_35400519 发表于 06-28 10:29 • 178次
HOLXI是哪一家的IC呀,用起来怎么样?? HOLXI是哪一家的MCU呀,有人用过吗?用起来怎么样??一般用在哪类产品上多一些呀? 发表于 06-27 10:01 • 959次
CH554的RAM空间不够用怎么解决? 沁恒原厂的各位大哥好!CH554的RAM空间是256+1k,现这空间已用完,请问有别的办法来加大吗? &nb... 发表于 06-27 06:37 •
关于C#课程总结 利用C#语言,我第一次设计成功一个窗体程序,这使我充满继续学习C#的兴趣。随着课程的深入,我越发感觉.... 发表于 06-23 15:14 •
以一个小的example来对比SpinalHDL Lib库的强大 在SpinalHDL的世界里,它基于core提供了丰富的Lib库,包含了Stream、Flow、Fragment、State Machine、Bus Slave Fa... 发表于 06-22 14:44 • 444次
试验带显示继电器32级步进遥控音量 1.应好友要求而试验。2.将上次的PGA2311改为继电器。3.应用R-2R电阻网络做音量调整核心。4.将数字地与模拟地彻底分开... 发表于 06-22 11:35 • 4785次
HS34M3212是一款内部集成标准拷贝程序的拷贝型芯片。其中射频接收部分解调基于ASK/OOK调制.... 华芯微电子 发表于 06-21 17:22 • 242次
STM32H750芯片 我有个STM32H750芯片,里面的程序有没有办法拿出来,懂的大神望回信。谢谢... 发表于 06-20 16:25 • 1935次
求助2410上电后如何将RAM映射到0x0处呢 2410上电后从0x0处执行,在bootloader中首先将ROM中的代码和数据搬到RAM中,然后如何将RAM映射到0x0处?看2410的文档,... 发表于 06-20 14:41 • 1454次
我们先简单地回顾一下 CPU 的工作机制,重新温习一下一些基本概念,因为我在查阅资料的过程发现一些网.... 程序员cxuan 发表于 06-20 10:10 • 234次
c++知识要点 第一章 开始1.1 编写一个简单的C++程序int main()return 0;.... 发表于 06-20 09:45 •
ch32v307想要RAM空间和ROM空间最大化,应该怎么做? 你好,我在使用ch32v307 时有个疑惑,默认情况下 ch32v307的ROM 256K,RAM 64K。通过相关配置可以变成 ROM 192KB... 发表于 06-20 07:39 • 108次
Merlin HugeCTR v3.6和v3.7版本新增内容介绍 Merlin HugeCTR(以下简称 HugeCTR)是 GPU 加速的推荐程序框架,旨在在多个 .... NVIDIA英伟达企业解决方案 发表于 06-17 09:28 • 171次
使用memheap内存管理算法对片内RAM和片外SDRAM进行管理的方法   在开发中由于单片机自带的 RAM 空间比较小,有时候需要扩展片外的 RAM 以供使用,RT-Th.... RT-Thread 操作系统 发表于 06-17 08:53 • 322次
“小马智行杯”广东省大学生程序设计竞赛决出胜负   6月5日,2022年“小马智行杯”广东省大学生程序设计竞赛(GDCPC)经过一天酣战,在线上顺利.... Pony.ai小马智行 发表于 06-16 11:44 • 292次
通过上面的图例,我们可以很清楚地看到,每一轮都会切换一批灯泡。关键是可能切换到之前已经切换过的灯泡,.... 算法与数据结构 发表于 06-16 09:30 • 187次
在标准C语言中编译出来的可执行程序 在标准C语言中,编译出来的可执行程序分为代码区(text)、数据区(data)和未初始化数据区(bs.... 嵌入式应用开发 发表于 06-16 09:01 • 257次
西门子1200/1500远程PLC程序的操作步骤及注意事项 工业智能远程控制终端GRM530能非常快捷的通过4G网络实现西门子1200/1500PLC和编程电脑.... PLC远程通讯 发表于 06-15 08:59 • 572次
提醒一下,用仿真器烧写DSP的FLASH程序完成后,给开发板断电, 然后拔掉仿真器和DSP开发板之间.... 封居强 发表于 06-14 09:57 • 174次
存储器数据的稳定可靠是MCU安全运行的基础,但环境因素和存储器本身的物理特性都可能造成存储器数据异常.... 科技绿洲 发表于 06-13 14:48 • 314次
基于51单片机的OLED显示图片文字 基于51单片机的OLED屏幕显示,可显示图片文字字母等。 王子变青蛙_35400519 发表于 06-12 00:43 • 1835次
蓝房子新式社区程序 ./oschina_soft/gitee-bluehouseapp.zip 发表于 06-10 11:24 •
如何使用Cortex-M MPU来提高嵌入式设备的安全性 Cortex-M 中的 MPU 是一个相当简单的设备。RTOS 负责在每次上下文切换时配置 MP.... 星星科技指导员 发表于 06-10 07:36 • 255次
程序包含了涂胶操作所必需的过程参数。在启动涂胶循环之前,上级控制装置选择程序,为涂胶循环确定常规过程.... 机器人及PLC自动化应用 发表于 06-07 10:24 • 236次
51单片机串口通讯仿真实验 实验目的1.掌握单片机串行口通信的程序设计,及简易三线式通讯的方法。2.了解实现串行通讯的硬.... 发表于 06-07 09:15 •
现场很多控制对象的活动具有对称性,尤其是一些具有互锁关系的动作,对应编写的逻辑处理也应具有对称性,例.... 工控论坛 发表于 06-07 09:11 • 417次
电源A题满分作品PCB+原理图+程序+论文 国赛 15 电源A题满分作品PCB+原理图+程序+论文资料分享 发表于 06-06 11:22 • 135次
51单片机精确延时程序合集 精确延时计算公式:延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5 发表于 06-06 09:35 •