原创 51汇编源码程序库

2009-11-19 09:57 3020 4 4 分类: MCU/ 嵌入式
1、片内RAM初始化子程序
2、片外RAM初始化子程序
3、片外RAM初始化子程序(双字节个单元)
4、内部RAM数据复制程序
5、外部RAM数据复制程序
6、外部RAM数据复制程序
7、外部RAM数据复制到内部RAM程序
8、限幅滤波程序
9、中位值滤波程序
10N点算术平均滤波
11N点加权平均滤波
12、一阶加权滞后滤波程序
13、双字节取补程序
14N节取补程序
15、双字节无符号数加法程序
16N字节无符号数加法程序
17、双字节无符号数减法程序
18N字节无符号数减法程序
19、单字节无符号数乘法程序
20、单字节无符号数乘法程序
21、单字节无符号数乘法程序
22、双字节无符号数乘法程序
23、双字节无符号数乘法程序
24N字节无符号数乘法程序
25、单字节无符号除法程序
26、单字节无符号除法程序
27、双字节无符号除法程序
28N字节无符号除法程序(组合)
29N字节无符号除法程序
30N字节数据左移程序
31、原码有符号双字节减法程序
32、原码有符号双字节加法程序
33、原码有符号双字节乘法程序
34、原码有符号双字节除法程序
35、单字节顺序查找程序
36、单字节顺序查找程序
37、双字节字符串顺序查找程序
38、双字节字符串顺序查找程序
39N字节字符串顺序查找程序
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
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /3 下一条