首页>>科技 >>内容

51单片机的汇编语言实例,51单片机的汇编程序库

发布时间:2023-11-28 14:38:05编辑:温柔的背包来源:

51单片机的汇编语言实例,51单片机的汇编程序库

很多朋友对51单片机的汇编语言实例,51单片机的汇编程序库不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

以下是51单片机汇编语言编程中常用的一些子程序代码库1、片内ram初始化子程序2、片外RAM初始化子程序3、片外RAM初始化子程序(双字节单位)4、内部RAM数据复制程序5、外部RAM数据复制程序:1023外部ram数据复制程序7、外部RAM数据复制到内部RAM程序8、限幅滤波程序9、中值滤波程序10、N点算术平均滤波。

11、N点加权平均滤波12、一阶加权滞后滤波程序13、双字节补码程序14、N段补码程序15、双字节无符号数加法程序16、N字节无符号数加法程序1。8、N字节无符号数减法程序19、单字节无符号数乘法程序20、单字节无符号数乘法程序21、单字节无符号数乘法程序22、双字节无符号数乘法程序

23、双字节无符号数乘法程序24、N字节无符号数乘法程序25、单字节无符号除法程序27、双字节无符号除法程序28、N字节无符号除法程序字节无符号除法程序30、N字节数据左移程序3010-310

34、原码有符号双字节除法程序35、单字节序列查找程序36、单字节序列查找程序37、双字节字符串序列查找程序38、双字节字符串序列查找程序39、N字节字符串序列查找程序。单字节最大搜索程序41、浮点数序列搜索程序42、浮点数最大搜索程序43、单字节半搜索程序;片内RAM初始化子程序IBCLR: MOVA,R0MOV R1,ACLR A

IBC1:MOV @R1,AINC R1DJNZ R7,IBC1RET片外关于RAMInitialisierung subprozedurenebclr 1:MOV A,阿德普莫夫DPL,阿莫夫A,阿德普莫夫DPH,ACLR CEBC11:MOVX @DPTR,AINC DPTRDJNZ R7,EBC11RET片外关于RAMInitialisierung sub pereduren(Doppelte einheitenebclr 2:MOV A,阿德普莫夫DPL,阿莫夫A,阿德普莫夫DPH,阿莫夫A,R7JZ ebc 21 Inc r 6 ebc 21:CLR AMOVX @ DPTR,AINC DPTRDJNZ R7,EBC21DJNZ R6,EBC21RET内部关于拉姆达滕-Replikationsverfahren;入口R0,R7;使忙碌资源:A

;堆栈Bedrfnisse: 2字节;出口R1IBMOV:MOV A,R0ADD A,R7MOV R0,阿莫夫A,R1ADD A,R7MOV R1,AIBM1:DEC R0DEC R1MOV A,@R0MOV @R1,ADJNZ R7,IBM1RET外部关于拉姆达滕-Replikationsverfahren;入口ADDPH,ADDPL,r7职业资源:ACC堆栈Bedrfnisse: 2字节;出口R0、R1EBMOV1:MOV A、ADDPLADD A、R7MOV DPL、ACLR AADDC A、ADDPHMOV DPH、阿莫夫A、R7ADD A、R1XCH A、R0ADDC A、#00HMOV P2、AEBM11:DEC R0CJNE R0、#0FFH、EBM12DEC P2

EBM12:DEC DPLMOV A,DPLCJNE A,#0FFH,EBM13DEC DPHEBM13:MOVX A,@R0MOVX @DPTR,ADJNZ R7,EBM11RET外部关于拉姆达滕-Replikationsverfahren;入口ADDPH,ADDPL,R6,r7占领资源:ACC堆栈Bedrfnisse: 2字节;出口R0、R1EBMOV2:MOV A、ADDPLADD A、R7MOV DPL、AMOV A、R6ADDC A、ADDPH DPH、AMOV A、R7ADD A、R1XCH A、R0ADDC A、R6MOV P2、AMOV A、r7 JZ EBM 21 Inc R6 EBM 21:DEC R0 cjne R0、#0FFH、EBM22DEC P2EBM22:DEC DPLMOV A、DPL

CJNE A,#0FFH,EBM23DEC DPHEBM23:MOVX A,@R0MOVX @DPTR,ADJNZ R7,EBM21DJNZ R6,EBM21RET外部关于RAMReplizieren von Daten实习生关于随机存取存储程序;入口ADDPH,ADDPL,r7占用资源:ACC堆栈Bedrfnisse: 2字节;出口R0ITEMOV:MOV A,阿德普拉德A,R7MOV DPL,阿莫夫A,阿德帕德C A,#00HMOV DPH,阿莫夫A,R0ADD A,R7MOV R0,AITEM1:DEC R0DEC DPLMOV A,DPLCJNE A,#0FFH,ITEM2DEC DPHITEM2:MOVX A,@DPTRMOV @R0,ADJNZ R7,ITEM1RET格伦兹-过滤器有限公司

;入口:A、SDAT、德尔蒂;使忙碌资源:B;堆栈Bedrfnisse: 2字节;出口:AJUGFILT :MOV B,ACLR CSUBB A,SDATJNC jug ft1 CPL AINC ajugft 1:SETB ASUBB A,#DELTYJNC JUGFT3MOV A,SDATRETJUGFT3:MOV A,BMOV SDAT,ARET;中值滤波器verfahren;入口ADDPH,ADDPL,N;使忙碌资源:ESELSORT堆栈Bedrfnisse:4字节;出口阿梅德菲特:埃尔索尔特莫夫A,NCLR CRRC AADD A,阿德普莫夫DPL A,阿莫夫A,阿德普莫夫DPH,阿金克梅德夫特1尼克DPH

MEDFT1:MOVX A,@ DPTRRETnArithmetische Filterdurchschnitt;入口ADDPH,ADDPL,N;使忙碌资源b、R3、R4;堆栈Bedrfnisse: 2字节;出口AAVFILT:MOV A,阿德普莫夫DPL,阿莫夫A,阿德普莫夫DPH,ACLR阿莫夫R3,阿莫夫R4,阿莫夫R7,NAVFT1:MOVX A,@DPTRINC DPTRADD A,R4MOV R4,AJNC AVFT2INC R3AVFT2:DJNZ R7,AVFT1MOV R7,NMOV R2,#00HLCALL NDIV31MOV A,R4RETnDurchschnittsgewichtete过滤器;入口ADDPH,ADDPL,N;使忙碌资源b,R3,R4

MOV DPTR,#ABTABMOVC A,@A DPTRMUL ABMOV R4,AMOV R3,BMOV A,#01HMOVC A,@A DPTRMOV B,DELTYMUL ABADD A,R4MOV R4,AMOV A,BADDC A,R3MOV R3,AMOV A,R4JNB ACC.7,FT1INC R3FT1:MOV A,R3MOV DELTY,ARETBQTAB:DB 80H,80H;双字节补丁/(R3R4)=(R3R4)入口R3,R4;职业资源:ACC堆栈Bedrfnisse: 2字节;出口R3,R4CMPT:MOV A,R4CPL AADD A,#01HMOV R4,AMOV A,R3CPL AADDC A,#00HMOV R3,ARET

;第n节补码程序/([r0])=([r0]);入口:R0,R7;占用资源:ACC,b;堆栈要求:2字节;出口:r0ncmptn: movb,r0setb cncpt1: mova,@ r0plaaddca,#00HMOV @R0,aincr0rdjnzr7,NCPT1MOV R0,BRET;双字节无符号数加法程序(R3 R4 r6r 7)=(R3 R4);入口:R3,R4,R6,R7;占用的资源:ACC堆栈要求:2字节;出口:R3,R4,CFNADD :MOV A,R4ADD A,R7MOV R4,AMOV A,R3ADDC A,R6MOV R3,ARET。

;n字节无符号数加法程序([r0][R1])=([r0]);入口:R0,R1,R7;占用资源:ACC,b;堆栈要求:2字节;退出:R0,cfnaddn: movb,r0clcnadn1: mova,@R0ADDC A,@R1MOV @R0,aincr0nicr1djnzr7,nadn1 mov0,BRET;双字节无符号数减法程序(r3r 4-r6r 7)=(r3r 4);入口:R3,R4,R6,R7;占用的资源:ACC堆栈要求:2字节;出口:R3,R4NSUB :MOV A,R4CLR CSUBB A,R7MOV R4,AMOV A,R3。

SUBB A,R6MOV R3,ARET;n字节无符号数减法程序([r0]-[R1])=([r0]);入口:R0,R1,R7;占用资源:ACC,b;堆栈要求:2字节;退出:R0,cfnsubn: MOVB,R0MOV R7,ncrcsnubn 1:MOVA,@R0SUBB A,@R1MOV @R0,AINC R0INC R1DJNZ R7,NSUBN1MOV R0,BRET;单字节无符号数乘法程序(r3r 4 * R7)=(r2r3r 4);入口:R3,R4,R7;占用资源:ACC,b;堆栈要求:2字节;出口:R2,R3,R4 nmul21: MOVA,R4。

MOV B、R7MUL ABMOV R4、阿莫夫A、BXCH A、R3MOV B、R7MUL ABADD A、R3MOV R3、ACLR AADDC A、BMOV R2、ACLR ov ret;一个字节程序,用于一个Zeichen(R2R3R4*R7)=(R5R2R3R4)入口R2,R3,R4,R6,r7占领资源:ACC,B;堆栈Bedrfnisse: 2字节;出口R5、R2、R3、R4NMUL31:MOV A、R4MOV B、R7MUL ABMOV R4、阿莫夫A、BXCH A、R3MOV B、R7MUL ABADD A、R3MOV R3、ACLR AADDC A、BXCH A、R2MOV B、R7MUL ABADD A、R2MOV R2、ACLR A

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/R1)=(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)=(CFR0)

;入口: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

以上知识分享希望能够帮助到大家!