新闻  |   论坛  |   博客  |   在线研讨会
51汇编源码程序库
0750long | 2009-04-24 14:47:44    阅读:2511   发布文章

51汇编源码程序库

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

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客