原创 MCS-51单片机实用子程序库

2009-8-12 16:29 6811 8 9 分类: MCU/ 嵌入式

MCS-51单片机实用子程序库电子园51单片机学习网ru4{4|1T4E
--------------------------------------------------------------------------------

q*DY j1F0 电子园51单片机学习网dWu!v_1E

MCS-51单片机实用子程序库(一)

%OZ{ tlN.^4V/~0

nWE$I%Oh0内容
d2[)k%{({;g0目前已有若干版本的子程序库公开发表,它们各有特色。本程序库中的开平方算法为快速逼近算法,它能达到牛顿迭代法同样的精度,而速度加快二十倍左右,超过双字节定点除法的速度。

E w2IKo3y K@*H0 电子园51单片机学习网 cAO.k7ez2U$Q:VI

本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订: 电子园51单片机学习网H h6MD!y-P1|


b@/Q)n1Q h!M`0(1)按当前流行的以 IBM PC 为主机的开发系统对汇编语言的规定,读者不必再进行修改,便可直接使用。 电子园51单片机学习网k;fC M}J4Z
(2)对浮点运算子程序库进行了进一步的测试和优化,对十进制浮点数和二进制浮点数的相互转换子程序进行了彻底改写,提高了运算精度和可靠性。
V"eRG/X[ AB0(3)新增添了若干个浮点子程序(传送、比较、清零、判零等),使编写数据处理程序的工作变得更简单直观。

1b2d4i*~)J ~Cc0

S1zV o9ZWzg0在使用说明中开列了最主要的几项:标号、入口条件、出口信息、影响资源、堆栈需求,各项目的意义请参阅《单片机应用程序设计技术》第六章 6.3.7 节的内容。程序清单中开列了四个栏目:标号、指令、操作数、注释。为方便读者理解,注释尽力详细。

{lrAb,I7P4k0

"a;oby5Gxk0子程序库的使用方法如下:

Pn3_&`Y5vb&S0 电子园51单片机学习网Gce*`!O#v

1.将子程序库全部内容链接在应用程序之后,统一编译即可。优点是简单方便,缺点是程序太长,大量无关子程序也包含在其中。 电子园51单片机学习网2Jt7kZ:}"hC
2.仅将子程序库中的有关部分内容链接在应用程序之后,统一编译即可。有些子程序需要调用一些低级子程序,这些低级子程序也应该包含在内。优点是程序紧凑,缺点是需要对子程序库进行仔细删节。 电子园51单片机学习网4?d&G"b;b[7Q


N8q4R5Ao O*c}j0(一) MCS-51定点运算子程序库及其使用说明

XKr-UWt7D0 电子园51单片机学习网Y*z(j(f#t)w

定点运算子程序库文件名为DQ51.ASM,为便于使用,先将有关约定说明如下: 电子园51单片机学习网.zD{wx k*Y5vE7P
1.多字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数 电子园51单片机学习网UQa2@!h*F9E
据。地址小的单元存放数据的高字节。例如:[R0]=123456H,若(R0)=30H,则(30H)=12H,
V#U+p hb:q CEP0ND0(31H)=34H,(32H)=56H。
,zM6p PR2Q zI.|02.运算精度:单次定点运算精度为结果最低位的当量值。 电子园51单片机学习网g^XC*`.r/{
3.工作区:数据工作区固定在PSW、A、B、R2~R7,用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的透明性。 电子园51单片机学习网 d+xFl-K$iU
(1) 标号: BCDA 功能:多字节BCD码加法 电子园51单片机学习网2^+E.e"\v2YQ Z xR
入口条件:字节数在R7中,被加数在[R0]中,加数在[R1]中。 电子园51单片机学习网!o%J5ShoY_'Q
出口信息:和在[R0]中,最高位进位在CY中。
O X&t8~|-u%bFy0影响资源:PSW、A、R2 堆栈需求: 2字节 电子园51单片机学习网}e|\U5xxzl
BCDA: MOV A,R7 ;取字节数至R2中 电子园51单片机学习网8D k7z)x`B_ J3x
MOV R2,A
M;T1d.g9h!F0ADD A,R0 ;初始化数据指针
q.N&ml2yQ e0MOV R0,A
:j n"j J3R`)OA:b ]0MOV A,R2
(K)X$w.b+p0ADD A,R1 电子园51单片机学习网|+J%{G1g2y OPR
MOV R1,A
]b OU[NE0CLR C 电子园51单片机学习网 x9i}:xq6bC
BCD1: DEC R0 ;调整数据指针 电子园51单片机学习网0V2v;ov6}\|!d'E
DEC R1
^@8cR,[\ T0MOV A,@R0 电子园51单片机学习网 eN B*[-TqA
ADDC A,@R1 ;按字节相加 电子园51单片机学习网KZc m'V4v/X
DA A ;十进制调整 电子园51单片机学习网-i3U` pf@
MOV @R0,A ;和存回[R0]中
4|'Oh$Dp9j W;E0DJNZ R2,BCD1 ;处理完所有字节 电子园51单片机学习网\,Osg(EHpz
RET

Y8|U/w p%D M0 电子园51单片机学习网,q)o3k\l

(2) 标号: BCDB 功能:多字节BCD码减法 电子园51单片机学习网!N3h"|E?&E w.{
入口条件:字节数在R7中,被减数在[R0]中,减数在[R1]中。 电子园51单片机学习网gb/iVm}%G
出口信息:差在[R0]中,最高位借位在CY中。 电子园51单片机学习网-I oP)G]D Em$C7Lb
影响资源:PSW、A、R2、R3 堆栈需求: 6字节
j#i#U\vbl^0BCDB: LCALL NEG1 ;减数[R1]十进制取补
O^GbE,IV0LCALL BCDA ;按多字节BCD码加法处理 电子园51单片机学习网 ~7^BbtO
CPL C ;将补码加法的进位标志转换成借位标志
*cd vgf"rB5u4w`0MOV F0,C ;保护借位标志
ci5d9F6c0LCALL NEG1 ;恢复减数[R1]的原始值
YeP c:Q0MOV C,F0 ;恢复借位标志
a5O_,r5s4h0RET 电子园51单片机学习网9y(\wI*U
NEG1: MOV A,R0 ;[R1]十进制取补子程序入口
nrQF/l_ @ r @E0XCH A,R1 ;交换指针
|Jo~YT[4NM)W)_]0XCH A,R0
tE4F t5SC-b0LCALL NEG ;通过[R0]实现[R1]取补
0w I m#J2mW*D0MOV A,R0
/{sL6E;v5o0XCH A,R1 ;换回指针
:G oe1a4gq/v0XCH A,R0 电子园51单片机学习网.E]7Lm8QgA
RET 电子园51单片机学习网| uA;k+c7W4P
 
N[+G2Y;](V0(3) 标号: NEG 功能:多字节BCD码取补

} f!bVWv:t0

)_]#F3D.\&ia @'R4ln0入口条件:字节数在R7中,操作数在[R0]中。
aES3_ T_:Kd7|0出口信息:结果仍在[R0]中。 电子园51单片机学习网!J[A L&Uq c
影响资源:PSW、A、R2、R3 堆栈需求: 2字节
.R-b6x,r` vh2`0NEG: MOV A,R7 ;取(字节数减一)至R2中 电子园51单片机学习网3k5Y dtd IAI
DEC A 电子园51单片机学习网 n Y7} CLi Tr
MOV R2,A 电子园51单片机学习网8bx1r vQPFaI/W&g
MOV A,R0 ;保护指针
%J[E'Z g]qD0MOV R3,A
P4D\M!Df0NEG0: CLR C
2|+`u6hl W0MOV A,#99H
F @f3n5N ]'R'_Q0SUBB A,@R0 ;按字节十进制取补 电子园51单片机学习网9D0{ b\0}E3o
MOV @R0,A ;存回[R0]中
R[$l8v FxE:^0INC R0 ;调整数据指针 电子园51单片机学习网o;W;|sCyGY
DJNZ R2,NEG0 ;处理完(R2)字节 电子园51单片机学习网foY$\t5xLU
MOV A,#9AH ;最低字节单独取补
+Ar\U&Sv8J |3J0SUBB A,@R0
d.M9] t_0MOV @R0,A
b/w8b$@|W0MOV A,R3 ;恢复指针 电子园51单片机学习网 r3qj |.G1n
MOV R0,A
&wYi9[N%zSg0RET

8Xa&ISv/lG9}J0 电子园51单片机学习网$B~N R\3Af$`

(4) 标号: BRLN 功能:多字节BCD码左移十进制一位(乘十) 电子园51单片机学习网8oe)u]"}r|
 
^)w!_{W"S"FC0入口条件:字节数在R7中,操作数在[R0]中。 电子园51单片机学习网 K\+G/y`#OF.K
出口信息:结果仍在[R0]中,移出的十进制最高位在R3中。 电子园51单片机学习网Alx M3W
影响资源:PSW、A、R2、R3 堆栈需求: 2字节 电子园51单片机学习网 }{u.H7Q
BRLN: MOV A,R7 ;取字节数至R2中
-mc-vnp0i0MOV R2,A 电子园51单片机学习网-{M3x(}1l-_W
ADD A,R0 ;初始化数据指针
I6R|*[1Mf0MOV R0,A 电子园51单片机学习网(\)\pM!Tj
MOV R3,#0 ;工作单元初始化
%x}r C2~X!v"yb0BRL1: DEC R0 ;调整数据指针 电子园51单片机学习网r4d(o6l5|S
MOV A,@R0 ;取一字节 电子园51单片机学习网 E6rwj!^-]
SWAP A ;交换十进制高低位 电子园51单片机学习网^dI%to }'A"v2i Ms
MOV @R0,A ;存回
|4}#{8q'c9J%d]8mV0MOV A,R3 ;取低字节移出的十进制高位 电子园51单片机学习网"D5J2M9D @g
XCHD A,@R0 ;换出本字节的十进制高位 电子园51单片机学习网G\p qdU?Ik
MOV R3,A ;保存本字节的十进制高位 电子园51单片机学习网+cC$tA'SyhE&G
DJNZ R2,BRL1 ;处理完所有字节
_7m1}b6]M*L.x%qCt0RET 电子园51单片机学习网Ssk x#\#u$G.Cxj
 
a$n CqHXZQ+Wc0(5) 标号: MULD 功能:双字节二进制无符号数乘法
D7J9Wnh&E0  电子园51单片机学习网ET)meGK`2h
入口条件:被乘数在R2、R3中,乘数在R6、R7中。 电子园51单片机学习网v.AB(i2X/^3X
出口信息:乘积在R2、R3、R4、R5中。
%F2e7d%p8WtT |`0影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
%n/g#^C+\\v$o {0MULD: MOV A,R3 ;计算R3乘R7 电子园51单片机学习网+z/Ulc3k'}Nj'K&~
MOV B,R7 电子园51单片机学习网 x _(qR ]#^ c Z@"m
MUL AB 电子园51单片机学习网kbT8d%ft!aC
MOV R4,B ;暂存部分积
KY2LvP5Y~*_ e+m0MOV R5,A
+r3\8l;d4M/BRh%D0MOV A,R3 ;计算R3乘R6
(V!eQ Aj BV+p0MOV B,R6
1JT9b~,t+x%|8o/X*Y0MUL AB 电子园51单片机学习网 uUx'?&H2] wm f#_
ADD A,R4 ;累加部分积
DqXs(fr0MOV R4,A 电子园51单片机学习网xO6NtM.vm-D$r
CLR A
3r+`vso `0ADDC A,B 电子园51单片机学习网:A0H z;R[dG*C"V.p
MOV R3,A 电子园51单片机学习网uz_q!Z&CU
MOV A,R2 ;计算R2乘R7 电子园51单片机学习网 Ce7_@h"M
MOV B,R7
:N/OH$jLd2K(G7C8i-N0MUL AB 电子园51单片机学习网7t.l^*CH_
ADD A,R4 ;累加部分积 电子园51单片机学习网8s\ ]1gGg
MOV R4,A
IyP;P5k'[!x!Qd#{0MOV A,R3
&xF2g:p+^&M1ckdi0ADDC A,B 电子园51单片机学习网+`%]~q&|E![!t
MOV R3,A 电子园51单片机学习网{,pY]u
CLR A
%L#lQ.bet3y*lql'o0RLC A 电子园51单片机学习网T2IR,yc`dP)r WZ
XCH A,R2 ;计算R2乘R6
o$CQm'r6sH9[W0MOV B,R6 电子园51单片机学习网k @W%D'u;X(],h3u
MUL AB 电子园51单片机学习网!M.ox"HE0E3Bb#_7g
ADD A,R3 ;累加部分积
0a2qmgrz%z,pn0MOV R3,A
{6`%uDs9fl0MOV A,R2
~ u5m4x.D8Jq0ADDC A,B 电子园51单片机学习网QH0l%sH3W_6~
MOV R2,A 电子园51单片机学习网N9Z%J \0t#QU8r%N!{
RET 电子园51单片机学习网8] H*H#J~ VZ4ak#m

电子园51单片机学习网 Pe&ZuQih@

(6) 标号: MUL2 功能:双字节二进制无符号数平方
q'x'kkz"R2u0  电子园51单片机学习网/p+X#Bj%x z
入口条件:待平方数在R2、R3中。
9QMF6b7quw0出口信息:结果在R2、R3、R4、R5中。
h(VR*[ Q4tm?0影响资源:PSW、A、B、R2~R5 堆栈需求: 2字节 电子园51单片机学习网,V]B~6xOBN
MUL2: MOV A,R3 ;计算R3平方
Y n!G,X%i:|fy0MOV B,A
!fj3]%{)Q!k*v4G F0MUL AB
+B[](n9@0pE0MOV R4,B ;暂存部分积
Gef:V I0e$q"h)_r0MOV R5,A
.?-r(em+TXKC{x0MOV A,R2 ;计算R2平方
K;f*V:vG\#j0MOV B,A 电子园51单片机学习网O"CStH9D Y
MUL AB 电子园51单片机学习网0s9YYy%oql
XCH A,R3 ;暂存部分积,并换出R2和R3
6\Sp6j7v}z0XCH A,B 电子园51单片机学习网"Oz\j!u
XCH A,R2
(P'T5Iq4U(v NW5Lc0MUL AB ;计算2×R2×R3
&?AkU.{#zVB'{0CLR C
&D*o+B bM0RLC A 电子园51单片机学习网 xD0p(x%xc*PPM1]p
XCH A,B 电子园51单片机学习网3~5T is"dUp.{
RLC A
OV ri.uf0JNC MU20
EMj3l+Q+k t5vd0INC R2 ;累加溢出量
&rXO;@9q0MU20: XCH A,B ;累加部分积 电子园51单片机学习网1]1x a"};BXLo
ADD A,R4
~h\2[(c.N6zy?0MOV R4,A
K#J2[D9`KO$sMG!C1B0MOV A,R3
6C oxf.]S0D0ADDC A,B 电子园51单片机学习网Im[Hh] Rv'G,e
MOV R3,A 电子园51单片机学习网 j jk'W1e7W!d
CLR A
3JIK,q|~wq2K0ADDC A,R2
P t8F"w;p0MOV R2,A
6M gZ|c4I4j3o0RET 电子园51单片机学习网 ]Dr#}3MKkp

电子园51单片机学习网0Ug r"Zl i

(7) 标号: DIVD 功能:双字节二进制无符号数除法 电子园51单片机学习网0_!O:MyB_8U B

电子园51单片机学习网X tZ gg

入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
J T d)L/L.t0出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。 电子园51单片机学习网Zk"?[%pGgdx
影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节
+NJ1Imm*im]W|0DIVD: CLR C ;比较被除数和除数
'`GH3Q"a Th0MOV A,R3 电子园51单片机学习网&x F v Qk q.AMV
SUBB A,R7
%\zm-[%eH-sXk_0MOV A,R2 电子园51单片机学习网-B-d4ms [2{Ta-TE
SUBB A,R6
-\G$W&[6p0JC DVD1
&T\ h.ok5{0SETB OV ;溢出 电子园51单片机学习网 u0y"M,ckzr0h
RET
6Z\v O A Rx a0DVD1: MOV B,#10H ;计算双字节商 电子园51单片机学习网 ]'y_h*u.D-HFk
DVD2: CLR C ;部分商和余数同时左移一位
+W`i(FW7l5t8vB4Q,D0MOV A,R5
2h#U F7D,\|,\TF:d0RLC A 电子园51单片机学习网G!]v-F&a tU8a-}
MOV R5,A
-C&]`%w;b2pA/_(v0MOV A,R4 电子园51单片机学习网(s/x W Cb S!b X
RLC A
2nN~i-ahnq(~ ?0MOV R4,A 电子园51单片机学习网3~'D*w)z2T-T pL2c
MOV A,R3 电子园51单片机学习网OtPXwu$J
RLC A 电子园51单片机学习网G5t)t?X p[s?
MOV R3,A
~:V|G6w mu*{'u0XCH A,R2
k1OarXr0RLC A
K3e H3H-]0XCH A,R2
?&dk\|#S[&D0MOV F0,C ;保存溢出位 电子园51单片机学习网_`7H9{,Ir
CLR C
D dz8_$p$E F0SUBB A,R7 ;计算(R2R3-R6R7) 电子园51单片机学习网@1YJ^G:Z
MOV R1,A 电子园51单片机学习网7VKg R2C4{+f
MOV A,R2
-HSep D(E0SUBB A,R6
1E:tyd/D.Qs{%c$\h0o5O0ANL C,/F0 ;结果判断 电子园51单片机学习网-TxpJHj `/O }
JC DVD3
$vG5J rH0h%gN}*_/s5^n0MOV R2,A ;够减,存放新的余数
!{,_ DjY {0MOV A,R1
bv.|"z!u0MOV R3,A
1N.\9]wgIoeK0INC R5 ;商的低位置一 电子园51单片机学习网?|q%F!hZ
DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5) 电子园51单片机学习网o?.{5O0gQ,[E
MOV A,R4 ;将商移到R2R3中 电子园51单片机学习网4?#H)?+P} x-e r
MOV R2,A
TGzs*A q&S4P VQ0MOV A,R5 电子园51单片机学习网bhCGS A
MOV R3,A 电子园51单片机学习网 [2x3mIi
CLR OV ;设立成功标志 电子园51单片机学习网@"FHy*mn(c0v z {
RET 电子园51单片机学习网6Yd(k*?(B z
 
&T,[5k u4r0ZYUC b0(8) 标号: D457 功能:双字节二进制无符号数除以单字节二进制数

'q)y5B7oG)]M,O0 电子园51单片机学习网2M6R/j a.R%MY%Sz$h

入口条件:被除数在R4、R5中,除数在R7中。
;T-M|-d }/L0出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。 电子园51单片机学习网/AL} Ak
影响资源:PSW、A、R3~R7 堆栈需求: 2字节
$| A(H&sY0D457: CLR C 电子园51单片机学习网U#@K7I-N^$KK3k
MOV A,R4 电子园51单片机学习网 CD/V|$d xmv
SUBB A,R7 电子园51单片机学习网n!u Q)W}7PUMS9u
JC DV50
;jf/SbV2?0SETB OV ;商溢出
r/L{%J*~p]0RET 电子园51单片机学习网4DIt#hl \:B
DV50: MOV R6,#8 ;求平均值(R4R5/R7-→R3) 电子园51单片机学习网1@5\&f!Vs-w v
DV51: MOV A,R5 电子园51单片机学习网 Y{%r]rj
RLC A
z:y;P"KrP7J!V`0MOV R5,A 电子园51单片机学习网%|E2O$Zcx*d9ks0[$b
MOV A,R4
%H C%r9HF l0RLC A 电子园51单片机学习网 M Hl`\7x|o*i
MOV R4,A
,lbhY$[&oBsc Lc-[0MOV F0,C 电子园51单片机学习网.hk3[iw7jh'[
CLR C
~X_Xa*y&Ck@0SUBB A,R7
Zk w)eu[#?xi0ANL C,/F0 电子园51单片机学习网'~uVW"YS@
JC DV52
n)E:m2ubpGw0y0MOV R4,A 电子园51单片机学习网$Th,g*WS6|d!e3a:`%]
DV52: CPL C
}Dt} AS,M7T0MOV A,R3
v$E5U#ph&}8q0RLC A
?~:W/["\!R0MOV R3,A
,d(GYOy-ck;k:eP0DJNZ R6,DV51
{1Q8H^Uw0MOV A,R4 ;四舍五入 电子园51单片机学习网!IN)g.m-Ify@
ADD A,R4
&z D&d#nh;Q0JC DV53 电子园51单片机学习网q1`Ktm,EL
SUBB A,R7 电子园51单片机学习网Np Y8AYc#N6W8N
JC DV54
B}9l;{ O#i f&J0DV53: INC R3
-K p'Z%`dCK A0DV54: CLR OV
AL M J5H(~LsV0RET
L@L,B}Ug1M2m0  电子园51单片机学习网#f9{,w`(m B;]:a,DvN&o
(9) 标号: DV31 功能:三字节二进制无符号数除以单字节二进制数

0v0r}X1I.U^6r [%O0

7d0{ l*?Mzj0入口条件:被除数在R3、R4、R5中,除数在R7中。
z!yt[5\U"[3f)Jv$R@O0出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。 电子园51单片机学习网 f5xM*f5dgLQT(\
影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节 电子园51单片机学习网.w _"n a|D$WkC
DV31: CLR C
E|BN'OZv5w'?%q0MOV A,R3 电子园51单片机学习网`rq-S4y0r:O)~&r
SUBB A,R7 电子园51单片机学习网9V$W]&YMS
JC DV30 电子园51单片机学习网~'Uy,tDpi}
SETB OV ;商溢出 电子园51单片机学习网,mP LkJ$j-M:H]
RET 电子园51单片机学习网4br!T/j5^J
DV30: MOV R2,#10H ;求R3R4R5/R7-→R4R5 电子园51单片机学习网$[ X7CS;g J/q1N
DM23: CLR C 电子园51单片机学习网2c9dh:y _:O$D^
MOV A,R5
ap O~??8mSFk0RLC A 电子园51单片机学习网w)` Jw8VL~y
MOV R5,A
MH^ ar)R8eO0MOV A,R4 电子园51单片机学习网!c5emw` mZ
RLC A
/Z3em!rE"zXB0MOV R4,A 电子园51单片机学习网X$u$r-w w
MOV A,R3
S*IL5y)FNo0RLC A
qYrqY&psJ(A0MOV R3,A 电子园51单片机学习网)He;y7} F7^,E cnr0I0r
MOV F0,C
z#nX#_:i3p2ce&w5?!y0CLR C 电子园51单片机学习网%K!lB MG9~l-@4?x
SUBB A,R7
N'gn ?5c@]0ANL C,/F0 电子园51单片机学习网i9~"hS1B.s6c^*To
JC DM24
Wn0A"y:X0MOV R3,A
};HbG ZwY:a0INC R5 电子园51单片机学习网l N$B$Z9J(V
DM24: DJNZ R2,DM23
6nY oP/i8Oij1i+O0MOV A,R3 ;四舍五入
*DC~E+bK+Y0ADD A,R3 电子园51单片机学习网pg"k [.x@ Cp
JC DM25 电子园51单片机学习网D;Y+Kk"sEJsU
SUBB A,R7
3I-Z j*|3T?0]d0JC DM26 电子园51单片机学习网 |?s.e)| s6g
DM25: INC R5 电子园51单片机学习网d0d3p7J Q;@9I/@ d
MOV A,R5 电子园51单片机学习网? uY3L:V
JNZ DM26 电子园51单片机学习网vKm"BO,h
INC R4 电子园51单片机学习网Au]v_%B[
DM26: CLR OV 电子园51单片机学习网u"zwn;V2z
RET ;商在R4R5中
1e i7[9f yh0  电子园51单片机学习网x,Cc V\*mg(Q&W'L(K
(10) 标号: MULS 功能:双字节二进制有符号数乘法(补码)

}4S"dw`l0 电子园51单片机学习网0?T @U#U$T#z'y

入口条件:被乘数在R2、R3中,乘数在R6、R7中。
'J8\,U5\7z(W8EA'\0出口信息:乘积在R2、R3、R4、R5中。
1L'|8`zmVNZ0影响资源:PSW、A、B、R2~R7 堆栈需求: 4字节 电子园51单片机学习网[4{$R4C_b0_
MULS: MOV R4,#0 ;清零R4R5 电子园51单片机学习网#Z%r#nr@
MOV R5,#0
_JC%Z2Ez W0LCALL MDS ;计算结果的符号和两个操作数的绝对值
*^J$h%KsI;`0LCALL MULD ;计算两个绝对值的乘积 电子园51单片机学习网6_i,Ei]8L
SJMP MDSE ;用补码表示结果 电子园51单片机学习网+hJFk1?(t"M7ybA

电子园51单片机学习网-o#p:^b;j&y'wJ


*B P'|0l!iQYF^:h0MCS-51单片机实用子程序库(二)电子园51单片机学习网.c6@zX%ma#YT1H


9R/g!~v F4X6Y!{D0--------------------------------------------------------------------------------电子园51单片机学习网R,~ Z'_8n QX


6s#M a1`%oKs0r vb0MCS-51单片机实用子程序库(二)

#B/o^0{/E u;ee0 电子园51单片机学习网i"x Fyx B&K$A

(11) 标号: DIVS 功能:双字节二进制有符号数除法(补码) 电子园51单片机学习网 W/c-F|;c6?


7P Y1h,EbX4H%W5tXD6M0入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
gJO"U|/Rh*I.Y?0出口信息:OV=0时商在R2、R3中,OV=1时溢出。 电子园51单片机学习网s1XI7YU"qV
影响资源:PSW、A、B、R1~R7 堆栈需求: 5字节 电子园51单片机学习网/UXj FK9V&b$r
DIVS: LCALL MDS ;计算结果的符号和两个操作数的绝对值
"{(tu;U*ox/nvS$v0PUSH PSW ;保存结果的符号 电子园51单片机学习网h6d(rDQ.s*c
LCALL DIVD ;计算两个绝对值的商
(Xj ~/Q)}0JNB OV,DVS1 ;溢出否? 电子园51单片机学习网-P hN'F`)t$T
POP ACC ;溢出,放去结果的符号,保留溢出标志 电子园51单片机学习网5NH;\/l g3n*w
RET 电子园51单片机学习网7m,f~)y0z+f#E y,j
DVS1: POP PSW ;未溢出,取出结果的符号
l7k2P A6[,I4K6L n0MOV R4,#0 电子园51单片机学习网D2A~#NQ0lT%l
MOV R5,#0 电子园51单片机学习网0N0w_0_i
MDSE: JB F0,MDS2 ;用补码表示结果
}(w/S9BMJ5t3I ]0CLR OV ;结果为正,原码即补码,计算成功 电子园51单片机学习网y f&q_||f:}
RET 电子园51单片机学习网QG7]%WN U.vn$iU
MDS: CLR F0 ;结果符号初始化 电子园51单片机学习网CgX8W.{?P5b6^dS
MOV A,R6 ;判断第二操作数的符号 电子园51单片机学习网 i9c.d0w_:`;X
JNB ACC.7,MDS1;为正,不必处理
ow J9s6b/y$q-t:l0CPL F0 ;为负,结果符号取反
Vk8jc6\5_'c `Z0XCH A,R7 ;第二操作数取补,得到其绝对值 电子园51单片机学习网\b7v K,tg6Y'Y
CPL A
7I(@3sK Jc8SvTyS0ADD A,#1 电子园51单片机学习网fZj,C'd~
XCH A,R7
` e8V/a4E0CPL A 电子园51单片机学习网B/U CDiF'x'd2gU*]:Z
ADDC A,#0 电子园51单片机学习网Q]hm1EV;h^
MOV R6,A
#SYUk?1B#Bf0MDS1: MOV A,R2 ;判断第一操作数或运算结果的符号 电子园51单片机学习网?4n p[B1zb
JNB ACC.7,MDS3;为正,不必处理
]&L@M:wa0CPL F0 ;为负,结果符号取反 电子园51单片机学习网qpkTC5w4Gr9w
MDS2: MOV A,R5 ;求第一操作数的绝对值或运算结果的补码 电子园51单片机学习网9y1q[2nqp9K2yF
CPL A 电子园51单片机学习网g_K5RN7[.RR
ADD A,#1
Wb JvM_;wz%V.K:Z0MOV R5,A
Ys(y!S{-^ }e\0MOV A,R4 电子园51单片机学习网IK.M.k)mw}B0T&L
CPL A
OM2@$v6T%e0ADDC A,#0
m+e`,M*X&a0MOV R4,A
C c"o.K0K1MF0MOV A,R3 电子园51单片机学习网 [-Q+UKv
CPL A 电子园51单片机学习网7`%sE6Ko P
ADDC A,#0
:Y?u~ eNI0MOV R3,A 电子园51单片机学习网 QC^?}2e&[o[ M
MOV A,R2
]"n[ p-f,X1Bldx0CPL A
1v-~*y'C7U Q T7R0ADDC A,#0 电子园51单片机学习网*J:EDuqe&YLM+]^8kM5Y
MOV R2,A
:j(s8I(oDcKv po0MDS3: CLR OV ;运算成功
h7uX ?7i0RET
V9o.V6Qz4Y0 
#QR;d0B[0(12) 标号: SH2 功能:双字节二进制无符号数开平方(快速)

^oH"V ^4c*_*z'F0 电子园51单片机学习网!S3Nd^&t;[-O,|

入口条件:被开方数在R2、R3中。
5]~"sY*b;J;\.\I0出口信息:平方根仍在R2、R3中,整数部分的位数为原数的一半,其余为小数。
B8q)tDQE.yi0影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节 电子园51单片机学习网:S9Z0Q_.q y-?1JU![
SH2: MOV A,R2 电子园51单片机学习网N jr)z:P;z+k k%\d
ORL A,R3 电子园51单片机学习网E6K(J$t@ h6e#H
JNZ SH20
h!Lf;rxH0RET ;被开方数为零,不必运算
k4j,N n+GeNr n0SH20: MOV R7,#0 ;左规次数初始化 电子园51单片机学习网'U&Ca3qW m@
MOV A,R2 电子园51单片机学习网+?:b2G2sAX j5P
SH22: ANL A,#0C0H ;被开方数高字节小于40H否? 电子园51单片机学习网!\3z s-[c Y
JNZ SQRH ;不小于40H,左规格化完成,转开方过程 电子园51单片机学习网3U.|M*O7H;@S
CLR C ;每左规一次,被开方数左移两位
T*~FYvR}Y0q0MOV A,R3 电子园51单片机学习网E.{'_LgiVjL
RLC A 电子园51单片机学习网4{5d QFrh:}r
MOV F0,C 电子园51单片机学习网+_ F%t._5d S
CLR C
2o3we?w{,W/F g[g0RLC A
U4w x&[G7Pqu0MOV R3,A
6a9g:]'pJ/F v0MOV A,R2 电子园51单片机学习网m ~ dR}1bWU:i
MOV ACC.7,C 电子园51单片机学习网"jFJ oJ"W(S
MOV C,F0 电子园51单片机学习网 j0tB5OQSL
RLC A
,\E7fT%?)y0RLC A
*|#A(O0xX0MOV R2,A 电子园51单片机学习网0u:HY s Vh+`7qmm
INC R7 ;左规次数加一
+N pa'p oS [VFv_n0SJMP SH22 ;继续左规 电子园51单片机学习网^Z#O oy ` e)^5h
  电子园51单片机学习网P EJZ9\0I
(13) 标号: SH4 功能:四字节二进制无符号数开平方(快速)

^K] O8fz h0 电子园51单片机学习网$m@,h`MW ^

入口条件:被开方数在R2、R3、R4、R5中。 电子园51单片机学习网@9}U.IuGH
出口信息:平方根在R2、R3中,整数部分的位数为原数的一半,其余为小数。
4F4PT?+a"S _?&}0影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节 电子园51单片机学习网 g K {pr]z
SH4: MOV A,R2
qV3fQ3V:C l5Q0ORL A,R3
v8ZM0[6Ygz @K0ORL A,R4
"m h ^0U.T_ B0U:v'RrJ0ORL A,R5
4y.~!h&n6Ghj/_0JNZ SH40
m.sE| hO^4`$~O!p0RET ;被开方数为零,不必运算 电子园51单片机学习网~6wp&_6q x-pI+SAd-U
SH40: MOV R7,#0 ;左规次数初始化
\Z Ed;[&y0MOV A,R2
x|3Gjq0SH41: ANL A,#0C0H ;被开方数高字节小于40H否? 电子园51单片机学习网!sV/B#e6B#X:}Kv!d
JNZ SQRH ;不小于40H,左规格化完成
7b GU |-p ne0MOV R6,#2 ;每左规一次,被开方数左移两位 电子园51单片机学习网$V R!eI5Pg3Z.I
SH42: CLR C ;被开方数左移一位
au3Rp5jImxFj'xb0MOV A,R5
{;_I"BMM|0RLC A
%Mj8^6bBPE0MOV R5,A 电子园51单片机学习网#b-U,e9g+U$V&j]
MOV A,R4 电子园51单片机学习网R5a1G*Q7vj;YJ
RLC A 电子园51单片机学习网+klb^2L5Q}uD1m
MOV R4,A
(t3X&z._nr|['A R"s$v0MOV A,R3 电子园51单片机学习网^)J]3Z&lv6T
RLC A 电子园51单片机学习网'Xll0X$e8F0Y A
MOV R3,A 电子园51单片机学习网 sz,J{~
MOV A,R2 电子园51单片机学习网#s*te2V] hzYE0quw
RLC A 电子园51单片机学习网:psI8y m
MOV R2,A
7uu J0Gw(H0DJNZ R6,SH42 ;被开方数左移完两位
9v P fjx&Y b"g*L)I6k0INC R7 ;左规次数加一 电子园51单片机学习网IV\iBz2o/t;S
SJMP SH41 ;继续左规
h+D/zx9XUr*d0SQRH: MOV A,R2 ;规格化后高字节按折线法分为三个区间 电子园51单片机学习网y;tu~-Ab{
ADD A,#57H 电子园51单片机学习网H0i)[ n"c0uO
JC SQR2 电子园51单片机学习网Z,S lROO2z%E
ADD A,#45H 电子园51单片机学习网;K&A"B2t \ZB&z;Fw
JC SQR1
!|T(kN6mgC,p3c:AR0ADD A,#24H
X/r*b0E1nJF"M V(lW0MOV B,#0E3H ;第一区间的斜率
2t%R!eR5v D m_)`7u0MOV R4,#80H ;第一区间的平方根基数 电子园51单片机学习网U0BmD%P
SJMP SQR3 电子园51单片机学习网 o5}k#B&o&Ci6C
SQR1: MOV B,#0B2H ;第二区间的斜率 电子园51单片机学习网 Yd8Z I'B [``o
MOV R4,#0A0H;第二区间的平方根基数 电子园51单片机学习网2vSS'Yxr
SJMP SQR3 电子园51单片机学习网P8tQg7`1y
SQR2: MOV B,#8DH ;第三区间的斜率
IfmHRH,l$`Nw?0MOV R4,#0D0H;第三区间的平方根基数
~9f!F4z Su%aJG?0SQR3: MUL AB ;与区间基点的偏移量乘区间斜率
{Z%OA.FZ7l3Z0MOV A,B
)w J ]P,[ ?+X8^0ADD A,R4 ;累加到平方根的基数上
3Mi wz#A~ w0MOV R4,A 电子园51单片机学习网8mM*AZzm m
MOV B,A 电子园51单片机学习网5v8fK8a5\#m)j/C4E.Og
MUL AB ;求当前平方根的幂 电子园51单片机学习网![0y}2ZR)m&m
XCH A,R3 ;求偏移量(存放在R2R3中) 电子园51单片机学习网 fVm#O3@
CLR C 电子园51单片机学习网&P-W w%b$Hh.J5NCF
SUBB A,R3 电子园51单片机学习网 k#{ QMdj ^f
MOV R3,A 电子园51单片机学习网,DL({j1m0S }F
MOV A,R2
.xHn$Mh[w(tigH0SUBB A,B 电子园51单片机学习网Em'M0Q1qH0j
MOV R2,A 电子园51单片机学习网r*mQ$nK1Zn_s
SQR4: SETB C ;用减奇数法校正一个字节的平方根 电子园51单片机学习网4v&sp y*G
MOV A,R4 ;当前平方根的两倍加一存入R5R6中 电子园51单片机学习网F4Y%~I+} t'Sk
RLC A 电子园51单片机学习网.~,_mC]'_R2zL${
MOV R6,A
|E;X.C1M.{e la t0CLR A 电子园51单片机学习网 PN B:Dr%|%D/I
RLC A
P4RFz;g$Gg-k/F0MOV R5,A
l^3y9S2NZ2G0MOV A,R3 ;偏移量小于该奇数否?
2[}2[h(TcR0SUBB A,R6 电子园51单片机学习网;x K3DcQ3F RiUf
MOV B,A 电子园51单片机学习网n a0A L#W.L@f9n2UY
MOV A,R2
DF9{/i f0SUBB A,R5
o#l uG~pK$e9C0JC SQR5 ;小于,校正结束,已达到一个字节的精度 电子园51单片机学习网AK%H3VM
INC R4 ;不小于,平方根加一 电子园51单片机学习网Qh#E3p&h,?-{_
MOV R2,A ;保存新的偏移量
q([nw`ni J-a0MOV R3,B
+N X;X0fP ]:r"H^0SJMP SQR4 ;继续校正 电子园51单片机学习网;?Os'W1K
SQR5: MOV A,R4 ;将一个字节精度的根存入R2 电子园51单片机学习网h.d)r(\]2p"t
XCH A,R2
#dz:d B2_0RRC A
`l0t5^H4|b M0MOV F0,C ;保存最终偏移量的最高位
#S^s9t T4z,e0MOV A,R3
#q4I F"p0Z8e.Ejd0MOV R5,A ;将最终偏移量的低八位存入R5中 电子园51单片机学习网5nI/qj@ L8J c
MOV R4,#8 ;通过(R5R6/R2)求根的低字节 电子园51单片机学习网9K;~W){ ]"C'o?P
SQR6: CLR C
M Px!g%W|0MOV A,R3 电子园51单片机学习网5p/ZTLi8lP%E6A
RLC A
Fv I0T v0MOV R3,A
x!@mWKz_gq0CLR C
;d!}e"Y5z%wW(rj0MOV A,R5 电子园51单片机学习网9a1r3QK&m#i~-QVR:w
SUBB A,R2 电子园51单片机学习网1e M-A w+b*@%H!d.O\
JB F0,SQR7 电子园51单片机学习网o\.I!q?C-ixk
JC SQR8
f tp+qt0SQR7: MOV R5,A 电子园51单片机学习网;{OfR)IP-n
INC R3 电子园51单片机学习网f BVE;uC
SQR8: CLR C 电子园51单片机学习网%e BB#A3w!q(o
MOV A,R5 电子园51单片机学习网7D8KE/L!K7J+eK y
RLC A 电子园51单片机学习网6l Z'w:KQg z I+]
MOV R5,A 电子园51单片机学习网e3d~G;d0\5H
MOV F0,C
uV*{#l7N"|/O"F:E;x0DJNZ R4,SQR6 ;根的第二字节计算完,在R3中
*P/v3c Pi_W DQ1Y)a0MOV A,R7 ;取原被开方数的左规次数
JK?(g!a"FM0JZ SQRE ;未左规,开方结束
:X6O3U4N8FWl0SQR9: CLR C ;按左规次数右移平方根,得到实际根
Lc3R}of0MOV A,R2 电子园51单片机学习网@yZuZDhJt(@(nv
RRC A
6{7]:^9xL*P%Vx@0MOV R2,A
;aGd"tL&B0MOV A,R3
cdsO6M x0RRC A
%B0e3c#_A q$p,L0MOV R3,A
d/S/t?,z:C0DJNZ R7,SQR9
/s!Q"Z:Ai O[T'X ~0SQRE: RET
a){j1J~1dU0  电子园51单片机学习网nQS7f8p
(14) 标号: HASC 功能:单字节十六进制数转换成双字节ASCII码 电子园51单片机学习网D!N)R+p8RT

电子园51单片机学习网 Zqe{ V

入口条件:待转换的单字节十六进制数在累加器A中。
'F;^!n;U%gk1w9RQ0出口信息:高四位的ASCII码在A中,低四位的ASCII码在B中。 电子园51单片机学习网-eN Aj'c?5x4y:UF6S
影响资源:PSW、A、B 堆栈需求: 4字节
(l2RC7zd9kc@0HASC: MOV B,A ;暂存待转换的单字节十六进制数 电子园51单片机学习网;[M N&e%urK
LCALL HAS1 ;转换低四位 电子园51单片机学习网+K(r7r.A F%DF ^
XCH A,B ;存放低四位的ASCII码 电子园51单片机学习网-gj2LLJ&W}
SWAP A ;准备转换高四位 电子园51单片机学习网*Ix2t^PR
HAS1: ANL A,#0FH ;将累加器的低四位转换成ASCII码
2Y Zu8A$M W/v0ADD A,#90H
&K+O0~ oU0DA A 电子园51单片机学习网`GJL%O)KB0p
ADDC A,#40H
'^'u0U6[&j?Q'q?i#A0DA A 电子园51单片机学习网Vp N m n(]E
RET
)t `)^?;f.j j~D.?0 
W;y-R v}X%\0(15) 标号: ASCH 功能:ASCII码转换成十六进制数

VsP u,a@l0

+q%Cmp(~0入口条件:待转换的ASCII码(30H~39H或41H~46H)在A中。 电子园51单片机学习网 Bp2^f3a,x `5f#u J6i
出口信息:转换后的十六进制数(00H~0FH)仍在累加器A中。
xH;?!g;_+k#Ma.J.j0影响资源:PSW、A 堆栈需求: 2字节 电子园51单片机学习网3V/?7y"R(y1hfcc
ASCH: CLR C 电子园51单片机学习网}7Ac!H3|An
SUBB A,#30H 电子园51单片机学习网zT8j O2D4V6uS
JNB ACC.4,ASH1
Q!{:j%q-I0SUBB A,#7 电子园51单片机学习网6QT d3z'{
ASH1: RET 电子园51单片机学习网K5yAO@9PBS1AG
  电子园51单片机学习网T"d j.`,G'h
(16) 标号:HBCD 功能:单字节十六进制整数转换成单字节BCD码整数

4O#h/X{Z_!rj0

D9T(CIPD"n$oZs0入口条件:待转换的单字节十六进制整数在累加器A中。
H4d5Y*o1?v;O(HWZXR7S0出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
p$Fv4vOq*t0影响资源:PSW、A、B、R3 堆栈需求: 2字节
q:d(D|^ m/?[0HBCD: MOV B,#100 ;分离出百位,存放在R3中 电子园51单片机学习网!\$C`/`/D"p`@ v
DIV AB
(xtr!m&o(H8f0MOV R3,A 电子园51单片机学习网V4H#AI/Y P#P(oK
MOV A,#10 ;余数继续分离十位和个位
[aH-](|(b+A0XCH A,B
B @-y6hj%m B0DIV AB 电子园51单片机学习网+x&s(IUW6D`
SWAP A 电子园51单片机学习网RN3V+_ V;Wp3P
ORL A,B ;将十位和个位拼装成BCD码
;?c0\$Pf U7U\j0RET
W'N n r^6WW3{0  电子园51单片机学习网.A"hOm)YN:O8@$B
(17) 标号: HB2 功能:双字节十六进制整数转换成双字节BCD码整数 电子园51单片机学习网_/q ` }7|az o


/RAoI| z})qp#D0入口条件:待转换的双字节十六进制整数在R6、R7中。
fX:HI5L vg0出口信息:转换后的三字节BCD码整数在R3、R4、R5中。 电子园51单片机学习网4dL%^b` JA
影响资源:PSW、A、R2~R7 堆栈需求: 2字节
Iu/b0Qc*I0HB2: CLR A ;BCD码初始化 电子园51单片机学习网$~ML,b3YD2d5]!D2z
MOV R3,A 电子园51单片机学习网_,OU;kz9Y^
MOV R4,A 电子园51单片机学习网:t B?'j,E
MOV R5,A 电子园51单片机学习网6^?-f$yX lf
MOV R2,#10H ;转换双字节十六进制整数
lABYD:H0HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中 电子园51单片机学习网bzO5J%w
RLC A
-rG(OcXP0MOV R7,A
z_ D#moLA0MOV A,R6 电子园51单片机学习网zlv!t)XSjQj/b@
RLC A 电子园51单片机学习网Wa;V&c k"BQI
MOV R6,A 电子园51单片机学习网Q Y}0mAG,Cz-?
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
1auYI'}H/^exm Ik0ADDC A,R5 电子园51单片机学习网5Nl!C}sT8R Ld%]g
DA A ;十进制调整 电子园51单片机学习网-O1_'x#a\A
MOV R5,A 电子园51单片机学习网I k#Y^,v
MOV A,R4
&f[c/e k,N:mUB9Z0ADDC A,R4 电子园51单片机学习网 v`k%l$I
DA A
e{ {3y;m2r3h0MOV R4,A 电子园51单片机学习网R?_2Yc g)ob
MOV A,R3 电子园51单片机学习网KY&\&y/[C5myO|
ADDC A,R3
)T*~J(Z,GP dq`0MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整 电子园51单片机学习网T9t y*m EG
DJNZ R2,HB3 ;处理完16bit
p#v H D7AubS0RET
E4h$DX1j M5n0 
Q{A-N$?QX0(18) 标号: HBD 功能:单字节十六进制小数转换成单字节BCD码小数

iP4W&LM/{Z0

[k{ L!W0v y0入口条件:待转换的单字节十六进制小数在累加器A中。 电子园51单片机学习网%mJ+k/\5qg oQ*G
出口信息:CY=0时转换后的BCD码小数仍在A中。CY=1时原小数接近整数1。
ul5Ul Z v(K0影响资源:PSW、A、B 堆栈需求: 2字节 电子园51单片机学习网!Xl)u m8g+W{
HBD: MOV B,#100 ;原小数扩大一百倍
f?-o8o#iMbl0MUL AB
|1Q/O9BX }T ?0RLC A ;余数部分四舍五入
,o6` rqa8C S0CLR A 电子园51单片机学习网o:V)}^4K(~)LS
ADDC A,B
G(NG,z-c*_ p!KY0MOV B,#10 ;分离出十分位和百分位 电子园51单片机学习网)bCh3`WS y
DIV AB 电子园51单片机学习网C${,P8]xJ"QX5vG
SWAP A 电子园51单片机学习网P[? [6z u(rC%uyHQ
ADD A,B ;拼装成单字节BCD码小数
*M%b,z S/Ld|0DA A ;调整后若有进位,原小数接近整数1 电子园51单片机学习网:_9H,iRs:|{4B g
RET 电子园51单片机学习网#^.AK3Q,HZR6gm
 
M7Tzf]A WO Y,\0(19) 标号: HBD2 功能:双字节十六进制小数转换成双字节BCD码小数 电子园51单片机学习网vDs @*?%bS)[

电子园51单片机学习网-W$I7kx5VHc1A q/t

入口条件:待转换的双字节十六进制小数在R2、R3中。 电子园51单片机学习网$G6L'W0S/f3t
出口信息:转换后的双字节BCD码小数仍在R2、R3中。
{Tun0_^!} z0影响资源:PSW、A、B、R2、R3、R4、R5 堆栈需求: 6字节 电子园51单片机学习网 Hg3BLl1scXA%{*O!e
HBD2: MOV R4,#4 ;四位十进制码 电子园51单片机学习网)f4GE3r ~L9{
HBD3: MOV A,R3 ;原小数扩大十倍 电子园51单片机学习网dX_ `)LV-WrYld
MOV B,#10 电子园51单片机学习网 \qx{{"y4t
MUL AB 电子园51单片机学习网"smE ~`T:c)y%x"b5I
MOV R3,A 电子园51单片机学习网t Y G([:Q
MOV R5,B
0Nu EG,A;Zx0MOV A,R2
p{Ss0^0MOV B,#10 电子园51单片机学习网;ty I |l"JJ [/F.Rhc
MUL AB 电子园51单片机学习网/H'Q$C+d7C%{x
ADD A,R5 电子园51单片机学习网Y%f%s~ C$h(vl
MOV R2,A 电子园51单片机学习网8[D DP8}
CLR A 电子园51单片机学习网_/u0WR JX{-ekO Y
ADDC A,B 电子园51单片机学习网OW~#k'@&v!e
PUSH ACC ;保存溢出的一位十进制码
VQ*t aC:f0DJNZ R4,HBD3 ;计算完四位十进制码 电子园51单片机学习网A5tG:UQ"V\J
POP ACC ;取出万分位
$rd.Z3^2|9L HT0MOV R3,A 电子园51单片机学习网9w*s:N.EF6Hdz(w
POP ACC ;取出千分位
1`q`7rM Ki+Bv1c0SWAP A 电子园51单片机学习网O%h5zv+zbGyn I
ORL A,R3 ;拼装成低字节BCD码小数 电子园51单片机学习网%k8H;`3aPb4F&Es
MOV R3,A 电子园51单片机学习网HeDXcWf
POP ACC ;取出百分位 电子园51单片机学习网.VZi2@.sq
MOV R2,A 电子园51单片机学习网2vr#R2t3@
POP ACC ;取出十分位 电子园51单片机学习网y?P%cQ:p
SWAP A 电子园51单片机学习网 Yyq VK7U&X
ORL A,R2 ;拼装成高字节BCD码小数
8h'z8_!dD/P;bCy0MOV R2,A
y.WO o%`|(\/Fbs0RET
8ssS2A-{+bmu0  电子园51单片机学习网/u3V'\r/PT E h\:S
(20)标号:BCDH 功能:单字节BCD码整数转换成单字节十六进制整数

4iBz3u4QRd*j%x f [A0 电子园51单片机学习网"Zl/gGb9Z6iK

入口条件:待转换的单字节BCD码整数在累加器A中。 电子园51单片机学习网|e Xt%U9KU
出口信息:转换后的单字节十六进制整数仍在累加器A中。 电子园51单片机学习网+bn"\Z_5N*X"L
影响资源:PSW、A、B、R4 堆栈需求: 2字节
]$H U-B N;O,?RL{0BCDH: MOV B,#10H ;分离十位和个位
CW+~"w,MX.g0DIV AB 电子园51单片机学习网*u&t*a0FT)x r
MOV R4,B ;暂存个位
2|w}Z,\8G!H,i0MOV B,#10 ;将十位转换成十六进制
o#QZ.K%s$t%w;V ?GJ0MUL AB
w:EUg U1R(Z0ADD A,R4 ;按十六进制加上个位 电子园51单片机学习网if?.A#K }/w7^2M4de
RET
}DLB4CS]0  电子园51单片机学习网j`r h9t%n
(21)标号: BH2 功能:双字节BCD码整数转换成双字节十六进制整数

St0k1EF0 电子园51单片机学习网%J ul)R ? HI"N

入口条件:待转换的双字节BCD码整数在R2、R3中。
d!?6g_t#~0出口信息:转换后的双字节十六进制整数仍在R2、R3中。 电子园51单片机学习网o-zQ6O;IIdf|
影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 4字节
^0q$x;z)~ga0BH2: MOV A,R3 ;将低字节转换成十六进制
?h7k{R&s0LCALL BCDH 电子园51单片机学习网_C V}q5Q O
MOV R3,A
H%V _'AYq2svEl0MOV A,R2 ;将高字节转换成十六进制
q7S$X x9a h0LCALL BCDH
-y/s9E3md/LG O0MOV B,#100 ;扩大一百倍
H3g9QgTz0MUL AB 电子园51单片机学习网 @7e0So7z8w AN:~
ADD A,R3 ;和低字节按十六进制相加
(i2_5jnv0MOV R3,A
3T:y6P:ygU0CLR A 电子园51单片机学习网0|rK/HXy#o9P8Ws
ADDC A,B 电子园51单片机学习网_&PZ@ Vq*t
MOV R2,A 电子园51单片机学习网M*tS QV RIE1wW
RET 电子园51单片机学习网`,uS@ z3X1H-u Gg Ot
  电子园51单片机学习网r#NMX)v.w0w
(22)标号: BHD 功能:单字节BCD码小数转换成单字节十六进制小数 电子园51单片机学习网!y4tQ$_8LMEm

电子园51单片机学习网cj"?w?Q0Cd"`

入口条件:待转换的单字节BCD码数在累加器A中。
lp9J{` ?!^zrY|0出口信息:转换后的单字节十六进制小数仍在累加器A中。 电子园51单片机学习网T7qU8h`*X7b~ x
影响资源:PSW、A、R2、R3 堆栈需求: 2字节 电子园51单片机学习网xrC-r0?
BHD: MOV R2,#8 ;准备计算一个字节小数 电子园51单片机学习网9LfEV3S
BHD0: ADD A,ACC ;按十进制倍增 电子园51单片机学习网WF!c1s e"x
DA A
&r4Tg4wU `(u&k0XCH A,R3
m^ j q2\R)E ^'BC0RLC A ;将进位标志移入结果中 电子园51单片机学习网tfYc$u t/xa7v
XCH A,R3 电子园51单片机学习网Cn5[EAY
DJNZ R2,BHD0 ;共计算8bit小数
0L9w*w3~*S8ve h0ADD A,#0B0H ;剩余部分达到0.50否?
,ry*pT*@8IWT Q;c9E0JNC BHD1 ;四舍 电子园51单片机学习网0Q"qN5G%fz
INC R3 ;五入 电子园51单片机学习网kHH+C0a3q'n
BHD1: MOV A,R3 ;取结果
L[9oaDx0RET

pSi G$h$Fc7\`J)S0 电子园51单片机学习网;\H%ns-H]|d1dG&B

电子园51单片机学习网c5b;VI$L+e&VB0s
MCS-51单片机实用子程序库(三)电子园51单片机学习网8R|.D;lL
 
R.W:`:^gqa0MCS-51单片机实用子程序库 电子园51单片机学习网,M"R2w#o4mr"|.i/v
(23)标号: BHD2 功能:双字节BCD码小数转换成双字节十六进制小数电子园51单片机学习网 O [y!w5i1x

电子园51单片机学习网4Q;YV mW.bZ+f

入口条件:待转换的双字节BCD码小数在R4、R5中。电子园51单片机学习网'?ZM;wJY R
出口信息:转换后的双字节十六进制小数在R2、R3中。*电子园51单片机学习网[-xY+|| EDc9I
影响资源:PSW、A、R2~R6 堆栈需求: 2字节
sP-J Uc7S,v'O9E9x0BHD2: MOV R6,#10H ;准备计算两个字节小数
]!a0_ FT'n1D0BHD3: MOV A,R5 ;按十进制倍增
&d#N0i M&C v0ADD A,R5电子园51单片机学习网r"s)qc+yl7gtz&K#B
DA A
I&l ZE7vrQ0MOV R5,A电子园51单片机学习网4@9~;EeB+g-@(`
MOV A,R4电子园51单片机学习网9vEQJAjNS nB
ADDC A,R4
|)H I|^%Fo0DA A电子园51单片机学习网xp;YR1NRO
MOV R4,A
wOI"M'?u"|0MOV A,R3 ;将进位标志移入结果中
i2K eli~ x9s0RLC A电子园51单片机学习网;H!lFoS'J
MOV R3,A
[*x4v)x2A0MOV A,R2电子园51单片机学习网 FrzXm`&@
RLC A
P ?,n%@(Q_eO0MOV R2,A
!h6[\1~e jw0DJNZ R6,BHD3 ;共计算16bit小数电子园51单片机学习网$?eud&nDG dWx"I!I
MOV A,R4电子园51单片机学习网4HbB!r(Np W
ADD A,#0B0H ;剩余部分达到0.50否?
HvH&U4pOA.y0JNC BHD4 ;四舍电子园51单片机学习网} BYZ'sYC
INC R3 ;五入
5v4rSrI]%E([X/IU2w9A0MOV A,R3电子园51单片机学习网2Z }%dh]l'B\
JNZ BHD4电子园51单片机学习网3R z A0J N\&z
INC R2电子园51单片机学习网&YuD2u+bR-|
BHD4: RET
"@-J:X5`+_:U7alI0 
l+s"L r/z2m0(24) 标号: MM 功能:求单字节十六进制无符号数据块的极值电子园51单片机学习网fY}{IB


+aZ3CH_A{"k'y0入口条件:数据块的首址在DPTR中,数据个数在R7中。电子园51单片机学习网C+u S*n+a;d]4w(w d
出口信息:最大值在R6中,地址在R2R3中;最小值在R7中,地址在R4R5中。电子园51单片机学习网+]\bvdzBu.|r
影响资源:PSW、A、B、R1~R7 堆栈需求: 4字节
l[2y$XsQ/\1C1R0MM: MOV B,R7 ;保存数据个数
_vm,nC"TS0|0MOVX A,@DPTR ;读取第一个数据电子园51单片机学习网S/jw\w|6fzd
MOV R6,A ;作为最大值的初始值电子园51单片机学习网Fg7z jR)z/bwK1R
MOV R7,A ;也作为最小值的初始值电子园51单片机学习网Or g]M5E3l'T1n
MOV A,DPL ;取第一个数据的地址电子园51单片机学习网t)Ok/Pd0}Fk.P
MOV R3,A ;作为最大值存放地址的初始值
oT/G fd*p R(@5l0MOV R5,A ;也作为最小值存放地址的初始值
\$o7K_3H S0MOV A,DPH
I&@#?0@0eSOJl0MOV R2,A
y RWkP3L1vT$B z(|0MOV R4,A
eS.B^)zr9B_l0MOV A,B ;取数据个数电子园51单片机学习网DyvI3TS'\NL"v8~
DEC A ;减一,得到需要比较的次数
q},NG Po'r0JZ MME ;只有一个数据,不需要比较
.]F)bgT3g*P0MOV R1,A ;保存比较次数电子园51单片机学习网 O9MWN} n3h5hh*I
PUSH DPL ;保护数据块的首址
R/N2Qa4W{7_X0PUSH DPH
e#Su$G!\r0MM1: INC DPTR ;指向一个新的数据电子园51单片机学习网"J}7TM&lfsY
MOVX A,@DPTR ;读取这个数据
OaB l5v2F0MOV B,A ;保存电子园51单片机学习网@(dv-J C8l
SETB C ;与最大值比较电子园51单片机学习网]T6~ |&O l5a3x0yb
SUBB A,R6电子园51单片机学习网"R*k#j$_;g
JC MM2 ;不超过当前最大值,保持当前最大值电子园51单片机学习网+]:i6^_X7r
MOV R6,B ;超过当前最大值,更新最大值存放地址
E+H ^,J|IVo F0MOV R2,DPH ;同时更新最大值存放地址
o5ovps%y`*gQ0MOV R3,DPL电子园51单片机学习网/X:N-jB~[e
SJMP MM3
2w fUV jY9@ P }h*w0MM2: MOV A,B ;与最小值比较电子园51单片机学习网RmHYznx.\$H3p
CLR C
i8{ s@-AFI5~v'f0SUBB A,R7电子园51单片机学习网.n~1k;G(@?#H2D$p,b
JNC MM3 ;大于或等于当前最小值,保持当前最小值
QZCvP U0MOV R7,B ;更新最小值
2n&|u'k ~@Zj0MOV R4,DPH ;更新最小值存放地址
Obg VZ+Z0MOV R5,DPL电子园51单片机学习网(n-}HF9L5c
MM3: DJNZ R1,MM1 ;处理完全部数据
:J0~7qQ w(lY4bs0POP DPH ;恢复数据首址
"n+\R m+{!ur4|V0POP DPL电子园51单片机学习网G2?c7?m+AD2hv}.e
MME: RET电子园51单片机学习网&I3nd UZ-iti
 
1J]](qcTL0(25) 标号: MMS 功能:求单字节十六进制有符号数据块的极值

_:wC&r2Yo0 电子园51单片机学习网M@T2B2]&N|LhK

入口条件:数据块的首址在DPTR中,数据个数在R7中。
+In6C%U$T}0出口信息:最大值在R6中, 地址在R2R3中;最小值在R7中,地址在R4R5中。
U O X!_|wk^0影响资源:PSW、A、B、R1~R7 堆栈需求: 4字节电子园51单片机学习网 R5Gz*_s(M|W.w
MMS: MOV B,R7 ;保存数据个数电子园51单片机学习网Gs@K}xY;kA
MOVX A,@DPTR ;读取第一个数据电子园51单片机学习网:cNxYA/I2j6P9y
MOV R6,A ;作为最大值的初始值电子园51单片机学习网 Gp-\s/\%DS/L%~0P
MOV R7,A ;也作为最小值的初始值
Vd;z#]0B.l4M0MOV A,DPL ;取第一个数据的地址电子园51单片机学习网)j"ZP&|%z\D%cZcU
MOV R3,A ;作为最大值存放地址的初始值
|/WzCG8wS6hZ0MOV R5,A ;也作为最小值存放地址的初始值电子园51单片机学习网2s[@E h3K3XeWe
MOV A,DPH
nT.M7~K\4u1t;ZT0MOV R2,A电子园51单片机学习网 |N;Q4}'SI@#` O
MOV R4,A电子园51单片机学习网7O'FM:A'Q(L N.q
MOV A,B ;取数据个数电子园51单片机学习网 xSJ:bgx0c0i"? p
DEC A ;减一,得到需要比较的次数电子园51单片机学习网z8~H%L)STmbN gt
JZ MMSE ;只有一个数据,不需要比较电子园51单片机学习网/sEZ'Av {xAv
MOV R1,A ;保存比较次数电子园51单片机学习网*k^%Ptu?9V
PUSH DPL ;保护数据块的首址
,~a,U9g8E W xb$D0PUSH DPH
} Tn,vi9t%\&VdSl%D t0MMS1: INC DPTR ;调整数据指针电子园51单片机学习网a?3cY}$k
MOVX A,@DPTR ;读取一个数据
LD,zT `5N3O0MOV B,A ;保存
@,{Ab'E!r x0SETB C ;与最大值比较
Z k$_%pr#D g M0SUBB A,R6
6l"O5h#\'H0JZ MMS4 ;相同,不更新最大值电子园51单片机学习网 Bd8y~h1?
JNB OV,MMS2 ;差未溢出,符号位有效电子园51单片机学习网m,A"e*Ou?0zQ*~#k
CPL ACC.7 ;差溢出,符号位取反电子园51单片机学习网O9a+` PS{
MMS2: JB ACC.7,MMS4;差为负,不更新最大值
4\E@Y x reJK0MOV R6,B ;更新最大值
f:A8H6c2x%N Oz0MOV R2,DPH ;更新最大值存放地址电子园51单片机学习网.~,Wz/}`#l?
MOV R3,DPL电子园51单片机学习网dhC(?^+T j
SJMP MMS7电子园51单片机学习网(WO y!B&k5S0O-P
MMS4: MOV A,B ;与最小值比较电子园51单片机学习网F~f({,UX'j
CLR C电子园51单片机学习网G(mf [-W
SUBB A,R7
1ESfMk0JNB OV,MMS6 ;差未溢出,符号位有效
A5s8Br{7Z0CPL ACC.7 ;差溢出,符号位取反
%_1o$n g:dBp;\y0MMS6: JNB ACC.7,MMS7;差为正,不更新最小值电子园51单片机学习网 i g ?Q,}2`'Ms
MOV R7,B ;更新最小值
})Y!F4pAp%Lu0MOV R4,DPH ;更新最小值存放地址
(we1J{#{I0MOV R5,DPL
^R!uC X+M0MMS7: DJNZ R1,MMS1 ;处理完全部数据
X&~;FqC&a0POP DPH ;恢复数据首址
:?9A.c7hu6IW&f%^m$M0POP DPL电子园51单片机学习网"j%v N4c(E:?:l:W
MMSE: RET
9I:{q{^6L _0 电子园51单片机学习网)zd*Um%Q]E\-P
(26) 标号: FDS1 功能:顺序查找(ROM)单字节表格电子园51单片机学习网 y'wb ` ]5Xh&i

电子园51单片机学习网 q0?![ OK I(_

入口条件:待查找的内容在A中,表格首址在DPTR中,表格的字节数在R7中。
0nF @A#\ Z6h{2|u ]0出口信息:OV=0时,顺序号在累加器A中;OV=1时,未找到。电子园51单片机学习网,vLL,jMf
影响资源:PSW、A、B、R2、R6 堆栈需求: 2字节
a%e \4l"{0FDS1: MOV B,A ;保存待查找的内容
uw:Pj9Kl;rlxi0MOV R2,#0 ;顺序号初始化(指向表首)电子园51单片机学习网{?#|Hn x {3xt%zm
MOV A,R7 ;保存表格的长度电子园51单片机学习网`4Z3K n2?l4E
MOV R6,A
_7D(o4\mn;`:A0FD11: MOV A,R2 ;按顺序号读取表格内容电子园51单片机学习网.tZP*JYyFmQh
MOVC A,@A+DPTR电子园51单片机学习网r.sM0RT%zxah%V-m
CJNE A,B,FD12;与待查找的内容比较
6~3gN.R"clS0CLR OV ;相同,查找成功电子园51单片机学习网k5Y8b3exK5j
MOV A,R2 ;取对应的顺序号电子园51单片机学习网%C8`8la3j}f]hA
RET电子园51单片机学习网4ubj&mAdt$]
FD12: INC R2 ;指向表格中的下一个内容
_Z @2MC$G0DJNZ R6,FD11 ;查完全部表格内容
Q[/s(wtg/}2r5W0SETB OV ;未查找到,失败
5l4z+U CM0RET
L gr])E!z*f3vS%e0 
?3Hvs9H'}1ZXR`0(27) 标号: FDS2 功能:顺序查找(ROM)双字节表格电子园51单片机学习网U"R1U6[%~F2X

电子园51单片机学习网 T!S3BU$GY(q

入口条件:查找内容在R4、R5中,表格首址在DPTR中,数据总个数在R7中。电子园51单片机学习网1a picQ:dh/s
出口信息:OV=0时顺序号在累加器A中,地址在DPTR中;OV=1时未找到。电子园51单片机学习网H7P4pkW O(F
影响资源:PSW、A、R2、R6、DPTR 堆栈需求: 2字节
)y%Pmy{w7w&y'a:N0FDS2: MOV A,R7 ;保存表格中数据的个数
3w~9~ @n6r0MOV R6,A
yMq2l B0MOV R2,#0 ;顺序号初始化(指向表首)
O8@9~.N~F j0FD21: CLR A ;读取表格内容的高字节电子园51单片机学习网$a7Z2fl+uJ
MOVC A,@A+DPTR
n"B7ay#t;QM0XRL A,R4 ;与待查找内容的高字节比较电子园51单片机学习网Qa8am/Q)A
JNZ FD22
H,_kF oP!B k0GW0MOV A,#1 ;读取表格内容的低字节
$ID D'b3Y ci0MOVC A,@A+DPTR
.`|7L3uB0XRL A,R5 ;与待查找内容的低字节比较
o(g5|5X-K0JNZ FD22电子园51单片机学习网M"L|)H|D
CLR OV ;相同,查找成功电子园51单片机学习网$WW+Z7Kaac
MOV A,R2 ;取对应的顺序号
!BEZ#sa-j0q%a0RET
]AMLc6ghT3D0FD22: INC DPTR ;指向下一个数据电子园51单片机学习网6sp]`Z:FJ#~"L y \
INC DPTR电子园51单片机学习网0~cx'v-mqW
INC R2 ;顺序号加一电子园51单片机学习网ny$S"xu
DJNZ R6,FD21 ;查完全部数据电子园51单片机学习网 F(q#`|]nZD
SETB OV ;未查找到,失败
&mIb2j#mA i3i0RET
c'x~;|%\ZorZ0 电子园51单片机学习网*i3o(PQA
(28) 标号:FDD1 功能:对分查找(ROM)单字节无符号增序数据表格电子园51单片机学习网 C-xzbSP q

电子园51单片机学习网3Nf&dyu7g u

电子园51单片机学习网,P~dG y#P~4oiJ
入口条件:待查找的内容在累加器A中,表格首址在DPTR中,字节数在R7中。
9L;r T^6nw#e9Xt-L~0出口信息:OV=0 时,顺序号在累加器A中;OV=1 时,未找到。电子园51单片机学习网LMN4u)^(UT S j'L
影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 2字节
:iT0ps:R9J j.s0FDD1: MOV B,A ;保存待查找的内容电子园51单片机学习网 Rq!r}L&v uf#r
MOV R2,#0 ;区间低端指针初始化(指向第一个数据)电子园51单片机学习网M@Jier
MOV A,R7
2r%Mg8i`1sBf:P0DEC A电子园51单片机学习网L3uf/}7c-d4R.F
MOV R3,A ;区间高端指针初始化(指向最后一个数据)
WP GDS3vYZ7J0FD61: CLR C ;判断区间大小
%H-M1A%Ot3BM;c;V0MOV A,R3电子园51单片机学习网e$T$n}y+xB z
SUBB A,R2电子园51单片机学习网)v1q(o@%J9nf4`N
JC FD69 ;区间消失,查找失败电子园51单片机学习网.F{.b0\d p R2n5j4C
RRC A ;取区间大小的一半
zTg4C i9[0ADD A,R2 ;加上区间的低端电子园51单片机学习网f*e:deI!AQc$Go
MOV R4,A ;得到区间的中心电子园51单片机学习网[`,SsMT J
MOVC A,@A+DPTR;读取该点的内容电子园51单片机学习网svD0?~
CJNE A,B,FD65;与待查找的内容比较
?m _;J)WfA"D0CLR OV ;相同,查找成功电子园51单片机学习网{Y IW;LRO
MOV A,R4 ;取顺序号
C&K hCm/l0RET电子园51单片机学习网Nl y dV v
FD65: JC FD68 ;该点的内容比待查找的内容大否?
cm\-z*^5Z$q|hs:E0MOV A,R4 ;偏大,取该点位置
/qF.s,J(FD']0DEC A ;减一电子园51单片机学习网^vusW3UC}!i j
MOV R3,A ;作为新的区间高端电子园51单片机学习网R,R#t f&WwNd
SJMP FD61 ;继续查找电子园51单片机学习网7xH1g&B0llFL,Bi
FD68: MOV A,R4 ;偏小,取该点位置电子园51单片机学习网w.` _f Q
INC A ;加一
B%^$l0qa5Ey2f0MOV R2,A ;作为新的区间低端电子园51单片机学习网*f6RH]-i ov+~
SJMP FD61 ;继续查找
;U1f WqmU0FD69: SETB OV ;查找失败电子园51单片机学习网2u%m,o6S3da6@U
RET
:s h5yl}Y)j|0 
f\!v4oq Y0(29) 标号:FDD2 功能:对分查找(ROM)双字节无符号增序数据表格电子园51单片机学习网6O_j)U&kP}B?3e |


(j5v S"D k0入口条件:查找内容在R4、R5中,表格首址在DPTR中,数据个数在R7中。
1Z&Z"];F/_/B0出口信息:OV=0 时顺序号在累加器A中,址在DPTR中;OV=1 时未找到。电子园51单片机学习网2W,hF a1t!T
影响资源:PSW、A、B、R1~R7、DPTR 堆栈需求: 2字节
1g%V0ZnUfo:rE0FDD2: MOV R2,#0 ;区间低端指针初始化(指向第一个数据)
&aQP[,jE3D-Q0MOV A,R7电子园51单片机学习网9})^E^%n5Du!w$E
DEC A电子园51单片机学习网7]K"X J6u*X:n0hi
MOV R3,A ;区间高端指针初始化,指向最后一个数据电子园51单片机学习网Q v'k2sxb#Y+^ L
MOV R6,DPH ;保存表格首址
y[%Rvs.em0MOV R7,DPL
Y.J,ROT;RN7l6}loG0FD81: CLR C ;判断区间大小
7dg8D:b F&t!O0MOV A,R3电子园51单片机学习网\&c_R&{nDv(^
SUBB A,R2电子园51单片机学习网+Btj]#viY
JC FD89 ;区间消失,查找失败
([P_~Zo0RRC A ;取区间大小的一半电子园51单片机学习网$^dPqWtX'RS cB
ADD A,R2 ;加上区间的低端电子园51单片机学习网!e+j/I9rEjY] M
MOV R1,A ;得到区间的中心
:K3c @ }3j[(^ E0MOV DPH,R6
)g3?6lx |9IQ ?0CLR C ;计算区间中心的地址电子园51单片机学习网$~2X"e!}x i
RLC A
8Fp\Q,nFD9U.~0JNC FD82
;dzd,Yn+s^3@0INC DPH电子园51单片机学习网`QGze2\[]R*| c
FD82: ADD A,R7电子园51单片机学习网F?'{O!_
MOV DPL,A
!F/Z0mT&^e0JNC FD83
YF*v2eF/Q1J0INC DPH
,|Xe5d:LmD0FD83: CLR A ;读取该点的内容的高字节电子园51单片机学习网*oTMw N[
MOVC A,@A+DPTR电子园51单片机学习网I5iN^&R1A&r
MOV B,R4 ;与待查找内容的高字节比较
\6H9q/P+z0^1Nb0CJNE A,B,FD84;不相同
,@pI.z(e5YgDQ yG!v0MOV A,#1 ;读取该点的内容的低字节
U X0d$T:m7c!e0MOVC A,@A+DPTR电子园51单片机学习网9ec.kB*N/W\E
MOV B,R5电子园51单片机学习网zQ~A/b%vh @Ah
CJNE A,B,FD84;与待查找内容的低字节比较
fk7B3Q_{'HA'`0MOV A,R1 ;取顺序号
|K9Z'w8G ~0CLR OV ;查找成功电子园51单片机学习网)m1qbOiy(O_
RET
w g o0N(U+n,Zq)j;W0FD84: JC FD86 ;该点的内容比待查找的内容大否?
8r ?W|,\rm7D6k0MOV A,R1 ;偏大,取该点位置电子园51单片机学习网K1b`+zz)tB2` M
DEC A ;减一
5[z!@#Hr-~r]0MOV R3,A ;作为新的区间高端电子园51单片机学习网)Q-u'W7y,ct
SJMP FD81 ;继续查找
$Y d5U'Z3s6Vh(d0FD86: MOV A,R1 ;偏小,取该点位置
xlFdI"GR Xk0INC A ;加一电子园51单片机学习网l^ R.Sq[:uk
MOV R2,A ;作为新的区间低端
2V XV[ K Di0SJMP FD81 ;继续查找电子园51单片机学习网J/H]fSs7iT Z6u
FD89: MOV DPH,R6 ;相同,恢复首址
!MXb0@0u`B"Q0MOV DPL,R7电子园51单片机学习网 qy1_ LF7S^K
SETB OV ;查找失败
nU0_5i SgU7V0?0RET
T1vPzqtC0 电子园51单片机学习网%V |Rp@3V
(30) 标号: DDM1 功能:求单字节十六进制无符号数据块的平均值电子园51单片机学习网\`om6k4@P


?j U:w.F,w:E0
s#Ok\k"d%~1g BFb#a(XW0入口条件:数据块的首址在DPTR中,数据个数在R7中。电子园51单片机学习网FKV6QwZ
出口信息:平均值在累加器A中。
A"I;PO/rP&q f0影响资源:PSW、A、R2~R6 堆栈需求: 4字节电子园51单片机学习网CT"f yG2E
DDM1: MOV A,R7 ;保存数据个数电子园51单片机学习网;H G1O#x;D%c
MOV R2,A
r5m5@ u%jreV0PUSH DPH
5`IN@| q_0PUSH DPL
tP4m Y5|o&Z'F9T0CLR A ;初始化累加和电子园51单片机学习网h#OM)q%y K2kr)f
MOV R4,A电子园51单片机学习网e XcYCa
MOV R5,A电子园51单片机学习网*RW'V#@YWh-r0P
DM11: MOVX A,@DPTR ;读取一个数据
F+e!m4a1I j0ADD A,R5 ;累加到累加和中电子园51单片机学习网i`'_.`:b(W)K
MOV R5,A电子园51单片机学习网n}D9O3sf
JNC DM12电子园51单片机学习网F.nP7LnzS o'r
INC R4电子园51单片机学习网c.]#su _Ws
DM12: INC DPTR ;调整指针
5~G1D2VZ]p0DJNZ R2,DM11 ;累加完全部数据
[4M S$dAiH0LCALL D457 ;求平均值(R4R5/R7-→R3)电子园51单片机学习网%H`*m+ekh ^fum?
MOV A,R3 ;取平均值电子园51单片机学习网Q f9t#i'Xv
POP DPL电子园51单片机学习网9p.V9L"](IC,W yR Q
POP DPH电子园51单片机学习网#`/o2B:b/ST
RET
)Z4CH3Q M6B8p G6JBP0 电子园51单片机学习网!O~0`Zv]$D
(31) 标号: DDM2 功能:求双字节十六进制无符号数据块的平均值电子园51单片机学习网b)nh z,^~4N$BBJ3W8t


1_R5CP(k H2LFUP+{0入口条件:数据块的首址在DPTR中,双字节数据总个数在R7中。电子园51单片机学习网Ad a'`&|w]
出口信息:平均值在R4、R5中。电子园51单片机学习网i9i9Bz#HTU
影响资源:PSW、A、R2~R6 堆栈需求: 4字节电子园51单片机学习网P'g/Xp t0B5m"Z
DDM2: MOV A,R7 ;保存数据个数
:|E5R&u1YB:W0MOV R2,A ;初始化数据指针
Q*C-|G`S0PUSH DPL ;保持首址
7f7SNb0az3Op-P-Z0PUSH DPH
~{H]7VnY6dHz0CLR A ;初始化累加和电子园51单片机学习网svI])Pp:bj
MOV R3,A
)Sn@1lm0wj6f0MOV R4,A
q*C/Kz8a&S i.A0MOV R5,A电子园51单片机学习网*y+Z%Z(X0}2B(P{C5BL6`
DM20: MOVX A,@DPTR ;读取一个数据的高字节电子园51单片机学习网2iOh[](K'G4U
MOV B,A
t? K:Z QwPTC0INC DPTR电子园51单片机学习网%s]-tw#V-D Mo
MOVX A,@DPTR ;读取一个数据的低字节电子园51单片机学习网+^s*k9u R;P"G
INC DPTR电子园51单片机学习网4h-eE"i"B{
ADD A,R5 ;累加到累加和中电子园51单片机学习网_m+u3D;V _1r
MOV R5,A
+R+Wjs O3d O0MOV A,B
Lm2M4{V1V9j _F/rBe0ADDC A,R4电子园51单片机学习网 XqZI8c1bx
MOV R4,A
/xG4H-T@0JNC DM21电子园51单片机学习网| V3@r,Wq
INC R3电子园51单片机学习网^-_2l#a6i w-f
DM21: DJNZ R2,DM20 ;累加完全部数据电子园51单片机学习网 {1Q,H!y_pw bk
POP DPH ;恢复首址电子园51单片机学习网J'u2R/\Xei
POP DPL
D:xk oFL5[0LJMP DV31 ;求R3R4R5/R7-→R4R5,得到平均值电子园51单片机学习网'W/D5M9w.[6D,v5ZMl
 
C`7Re P ^1P4m0(32) 标号: XR1 功能:求单字节数据块的(异或)校验和电子园51单片机学习网Xw*^i6q[!M%c

电子园51单片机学习网7TB\L,MS Inp

入口条件:数据块的首址在DPTR中,数据的个数在R6、R7中。电子园51单片机学习网a^9D5z,M a2fC9[)h mc
出口信息:校验和在累加器A中。电子园51单片机学习网_0t6T9sd osa$B
影响资源:PSW、A、B、R4~R7 堆栈需求: 2字节电子园51单片机学习网i*e\'`2O
XR1: MOV R4,DPH ;保存数据块的首址电子园51单片机学习网 Kp:?u#|-z G5g
MOV R5,DPL
2^"b ?lZ F#^ `0MOV A,R7 ;双字节计数器调整电子园51单片机学习网 G@,oh` g)e?P
JZ XR10
w)dp.|q L:W0INC R6电子园51单片机学习网1tVQ C.h&bF]
XR10: MOV B,#0 ;校验和初始化电子园51单片机学习网6D%Q&H$d7W)C,]8j1X
XR11: MOVX A,@DPTR ;读取一个数据
2o1goO'\Z*d0XRL B,A ;异或运算
sx7O5cCvsu}1m0INC DPTR ;指向下一个数据电子园51单片机学习网Y9~ao5I
DJNZ R7,XR11 ;双字节计数器减一
4wB0~:jEVt {0DJNZ R6,XR11
rF g:tg0MOV DPH,R4 ;恢复数据首址
&x5G4uB5NK$i@%k0MOV DPL,R5电子园51单片机学习网2JgR tnL5` u
MOV A,B ;取校验和电子园51单片机学习网GxO(juJY
RET
C7B)J3v tD0 
"h W0Z vW(n@0(33) 标号: XR2 功能:求双字节数据块的(异或)校验和电子园51单片机学习网J#@z#QY5{


BlMA'Y0入口条件:数据块的首址在DPTR中,双字节数据总个数在R6、R7中。电子园51单片机学习网z|#\/wq_ QY
出口信息:校验和在R2、R3中。电子园51单片机学习网'JI h`,K+n
影响资源:PSW、A、R2~R7 堆栈需求: 2字节
-}xR6o'w^:k GCX2g0XR2: MOV R4,DPH ;保存数据块的首址
"]Ith7f8E0MOV R5,DPL电子园51单片机学习网1Ebas+vT-H2~JV ~
MOV A,R7 ;双字节计数器调整
.@z ^~8}#RY+I0JZ XR20
umj o&dA)q!T0INC R6电子园51单片机学习网k&O G]QI6C$p
XR20: CLR A ;校验和初始化
8F'y kiVX0MOV R2,A
-^,d:B k@pn J?0MOV R3,A
$i&l"j|B"p0XR21: MOVX A,@DPTR ;读取一个数据的高字节电子园51单片机学习网I Zfv.P*c!u
XRL A,R2 ;异或运算电子园51单片机学习网!E)z*mn|6Cf/P,T
MOV R2,A电子园51单片机学习网-fl&o.y;MY0\
INC DPTR电子园51单片机学习网$gn:ZLD4C.z!d+q
MOVX A,@DPTR ;读取一个数据的低字节电子园51单片机学习网L(nJkv8?#P
XRL A,R3 ;异或运算
q? j`W1_C#M0MOV R3,A电子园51单片机学习网JnG.x4H5T APH-w
INC DPTR ;指向下一个数据电子园51单片机学习网(dF.h jxR};@`_@
DJNZ R7,XR21 ;双字节计数器减一
9xvo2G$c;]lKua0DJNZ R6,XR21
DbP:Vi)k0MOV DPH,R4 ;恢复数据首址
%U)DJ3{d+L0MOV DPL,R5
1W a&d|'sVjZL0RET
8g7W3y1m2\!{0 电子园51单片机学习网Ov9KWbF'Ae"U"Z
(34) 标号: SORT 功能:单字节无符号数据块排序(增序)

AwImx z-H-q9b0 电子园51单片机学习网zVP#~5rA.D~oHc

入口条件:数据块的首址在R0中,字节数在R7中。
$~:N3n/GC"j0出口信息:完成排序(增序)
'];` gsDAkT0影响资源:PSW、A、R2~R6 堆栈需求: 2字节
H2@*PzI O0SORT: MOV A,R7
EL a0U,qR3S3H0MOV R5,A ;比较次数初始化
&NEt/vt;y0SRT1: CLR F0 ;交换标志初始化
"Aj#F`f)u0MOV A,R5 ;取上遍比较次数电子园51单片机学习网 XVC0G)p#^+oj
DEC A ;本遍比上遍减少一次
/sc(t&?1Y)|0MOV R5,A ;保存本遍次数电子园51单片机学习网 jB;Kvo!DS,R6f y
MOV R2,A ;复制到计数器中
8l~:DxaE'v3x0JZ SRT5 ;若为零,排序结束电子园51单片机学习网wyAF*KX z
MOV A,R0 ;保存数据指针电子园51单片机学习网hHl5~+J^
MOV R6,A电子园51单片机学习网!Q(PF8[4NZ*rZ RAy
SRT2: MOV A,@R0 ;读取一个数据电子园51单片机学习网Do)~K3\qb$[]
MOV R3,A电子园51单片机学习网 hP'V!I3EJw&a
INC R0 ;指向下一个数据电子园51单片机学习网u K$C[V5I,~w JBZ
MOV A,@R0 ;再读取一个数据电子园51单片机学习网(Bn'pVL*r
MOV R4,A电子园51单片机学习网,Dij%~&b5W(f9rY\
CLR C电子园51单片机学习网pPMa"Npa&d d
SUBB A,R3 ;比较两个数据的大小电子园51单片机学习网*U6Khq7f9H2T
JNC SRT4 ;顺序正确(增序或相同),不必交换
-XGH"W8u;{$r0SETB F0 ;设立交换标志
|6Ni3m)|)gwi%v0MOV A,R3 ;将两个数据交换位置电子园51单片机学习网\'e{&en|!^E!W
MOV @R0,A电子园51单片机学习网3m)?Q eS:@
DEC R0电子园51单片机学习网_ Nr7nLC%Ks
MOV A,R4电子园51单片机学习网-i'xFN]
MOV @R0,A电子园51单片机学习网1@FGM3\.E#W:\}z
INC R0 ;指向下一个数据
/KN7ey5] ]0SRT4: DJNZ R2,SRT2 ;完成本遍的比较次数电子园51单片机学习网.P'n+W'cM M
MOV A,R6 ;恢复数据首址
fh kN7J8R/N e0MOV R0,A电子园51单片机学习网 \Eu!G6t`T&QIdnh
JB F0,SRT1 ;本遍若进行过交换,则需继续排序电子园51单片机学习网7P7f5M?ez-`o
SRT5: RET ;排序结束
[se+tH0n/w0END电子园51单片机学习网Z&^5C:wEx S0O


4^ d;DE F3Rs0 电子园51单片机学习网2B UZ4As:z @W
MCS-51单片机实用子程序库(四)
)y6v*OS4{P/o0 
-z7F D f$h7sM0MCS-51单片机实用子程序库电子园51单片机学习网;cXq/X9zP
 
u p)G-c4vQ)y0(二) MCS-51 浮点运算子程序库及其使用说明
+i`}S DS;L6A7e0本浮点子程序库有三个不同层次的版本,以便适应不同的应用场合:
A3k!r"CqPK01.小型库(FQ51A.ASM):只包含浮点加、减、乘、除子程序。
C!Q4Bgl%u02.中型库(FQ51B.ASM):在小型库的基础上再增加绝对值、倒数、比较、平方、开平方、电子园51单片机学习网&kT-a A1Ai
数制转换等子程序。电子园51单片机学习网}w];DIaxD
3.大型库(FQ51.ASM):包含本说明书中的全部子程序。电子园51单片机学习网$^|f TvB&Qd[
为便于读者使用本程序库,先将有关约定说明如下:
s J-TRRX01.双字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数电子园51单片机学习网Yq5?YS
据,地址小的单元存放高字节。如果[R0]=1234H,若(R0)=30H,则(30H)=12H,(31H)=34H。电子园51单片机学习网{"h+_+Hd0_.r%j
2.二进制浮点操作数:用三个字节表示,第一个字节的最高位为数符,其余七位为
9k;P e r9C0阶码(补码形式),第二字节为尾数的高字节,第三字节为尾数的低字节,尾数用双字节
-]He6k ]Rj8@0纯小数(原码)来表示。当尾数的最高位为1时,便称为规格化浮点数,简称操作数。在
.F fEE^:Lq;Ev0程序说明中,也用[R0]或[R1]来表示R0或R1指示的浮点操作数,例如:当[R0]=-6.000时,电子园51单片机学习网%mg)b4mw x^
则二进制浮点数表示为83C000H。若(R0)=30H,则(30H)=83H,(31H)=0C0H,(32H)=00H。电子园51单片机学习网f8[O5N9EH?
3.十进制浮点操作数:用三个字节表示,第一个字节的最高位为数符,其余七位为
"M Y8x7i YWbPf0阶码(二进制补码形式),第二字节为尾数的高字节,第三字节为尾数的低字节,尾数用电子园51单片机学习网'f$Q!I.Qn,o
双字节BCD码纯小数(原码)来表示。当十进制数的绝对值大于1时,阶码就等于整数
|hv/o"GZ0部分的位数,如 876.5 的阶码是03H,-876.5 的阶码是 83H;当十进制数的绝对值小于1
p^+N}] W0时,阶码就等于 80H 减去小数点后面零的个数,例如 0.00382 的阶码是 7EH,-0.00382
(K0X1QF.v;jOp0的阶码是 0FEH。在程序说明中,用[R0]或[R1]来表示R0或R1指示的十进制浮点操作数。例
Y?-jT$LJD,A0O0如有一个十进制浮点操作数存放在30H、31H、32H中,数值是 -0.07315,即-0.7315乘以10电子园51单片机学习网7}jDkJ
的-1次方,则(30H)=0FFH,31H=73H,(32H)=15H。若用[R0]来指向它,则应使(R0)=30H。
kH|)_bA!g+Q'e^04.运算精度:单次定点运算精度为结果最低位的当量值;单次二进制浮点算术运算电子园51单片机学习网9B_E8Qv'E5UHUYuh
的精度优于十万分之三;单次二进制浮点超越函数运算的精度优于万分之一;BCD码浮
zH:x,wA:L$nj$@;w0点数本身的精度比较低(万分之一到千分之一),不宜作为运算的操作数,仅用于输入或
7u _ wDc\@'^z0输出时的数制转换。不管那种数据格式,随着连续运算的次数增加,精度都会下降。电子园51单片机学习网"O+\/m l(ho0jdg
5.工作区:数据工作区固定在A、B、R2~R7,数符或标志工作区固定在PSW和23H单电子园51单片机学习网8?Tj6j(M&s,Tg'o
元(位1CH~1FH)。在浮点系统中,R2、R3、R4和位1FH为第一工作区,R5、R6、R7和位1EH电子园51单片机学习网8V(zTh+\$?
为第二工作区。用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的电子园51单片机学习网qh(~ v} oe
透明性。电子园51单片机学习网6vr/wE^;JWTO,s
6.子程序调用范例:由于本程序库特别注意了各子程序接口的相容性,很容易采用电子园51单片机学习网V?doB%tN
积木方式(或流水线方式)完成一个公式的计算。以浮点运算为例:电子园51单片机学习网s/x/pG U
计算 y = Ln √ | Sin (ab/c+d) |
#HV u c1}2K0已知:a=-123.4;b=0.7577;c=56.34;d=1.276; 它们分别存放在30H、33H、36H、电子园51单片机学习网$@H}ddi
39H开始的连续三个单元中。用BCD码浮点数表示时,分别为a=831234H;b=007577H;
FE0tE3O2fUt0c=025634H;d=011276H。
b-E!q-TM3N0求解过程:通过调用BTOF子程序,将各变量转换成二进制浮点操作数,再进行各电子园51单片机学习网d~V @-C4f2WK
种运算,最后调用FTOB子程序,还原成十进制形式,供输出使用。程序如下:电子园51单片机学习网|U9P6c5ad*@8m
TEST: MOV R0,#39H ;指向BCD码浮点操作数d电子园51单片机学习网JR'ks i6z
LCALL BTOF ;将其转换成二进制浮点操作数
gh^)UZ6ja}0MOV R0,#36H ;指向BCD码浮点操作数c电子园51单片机学习网3ZLd w/Xe2im7? w
LCALL BTOF ;将其转换成二进制浮点操作数电子园51单片机学习网!x-]h#d.]WPi @3O9nB(S
MOV R0,#33H ;指向BCD码浮点操作数b
pno_ V5z~X~/h0LCALL BTOF ;将其转换成二进制浮点操作数
+tVV'cx!B0MOV R0,#30H ;指向BCD码浮点操作数a电子园51单片机学习网Mp_wDS
LCALL BTOF ;将其转换成二进制浮点操作数电子园51单片机学习网 o@v:Ejg*i
MOV R1,#33H ;指向二进制浮点操作数b
#P P&ZDe:lP0LCALL FMUL ;进行浮点乘法运算
WU Ag5j8u0MOV R1,#36H ;指向二进制浮点操作数c电子园51单片机学习网6^(f jT F9|
LCALL FDIV ;进行浮点除法运算
3O&~4xDASr&L0MOV R1,#39H ;指向二进制浮点操作数d电子园51单片机学习网F(a'xf(a.d7]
LCALL FADD ;进行浮点加法运算电子园51单片机学习网E,c1R\fmhu'p
LCALL FSIN ;进行浮点正弦运算
9^ yh;u+?#p~a0LCALL FABS ;进行浮点绝对值运算
5E:s[$N*s(a0LCALL FSQR ;进行浮点开平方运算
}WWf^C/g)y0LCALL FLN ;进行浮点对数运算
ZXQo{c!O8x0LCALL FTOB ;将结果转换成BCD码浮点数电子园51单片机学习网 ])~:_RGV:Ga
STOP: LJMP STOP电子园51单片机学习网 JJ s6To~/w*sH
END电子园51单片机学习网^4rQ@}Y#Lu
运行结果,[R0]=804915H,即y=-0.4915,比较精确的结果应该是-0.491437。电子园51单片机学习网hutp'~ M
 
8Z*rA6^l!gu0(1) 标号: FSDT 功能:浮点数格式化

3p&due+V$[[)] kG j0 电子园51单片机学习网/L2Wz9{;cT

入口条件:待格式化浮点操作数在[R0]中。电子园51单片机学习网m UG#PI/u
出口信息:已格式化浮点操作数仍在[R0]中。
wQ;AcJ D g0影响资源:PSW、A、R2、R3、R4、位1FH 堆栈需求: 6字节电子园51单片机学习网N*bF+S(H
FSDT: LCALL MVR0 ;将待格式化操作数传送到第一工作区中
t#QdeL I_0^0LCALL RLN ;通过左规完成格式化
xqN&z1Q5a#o2dQ0LJMP MOV0 ;将已格式化浮点操作数传回到[R0]中电子园51单片机学习网?c+|LC


&M(O ] \)Wh(J1_;m0(2) 标号: FADD 功能:浮点数加法

z!n2V}8aq%R0 电子园51单片机学习网#^a)r-yI$wym;i

入口条件:被加数在[R0]中,加数在[R1]中。电子园51单片机学习网1Qz'bTh8[P4la
出口信息:OV=0时,和仍在[R0]中,OV=1时,溢出。电子园51单片机学习网LABQ3Yow
影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 6字节电子园51单片机学习网&wpWkn#Q0z
FADD: CLR F0 ;设立加法标志电子园51单片机学习网:rtgk U%lPx
SJMP AS ;计算代数和电子园51单片机学习网k,YRwP8G


/W oU zM }B0(3) 标号: FSUB 功能:浮点数减法电子园51单片机学习网%i j:f4f'^&J#~O"`o


_,DB g S*CLK0入口条件:被减数在[R0]中,减数在[R1]中。电子园51单片机学习网2B5r&q$ZcH|:@
出口信息:OV=0时,差仍在[R0]中,OV=1时,溢出。
Y)Z#r*N7VNp#_0影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
_&`}0}g6e0FSUB: SETB F0 ;设立减法标志电子园51单片机学习网~0NW ?DB Y:O
AS: LCALL MVR1 ;计算代数和。先将[R1]传送到第二工作区
'Q\^5oFK5A]Z0MOV C,F0 ;用加减标志来校正第二操作数的有效符号
gh"R+d/Wf2\3u5p0RRC A电子园51单片机学习网aOa(bN#[
XRL A,@R1电子园51单片机学习网M/r.L)|2A j7S
MOV C,ACC.7电子园51单片机学习网&]5[)c#S[2F1u Aig
ASN: MOV 1EH,C ;将第二操作数的有效符号存入位1EH中
9C)y _5guf0XRL A,@R0 ;与第一操作数的符号比较电子园51单片机学习网E0@Se5BPN;f@L
RLC A电子园51单片机学习网 PpH2bkB"t
MOV F0,C ;保存比较结果
3M |:oO E?0LCALL MVR0 ;将[R0]传送到第一工作区中
#G5q7{&iaV:J0LCALL AS1 ;在工作寄存器中完成代数运算
/r1F&QdZ5i*tZ:L$n0MOV0: INC R0 ;将结果传回到[R0]中的子程序入口
!MSJ3[ X0f7ACV0INC R0电子园51单片机学习网z-C.f:x:s })j0`
MOV A,R4 ;传回尾数的低字节电子园51单片机学习网 p"Y`2ft\
MOV @R0,A
!b;tb @!GO4sQ0DEC R0
E mW`}&Vl0MOV A,R3 ;传回尾数的高字节电子园51单片机学习网!@i h/pfc
MOV @R0,A
es8rTc Vh-XRx0DEC R0电子园51单片机学习网Wu}`2uJyZ@
MOV A,R2 ;取结果的阶码电子园51单片机学习网?Spj rx.@
MOV C,1FH ;取结果的数符电子园51单片机学习网 |,~B.uY
MOV ACC.7,C ;拼入阶码中
}*KN}V,Sq0MOV @R0,A
T5w-g(h@ B0CLR ACC.7 ;不考虑数符
C8RIK @#[g ?0CLR OV ;清除溢出标志
[K2ff&{-bY(Od0CJNE A,#3FH,MV01;阶码是否上溢?
@*IE!o5w9\9W0SETB OV ;设立溢出标志
^8F;Rd$~+G E E a0MV01: MOV A,@R0 ;取出带数符的阶码电子园51单片机学习网5r+O~*Yw0Zn{:Wh
RET
3?-I1a*|2j5T Qp.m0MVR0: MOV A,@R0 ;将[R0]传送到第一工作区中的子程序电子园51单片机学习网 B(Iw sj5N;j
MOV C,ACC.7 ;将数符保存在位1FH中
^8ZGm x0MOV 1FH,C
*C!HiuJ,j2YOk0MOV C,ACC.6 ;将阶码扩充为8bit补码
(ds0n d'q1O1L!_0MOV ACC.7,C电子园51单片机学习网)K+zN [Ka Td$T
MOV R2,A ;存放在R2中电子园51单片机学习网G8g*}Ko4Yz
INC R0
s_U'_F8d4@4nF0MOV A,@R0 ;将尾数高字节存放在R3中
!S$g5gc f:M*o0D0MOV R3,A电子园51单片机学习网 Y&Lfv6?&@^.Uq B
INC R0
7Yga8Aqo-\8O7|0MOV A,@R0 ;将尾数低字节存放在R4中
z6}Q q!M*yF0MOV R4,A电子园51单片机学习网Q`*zJ|
DEC R0 ;恢复数据指针
,l&NeY8Y:k9]x!Lyp S0DEC R0
/b&Y I aZ7@-cp0RET电子园51单片机学习网L-v]%nN
MVR1: MOV A,@R1 ;将[R1]传送到第二工作区中的子程序
2h2J]fi aQ6`0MOV C,ACC.7 ;将数符保存在位1EH中电子园51单片机学习网)I*A3\/U Wt9T
MOV 1EH,C
mb/S z B%}#p+u$LK2`0MOV C,ACC.6 ;将阶码扩充为8bit补码电子园51单片机学习网#b']ox3_%W3t'w
MOV ACC.7,C电子园51单片机学习网)k0m}NQ(Hj hDO
MOV R5,A ;存放在R5中电子园51单片机学习网PY9q"e ~!V/A
INC R1
+r5trug!k-`g|0MOV A,@R1 ;将尾数高字节存放在R6中
\p l(k'Y0MOV R6,A电子园51单片机学习网-u tf0|5Jn~8Bd
INC R1电子园51单片机学习网r6Ru LJ
MOV A,@R1 ;将尾数低字节存放在R7中电子园51单片机学习网/k ]2N-MR @1?F9N)R(N:a
MOV R7,A电子园51单片机学习网VT$|b9x:]mV `N
DEC R1 ;恢复数据指针
6E{%JtFl8k0DEC R1
6N?`F!qa8a&G0RET电子园51单片机学习网R,d#U6gx(n6w
AS1: MOV A,R6 ;读取第二操作数尾数高字节
q1iF!F#X r0ORL A,R7
y:^7eq!FOCO0JZ AS2 ;第二操作数为零,不必运算电子园51单片机学习网zX _)OM8Pv
MOV A,R3 ;读取第一操作数尾数高字节
Z{)R7C+z%dw7mw&j0ORL A,R4电子园51单片机学习网;skx+ara{\4f
JNZ EQ1电子园51单片机学习网dqm3CV
MOV A,R6 ;第一操作数为零,结果以第二操作数为准
6j%_ T*zh1V0MOV R3,A
cW&gc8nk0MOV A,R7电子园51单片机学习网mdUc?yw}yt,X-i
MOV R4,A电子园51单片机学习网ky9hY4Yi
MOV A,R5
W4`:rE@6f0MOV R2,A
xT2f TK0MOV C,1EH
BD1EX'f'd0MOV 1FH,C电子园51单片机学习网wu2@y4~;Dd
AS2: RET电子园51单片机学习网Y!bDV s3|,a
EQ1: MOV A,R2 ;对阶,比较两个操作数的阶码电子园51单片机学习网`d*VW(d Hh1G
XRL A,R5电子园51单片机学习网;OCH6`r!hHD"F
JZ AS4 ;阶码相同,对阶结束
^9ELX Cx S(}GI0JB ACC.7,EQ3;阶符互异
%^Qep ^.l#@.R_E0MOV A,R2 ;阶符相同,比较大小电子园51单片机学习网JAD!qe,H
CLR C
O&b5v3O)K$F;I8A0SUBB A,R5电子园51单片机学习网i:l.A/d#^1Il _'m
JC EQ4
t!F{l.Ur0EQ2: CLR C ;第二操作数右规一次
#kSAAJ&Y-`0MOV A,R6 ;尾数缩小一半
7~0`s8_G#f9S JZ0RRC A
^!L\!P%m|0MOV R6,A
Nb*j x-Sp*Q!`0MOV A,R7
k{q4[:zv b%mWuz0RRC A
|c XP3hTB0MOV R7,A电子园51单片机学习网$n'U jDGPxw
INC R5 ;阶码加一电子园51单片机学习网!H$FF/c(DO5RqI
ORL A,R6 ;尾数为零否?电子园51单片机学习网*UJ6c.h'cbz#n%C0M
JNZ EQ1 ;尾数不为零,继续对阶电子园51单片机学习网Q/m8G*Gv1]"y
MOV A,R2 ;尾数为零,提前结束对阶电子园51单片机学习网.tr l0|GB;Z
MOV R5,A电子园51单片机学习网i,c:}R7iu2Q+J
SJMP AS4
kY[)OFr0EQ3: MOV A,R2 ;判断第一操作数阶符
}cl{$_R_0HE1O0JNB ACC.7,EQ2;如为正,右规第二操作数电子园51单片机学习网t-@ LU;YJ2rz
EQ4: CLR C
7U#|2m4|'d}0LCALL RR1 ;第一操作数右规一次电子园51单片机学习网?)eU8^ o.w8lX
ORL A,R3 ;尾数为零否?
b*CK?3p`J0JNZ EQ1 ;不为零,继续对阶
}B;d/?3c j'V FZ0MOV A,R5 ;尾数为零,提前结束对阶电子园51单片机学习网a5sDj5yn;Vxx;`
MOV R2,A
9N"Bt'af0AS4: JB F0,AS5 ;尾数加减判断电子园51单片机学习网9R+SY/_6r_(_
MOV A,R4 ;尾数相加电子园51单片机学习网5?.nR];t'Ds
ADD A,R7电子园51单片机学习网,QS3Q5}0R;K
MOV R4,A
o"@4E;z;?/o4a$a0MOV A,R3电子园51单片机学习网eDX-T,I:R
ADDC A,R6电子园51单片机学习网$JP s"d_6xp
MOV R3,A
8F];C/g'F*x8Q0JNC AS2
s,L[_ I t {0LJMP RR1 ;有进位,右规一次电子园51单片机学习网QENk9s
AS5: CLR C ;比较绝对值大小
dJu:^F1uQ0MOV A,R4
|&Ach@e0SUBB A,R7电子园51单片机学习网[ Dwnz(x&Z:{L
MOV B,A电子园51单片机学习网r"M2XE5m7R9?d
MOV A,R3
#x4Z)y-Er2p0SUBB A,R6
s1hR;rn0JC AS6电子园51单片机学习网)T!{z%a(_F^
MOV R4,B ;第一尾数减第二尾数
[e `m:q ]0MOV R3,A电子园51单片机学习网|n{9b.v&B:{0c%i
LJMP RLN ;结果规格化电子园51单片机学习网6]_+A] wO6j$Kg
AS6: CPL 1FH ;结果的符号与第一操作数相反电子园51单片机学习网t0bS3h~k2u:?5CP7N N
CLR C ;结果的绝对值为第二尾数减第一尾数电子园51单片机学习网h;QA5Jw Y'ht
MOV A,R7电子园51单片机学习网Ir%o~G,vb;`
SUBB A,R4
ZzvGt-hNv,Cf2N$a0MOV R4,A
S^z#kp-F2q#c0MOV A,R6
S r3P0A1b6m0SUBB A,R3电子园51单片机学习网\Qml/av9I2e
MOV R3,A
Ueg,wN0RLN: MOV A,R3 ;浮点数规格化
5Dyd r*vO{0ORL A,R4 ;尾数为零否?电子园51单片机学习网1[3s7H!x(B4O
JNZ RLN1电子园51单片机学习网:w0Ww.G g
MOV R2,#0C1H;阶码取最小值
^T2VOo#h0RET
obr3tLd^8p;W0RLN1: MOV A,R3
_u)n4F1m+N,A6b)n0JB ACC.7,RLN2;尾数最高位为一否?
e6i{*[B-P H0CLR C ;不为一,左规一次
6b}.UY_ k[#Z0LCALL RL1电子园51单片机学习网ZU3T#my$h.w0M*G3D$m$U
SJMP RLN ;继续判断
6[@6cv'c/o?Xk0RLN2: CLR OV ;规格化结束电子园51单片机学习网m*Y*_:XU
RET
)XwU0M,?1Koc0RL1: MOV A,R4 ;第一操作数左规一次电子园51单片机学习网~~L"}i#bI;{/Y
RLC A ;尾数扩大一倍电子园51单片机学习网-v'ec/cv!vL^({l-N
MOV R4,A电子园51单片机学习网ZCMj TD6G:YF(o
MOV A,R3
2n#SDR\o.k@~_'Y0RLC A
F}-o?P S)A@&ua0MOV R3,A电子园51单片机学习网 R:HV m/k8J
DEC R2 ;阶码减一电子园51单片机学习网eL/y(e4r3T z*yQ~!|"o
CJNE R2,#0C0H,RL1E;阶码下溢否?电子园51单片机学习网/co4ke4VgtE]
CLR A
F^p z&p_E_0MOV R3,A ;阶码下溢,操作数以零计电子园51单片机学习网(F_8xlm/m%OW` }
MOV R4,A电子园51单片机学习网n]x$vFV/|
MOV R2,#0C1H
E.Z#zyR:H(|x0g cT?0RL1E: CLR OV
|jL b @X0RET
Wk }!g&P'`+E5wG6sx)n0RR1: MOV A,R3 ;第一操作数右规一次
'zz2_-d*w6h0RRC A ;尾数缩小一半
"p-ppx8t#y0MOV R3,A电子园51单片机学习网Y3Z;qC l] F
MOV A,R4
1bpP h6I6P o,G0RRC A
:S3v.n6DkG0MOV R4,A
Q7M!Rc},@C4{[m0INC R2 ;阶码加一电子园51单片机学习网RE nHVQ zm
CLR OV ;清溢出标志电子园51单片机学习网 ]Su9ZO
CJNE R2,#40H,RR1E;阶码上溢否?电子园51单片机学习网"vL{)|D6f$P
MOV R2,#3FH ;阶码溢出
gD?`.k%cX0SETB OV电子园51单片机学习网 {A?6o7\C
RR1E: RET电子园51单片机学习网iw5[m!QN t,F
 电子园51单片机学习网8s hcmK#F1~n
(4) 标号: FMUL 功能:浮点数乘法电子园51单片机学习网;|r N_!{c6S)Ho

电子园51单片机学习网-K6Y8z6k)bYQBM5rRN

入口条件:被乘数在[R0]中,乘数在[R1]中。
*F"l8_6]Y2}h0出口信息:OV=0时,积仍在[R0]中,OV=1时,溢出。
r@v+_*f| q$Mx0影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节电子园51单片机学习网 Nl|n]2Y,n
FMUL: LCALL MVR0 ;将[R0]传送到第一工作区中电子园51单片机学习网q J.w"t5y(r9_
MOV A,@R0
A(?ja0z0H s/h0XRL A,@R1 ;比较两个操作数的符号
/Wz/foX7{m}O0RLC A电子园51单片机学习网0ofH#t&q B7LaB+s
MOV 1FH,C ;保存积的符号
"G7L!nbU'OYE8P0LCALL MUL0 ;计算积的绝对值
3]!_bSCa0K0LJMP MOV0 ;将结果传回到[R0]中
0_S VbV0MUL0: LCALL MVR1 ;将[R1]传送到第二工作区中
Bp!~`T ?x8Z0MUL1: MOV A,R3 ;第一尾数为零否?电子园51单片机学习网Qpe$wfC z
ORL A,R4
p.Z8wtvpaa5q0JZ MUL6
V7["?A*l&{cWza0MOV A,R6 ;第二尾数为零否?电子园51单片机学习网N/LK'dg^;E"l
ORL A,R7电子园51单片机学习网+`Z|%O7\%td(P|
JZ MUL5电子园51单片机学习网l_T#`;v#hN#KG
MOV A,R7 ;计算R3R4×R6R7-→R3R4电子园51单片机学习网e@,O:Uk}3QVr
MOV B,R4电子园51单片机学习网Q0G~d'Xqq:C
MUL AB电子园51单片机学习网I.h"lx.e2{(c'i3@
MOV A,B
%u)I&A x p&kB)w0XCH A,R7
U)W"s$T|J;v7^)FI0MOV B,R3电子园51单片机学习网2f2{J$E!YvM
MUL AB
k/b"O3wuz`1n8QY0ADD A,R7
Rov5t3p4Z xa0MOV R7,A电子园51单片机学习网-x3Y(rW.V$I
CLR A
y-EK,nJ3r7IX f0O0ADDC A,B电子园51单片机学习网o5M@ [HX~
XCH A,R4电子园51单片机学习网4g"T4\q]W
MOV B,R6电子园51单片机学习网L6u6d xB
MUL AB电子园51单片机学习网V cuh!Vtz
ADD A,R7
n:vML]hr0MOV R7,A
nF&y3Q0e*GXG$_0MOV A,B电子园51单片机学习网Nx3I b$y#jYom9Rl
ADDC A,R4电子园51单片机学习网:K(P3S$c%j
MOV R4,A电子园51单片机学习网L)H(s.w3l0dR
CLR A电子园51单片机学习网;Ee P S:fG o
RLC A
KI Vb*xk b(Y0XCH A,R3
.u6O x\{!a0] aI8t0MOV B,R6
)o({X3a-vdj2H+j0MUL AB电子园51单片机学习网?'oi&_KHD;aiE
ADD A,R4
~v/s j}(m0MOV R4,A
x@QJ2p+U8T0MOV A,B
&X9@3D/e3i7Z0ADDC A,R3
(k;l4Z6luajT|'v8L#m0MOV R3,A
t2BF+Eqia!s2y1h0JB ACC.7,MUL2;积为规格化数否?电子园51单片机学习网8B;}O)H7m ^d
MOV A,R7 ;左规一次电子园51单片机学习网 tr)f#a)fp
RLC A
@ T@0Abbi(OW0H5q0MOV R7,A
t f\p1N]m"v0LCALL RL1电子园51单片机学习网a4z5UW/K@
MUL2: MOV A,R7电子园51单片机学习网+F} p7J+_d
JNB ACC.7,MUL3电子园51单片机学习网r w]D0t q:K$[
INC R4
/~c?JC1z0MOV A,R4
:g1`8q\)YS2nV0JNZ MUL3电子园51单片机学习网H;Z5zH/p.s
INC R3电子园51单片机学习网 Q%P;x!p+Y1~ To`U~2?
MOV A,R3电子园51单片机学习网8A3bU y+Ei fUn4]
JNZ MUL3
`|*J`$H3H8b+N)o0MOV R3,#80H电子园51单片机学习网:I%Y#Q$m(hWe F
INC R2
*[t[)H"hC0MUL3: MOV A,R2 ;求积的阶码
oO3B { m\K XH0ADD A,R5
?` r1J|P0MD: MOV R2,A ;阶码溢出判断
LQBV?fN0JB ACC.7,MUL4
Cs0g o/s0JNB ACC.6,MUL6电子园51单片机学习网cl0lJBCa
MOV R2,#3FH ;阶码上溢,设立标志
3|i s s,A8iH0SETB OV电子园51单片机学习网9{4YIF+`0~$_
RET
Z{/`U+Ct0|#y0MUL4: JB ACC.6,MUL6电子园51单片机学习网7iti'_ k
MUL5: CLR A ;结果清零(因子为零或阶码下溢)电子园51单片机学习网g;S2~-Ks(aYr%r@
MOV R3,A
W$l3t$E+_0MOV R4,A电子园51单片机学习网w"L3j6v_@$J#D
MOV R2,#41H
oz(L.p9]L2?,u1})TE0MUL6: CLR OV电子园51单片机学习网9rR9M7eiDoA
RET电子园51单片机学习网a4K D iPx [9VM_G


r Wcf2|m0 
j5G ~,Yr ~Fs2s0MCS-51单片机实用子程序库(五)
H;N2|T7m _"}0 电子园51单片机学习网%zh a Ot)J!Au*Q
MCS-51单片机实用子程序库
h[0vaTs6u@0 电子园51单片机学习网)SrS }*i2v9iH.c
(5) 标号: FDIV 功能:浮点数除法 电子园51单片机学习网AkM:_1o#_;LZH
入口条件:被除数在[R0]中,除数在[R1]中。
wIga(M0出口信息:OV=0时,商仍在[R0]中,OV=1时,溢出。
k+?5|`R$sp^:]U {0y0影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 5字节
X[6i A6Q-UE{0FDIV: INC R0电子园51单片机学习网.Nm O h-?iO
MOV A,@R0
4Q3V{"u:f9e0INC R0
"hq!F&Q^ Db0ORL A,@R0
,Qx SK)B0DEC R0
9p;i] pG R(GU0I*n0DEC R0
,cz7i+d&m0JNZ DIV1
~:[!Vta(p6k9_#^4UM0MOV @R0,#41H;被除数为零,不必运算
*]PWOO;O0CLR OV
1}+} B!n*O*Lhug0RET
&wO"n[A,b0DIV1: INC R1电子园51单片机学习网3op:bS [3{L
MOV A,@R1
sZ&^(quwk)b!`0INC R1
Xl~._u7H7M)F*W0ORL A,@R1
"oq~+Qo Gd0DEC R1电子园51单片机学习网G1K+rk V
DEC R1电子园51单片机学习网 b+k-^nk:u
JNZ DIV2电子园51单片机学习网a.e0x9oRk
SETB OV ;除数为零,溢出电子园51单片机学习网iWc.RQ8R
RET电子园51单片机学习网 Sqor7N `8Y
DIV2: LCALL MVR0 ;将[R0]传送到第一工作区中电子园51单片机学习网(xG!d~a(Z,k+I
MOV A,@R0电子园51单片机学习网0a~[e&S:uV2o8A;t
XRL A,@R1 ;比较两个操作数的符号
#iDKd&B N[%K0RLC A电子园51单片机学习网-djO9s7dp;R0H
MOV 1FH,C ;保存结果的符号电子园51单片机学习网4J9y|V(C od
LCALL MVR1 ;将[R1]传送到第二工作区中
2q6c F2Z Qy.T'[D0LCALL DIV3 ;调用工作区浮点除法
.r7N.p]b7YT+u0LJMP MOV0 ;回传结果电子园51单片机学习网G3_3G5r0qr6Em7ax
DIV3: CLR C ;比较尾数的大小电子园51单片机学习网|p#Y.^ yt
MOV A,R4
[w MyS oQi.P-P o"F0SUBB A,R7电子园51单片机学习网!X:C&V*W,_Ea(B|
MOV A,R3
0F$G(kr5t.b0SUBB A,R6
-zR)`P$L0JC DIV4电子园51单片机学习网P7W ygV @[
LCALL RR1 ;被除数右规一次电子园51单片机学习网)}"kp!c:k,YwW
SJMP DIV3
a2m1[9l0`*w0DIV4: CLR A ;借用R0R1R2作工作寄存器电子园51单片机学习网sB#NH\
XCH A,R0 ;清零并保护之电子园51单片机学习网9kh)u P#@8@[0`
PUSH ACC电子园51单片机学习网ZNAo-JD2r
CLR A电子园51单片机学习网!dWZA M(Y0kt
XCH A,R1
)iRq;G%snJ/P ^0PUSH ACC
,R4x }QtE.C0MOV A,R2电子园51单片机学习网}6S6B'u(X(V.g0y
PUSH ACC
4Zmy,[tc%croj0MOV B,#10H ;除法运算,R3R4/R6R7-→R0R1
+f/e4J6}h$^m0DIV5: CLR C
wK'Q6@,S3M,{0MOV A,R1
K:b6sb,Uq h(j'J0RLC A电子园51单片机学习网1F4y'e(EP8|'m;C
MOV R1,A电子园51单片机学习网qrt e%X:} D
MOV A,R0电子园51单片机学习网&b ZCr*N
RLC A
8{/v0ZhAS0MOV R0,A
:v"?&tQ(f*F!X\[~0MOV A,R4
(tR8Ad? b1M)m0RLC A
B3Qbzh0MOV R4,A电子园51单片机学习网~]V,O Q
XCH A,R3
*f9no9O0\%]0RLC A
a-g~)Y6qs3lw6H0XCH A,R3电子园51单片机学习网P!S]!G;\'I\
MOV F0,C
J9FL}7b q|)|J0CLR C电子园51单片机学习网l%FnrIj}
SUBB A,R7
$V^(ih,?Wa)B4T/r0MOV R2,A
h9NaR5diP0MOV A,R3电子园51单片机学习网!MeW7Yh] W
SUBB A,R6
rb2H+M'L8l r0H.D0ANL C,/F0
4L:B[/P%H [4s0JC DIV6电子园51单片机学习网?q QH0w[U8Lb+]
MOV R3,A电子园51单片机学习网3koh Mf\6Q
MOV A,R2
+Z|_H&I5T/?0MOV R4,A电子园51单片机学习网[h Y(Dq r\+d
INC R1
L:] xt!Fk9l0DIV6: DJNZ B,DIV5
Q b5o;xm0MOV A,R6 ;四舍五入
S6]Hd`u1y"R4I l0CLR C电子园51单片机学习网h-b;Y]J*z
RRC A
%{"y Z1tvt0SUBB A,R3电子园51单片机学习网n*Y&D2K O1Tm.` eh5I\
CLR A电子园51单片机学习网FI[{4U-| @:t1D*n-bY
ADDC A,R1 ;将结果存回R3R4
4x5Br @6`*aVs0MOV R4,A电子园51单片机学习网R&V2@7XUv&LE
CLR A
+h8[ KR0^H\W0ADDC A,R0电子园51单片机学习网1SPI8Cm#QZ1n@
MOV R3,A
S ~ V;i;Xg4V.O1W A0POP ACC ;恢复R0R1R2
x_%E6n&V?e5Xj}P0MOV R2,A电子园51单片机学习网D(F.i"Y1e)B8s
POP ACC
_ HS"z'h:J4y@d$^$g0MOV R1,A
fd!t`$x!ZN;sz^{F2{0POP ACC
)]{ aX Vr|;nE8N7|dz0MOV R0,A
B$omY|0MOV A,R2 ;计算商的阶码电子园51单片机学习网9A]t+@y A#LKI,m8N
CLR C
0I4T5e w9ZTw*k0SUBB A,R5电子园51单片机学习网2K.h.D;bZ-Pt |
LCALL MD ;阶码检验电子园51单片机学习网 t-g m+aI
LJMP RLN ;规格化电子园51单片机学习网5`] e z"b|I#dz!B

电子园51单片机学习网iL I#F _ ^ syx!p

(6) 标号: FCLR 功能:浮点数清零电子园51单片机学习网-R#[ V,F+W


D hf _G7]o0入口条件:操作数在[R0]中。电子园51单片机学习网-v0[7\z6S'H5s5s-P4s
出口信息:操作数被清零。电子园51单片机学习网n-P2^(C&c7\
影响资源:A 堆栈需求: 2字节
JB(c5nG0FCLR: INC R0电子园51单片机学习网U9G GX3~)kc;h
INC R0电子园51单片机学习网O#QH^0["TL| l}I
CLR A
7o6q~G*A0~7_0MOV @R0,A电子园51单片机学习网4OfD+S7wU`'[2`
DEC R0电子园51单片机学习网6sc-j-E@)@
MOV @R0,A电子园51单片机学习网v1ha8j,{5Z
DEC R0电子园51单片机学习网 z'v0V~wE
MOV @R0,#41H电子园51单片机学习网b&`%Cfin&r
RET电子园51单片机学习网4Y9s2u5{N@
 电子园51单片机学习网Mn$J(_Uqd
(7) 标号: FZER 功能:浮点数判零电子园51单片机学习网:|Y&A|;Z(R


Qfm_QK0入口条件:操作数在[R0]中。
(}(^"{ ^-B&n2XLF0出口信息:若累加器A为零,则操作数[R0]为零,否则不为零。
+yuq9D Z` L A0影响资源:A 堆栈需求: 2字节电子园51单片机学习网lU2P|.CK@
FZER: INC R0电子园51单片机学习网G)m;q)NM1NJ
INC R0
h ZV A:n1CTO'R1[0MOV A,@R0电子园51单片机学习网4|6PB\z w:r&J
DEC R0
I j~ n Dpb0ORL A,@R0电子园51单片机学习网 z8_/mk(N pE
DEC R0电子园51单片机学习网P7n uk Qd
JNZ ZERO
o2C5hOp0MOV @R0,#41H电子园51单片机学习网^L Y%tTZ
ZERO: RET

`"p"U r:HzdO0 电子园51单片机学习网C/X T'p7rv_

(8) 标号: FMOV 功能:浮点数传送

MP nVwR)Qhz'u\0 电子园51单片机学习网XLY aC{SZ#`` h

入口条件:源操作数在[R1]中,目标地址为[R0]。电子园51单片机学习网vr hW \iC
出口信息:[R0]=[R1],[R1]不变。电子园51单片机学习网4}p/c8X1V,UF4v
影响资源:A 堆栈需求: 2字节电子园51单片机学习网2Ko+| RYH/|x
FMOV: INC R0电子园51单片机学习网1MFjwib#s-[9H$C&P%@#a
INC R0电子园51单片机学习网%]2|o{+m b0S[
INC R1电子园51单片机学习网/yLW-i L
INC R1
,}|d%vd(PF9p0MOV A,@R1电子园51单片机学习网Hi_4H{F~x
MOV @R0,A电子园51单片机学习网%`4c6db$MJ hd{
DEC R0电子园51单片机学习网rp P&yeN'@
DEC R1
&k?\4@Q~FixS0MOV A,@R1
S-Ln O*n0MOV @R0,A电子园51单片机学习网 sy L/lmL
DEC R0
$t xa"E;S1ib:YP m0DEC R1
,S8Q;k/|@$H t`0^0MOV A,@R1电子园51单片机学习网\,[ b7s@ xz3v
MOV @R0,A
(UYTI"K0RET
L0}%d'};K0 电子园51单片机学习网Fz:h ^tB+u#} ib
(9) 标号: FPUS 功能:浮点数压栈电子园51单片机学习网,PD-StI9z5_Z


3C[$II1x"msZ0入口条件:操作数在[R0]中。
]$R Rk,[&M"`0出口信息:操作数压入栈顶。电子园51单片机学习网h&L*E-l%w&o ^
影响资源:A、R2、R3 堆栈需求: 5字节电子园51单片机学习网z1WXF8r(r
FPUS: POP ACC ;将返回地址保存在R2R3中电子园51单片机学习网jor:Bc)N:q.r
MOV R2,A
B`'~:Q\5^4wU1s0POP ACC
,F;S4Q1N],K H0r_&QQ8u0MOV R3,A
#I}+X)@lI1Pm0MOV A,@R0 ;将操作数压入堆栈电子园51单片机学习网*Iv(s`ru Y1oQ
PUSH ACC
? ~EV-D(d0INC R0电子园51单片机学习网Q8P5U3S^"Eht/EVj'b
MOV A,@R0电子园51单片机学习网+HGOX d+{cqX4p
PUSH ACC
Y;m1@&tF-v9V0INC R0电子园51单片机学习网Q]6O3V!ax J)m&v {
MOV A,@R0
Q,X3_)_/?X#P @0PUSH ACC电子园51单片机学习网8ZLc1H2s2_Ahxj
DEC R0
CE6oqY7K0DEC R0
n'z%hyp g_0MOV A,R3 ;将返回地址压入堆栈电子园51单片机学习网+l8K1]l8}^R$~w @
PUSH ACC
.Jv}z#X8[+q+H.J0MOV A,R2
Ws LZ5j Uf0PUSH ACC电子园51单片机学习网"j/wx&`7RP)R%p]
RET ;返回主程序电子园51单片机学习网M+G!A6b2T


0|V3q${(^I o+gH/p0(10) 标号: FPOP 功能:浮点数出栈电子园51单片机学习网[kDGxkeu

电子园51单片机学习网 k.S!mx5}"Q2X7?;{

入口条件:操作数处于栈顶。电子园51单片机学习网{ UI0]1h-]-m$aq
出口信息:操作数弹至[R0]中。电子园51单片机学习网tn-HnP!r;KC z
影响资源:A、R2、R3 堆栈需求: 2字节
po8KOoi'A-u6}/bs-V0FPOP: POP ACC ;将返回地址保存在R2R3中
;w Iu P;Hhd)K~0MOV R2,A电子园51单片机学习网r~U3R,@,H-D7c
POP ACC
CJzx p&r0MOV R3,A
WB-}[&EN(N0INC R0
oV6WY)_0INC R0电子园51单片机学习网yO'Iw$b9[y1NV
POP ACC ;将操作数弹出堆栈,传送到[R0]中电子园51单片机学习网J"z$gM-N1z@"u0\
MOV @R0,A电子园51单片机学习网Hq fP,wQk/B3J
DEC R0电子园51单片机学习网$oM#c+i8@-qu hn
POP ACC
E(nk'Q(N(l2i2PDh0MOV @R0,A
@g3L&K.A#S9q0DEC R0
*F4b Fs/}2~0POP ACC
v,jZi7y2gSHVg'A0MOV @R0,A电子园51单片机学习网}!`3o+dS&]AT
MOV A,R3 ;将返回地址压入堆栈电子园51单片机学习网L1eP%Ekh(XY
PUSH ACC
#n.}6a5XuX9S0MOV A,R2
)`o)G|1MJ)|t0PUSH ACC
\aW K/h[k4r0RET ;返回主程序电子园51单片机学习网#R~"S h5d|I


&`/x3O:?3@2Z7K0(11) 标号: FCMP 功能:浮点数代数值比较(不影响待比较操作数)

J3~F/_ L&F0

r&|8U:BO)Lo0入口条件:待比较操作数分别在[R0]和[R1]中。电子园51单片机学习网8IE&H v3X*?A
出口信息:若CY=1,则[R0] < [R1],若CY=0且A=0则 [R0] = [R1],否则[R0] > [R1]。电子园51单片机学习网ml%m+ygj!{9Y
影响资源:A、B、PSW 堆栈需求: 2字节电子园51单片机学习网+MH/{ c"A)RZ
FCMP: MOV A,@R0 ;数符比较电子园51单片机学习网 f!s2t$N/^:?7b-rZ&V9V
XRL A,@R1电子园51单片机学习网:Z.Lm8[ r?
JNB ACC.7,CMP2
s E2k||r9U9M9dv0MOV A,@R0 ;两数异号,以[R0]数符为准电子园51单片机学习网7_e K]}hwr.{
RLC A
%D$_+Q9aH/n-at.EN0MOV A,#0FFH电子园51单片机学习网 aN.v-C#K@|
RET
#o N2u+|A h)q i r0CMP2: MOV A,@R1 ;两数同号,准备比较阶码
"w3P9HOM}0MOV C,ACC.6
G.[F${5f;v0MOV ACC.7,C电子园51单片机学习网|!U EM1{0? aN
MOV B,A电子园51单片机学习网4_3V\ T;Ck1R
MOV A,@R0
3?^ AQlrR1m0MOV C,ACC.7
3TR'xA9\mv9X ?0MOV F0,C ;保存[R0]的数符电子园51单片机学习网:K ^:AJdp#? Oe
MOV C,ACC.6
R/W!|}%Z7`J'D0MOV ACC.7,C
w*M$l*VG9lp ^?0CLR C ;比较阶码电子园51单片机学习网4_T b^YK
SUBB A,B电子园51单片机学习网Yf ` fA SU{n
JZ CMP6
%| k(g-Je J4?s L0RLC A ;取阶码之差的符号电子园51单片机学习网 } M9m XWW(](`!y
JNB F0,CMP5
?T {"akGgv+p0CPL C ;[R0]为负时,结果取反
e'|]da&i} V\r-`0CMP5: MOV A,#0FFH ;两数不相等电子园51单片机学习网P\N!C:t r"w
RET电子园51单片机学习网b4_ {&IU(wt
CMP6: INC R0 ;阶码相同时,准备比较尾数电子园51单片机学习网(MlJ d2hiu9i
INC R0电子园51单片机学习网`jy$B.ss
INC R1
G ^W pP0INC R1
Q$Dcm X4M6K0CLR C
k_&Jn_/D0MOV A,@R0电子园51单片机学习网8Wr^4{.c
SUBB A,@R1
Gi'suW!~D0J8@0MOV B,A ;保存部分差
}4|(~/`f0DEC R0电子园51单片机学习网&`(fN ZkL{UkM4J
DEC R1电子园51单片机学习网ph6e&dd O'y(J
MOV A,@R0
-m p:w"mW| sF0n0SUBB A,@R1电子园51单片机学习网dN Tw6t`
DEC R0电子园51单片机学习网p8E)|7ah
DEC R1电子园51单片机学习网~9ds9{5XLP^`
ORL A,B ;生成是否相等信息
2Ap0e.r9?4P2N0JZ CMP7电子园51单片机学习网3Cg+I2Fv'm+H
JNB F0,CMP7电子园51单片机学习网J+b_|:I
CPL C ;[R0]为负时,结果取反
u,[1u8aN%Q0CMP7: RET
(L,oZ \h*h0 电子园51单片机学习网;kA+`-Wz2N_0U Yt
(12) 标号: FABS 功能:浮点绝对值函数

n'eH1xAL @8osS0 电子园51单片机学习网 b)\W A ^.I7|+S

入口条件:操作数在[R0]中。
Zt"Z/u%[!~3m$?0出口信息:结果仍在[R0]中。
8S4Y@/BFB0影响资源:A 堆栈需求: 2字节
9s/T0y l)n,G)t0FABS: MOV A,@R0 ;读取操作数的阶码
c?&uOBwF5j9I0CLR ACC.7 ;清除数符电子园51单片机学习网B g u]y!q~
MOV @R0,A ;回传阶码电子园51单片机学习网Q7Ix+JDS hd4k
RET电子园51单片机学习网1X(n6Rk}:A

电子园51单片机学习网$`G;E-UYY

(13) 标号: FSGN 功能:浮点符号函数

-ZYb!Xlgc!V0

rI-J5N,X6X(w0入口条件:操作数在[R0]中。电子园51单片机学习网Ku!SR"ue7Oi,|d
出口信息:累加器 A="1" 时为正数,A=0FFH时为负数,A=0 时为零。
S,^ [jj,fl {B0影响资源:PSW、A 堆栈需求: 2字节
Drk8E5X_l4Uy0FSGN: INC R0 ;读尾数电子园51单片机学习网$RYVl]9~/H#_P!d
MOV A,@R0
Nd+mBa? ^9pi0INC R0电子园51单片机学习网 `#`9NKL z qq
ORL A,@R0电子园51单片机学习网(he%Y%j$L
DEC R0电子园51单片机学习网,@Q ])M@&[IMb
DEC R0
V#]{i[(P` Kc]0JNZ SGN电子园51单片机学习网.e[7B7fK
RET ;尾数为零,结束电子园51单片机学习网U_TC;M*[#^U|
SGN: MOV A,@R0 ;读取操作数的阶码电子园51单片机学习网b1{*Pq)j0c"N
RLC A ;取数符电子园51单片机学习网(T/`$@5KWKF
MOV A,#1 ;按正数初始化
Wl)v*LwIE O@0JNC SGN1 ;是正数,结束
X-I(c(vXa8~w0MOV A,#0FFH ;是负数,改变标志
$E$E)u.Xt q}0SGN1: RET电子园51单片机学习网(c`$CL5{'P+ja^t


| ~,zg3E9z#Mxq)a+O0(14) 标号: FINT 功能:浮点取整函数

_ _-i%Kg.q*`0 电子园51单片机学习网 @U~O-J I

入口条件:操作数在[R0]中。电子园51单片机学习网uQ(_^1e {
出口信息:结果仍在[R0]中。
-E_.zb"j eLe0影响资源:PSW、A、R2、R3、R4、位1FH 堆栈需求: 6字节电子园51单片机学习网Z C:[8sd9U
FINT: LCALL MVR0 ;将[R0]传送到第一工作区中
7ZdHAe6Eo0LCALL INT ;在工作寄存器中完成取整运算
#N"Wmm6K/Y/?0LJMP MOV0 ;将结果传回到[R0]中电子园51单片机学习网-d$fY be
INT: MOV A,R3
:m%SQ C/[6s0]"K5vi@0ORL A,R4
|ifQz:o"Diz0JNZ INTA
MY:Q9x"Jl1x[{0CLR 1FH ;尾数为零,阶码也清零,结束取整电子园51单片机学习网%I.R8Bb!j2o4f%wsl
MOV R2,#41H
*f ]I4j_0RET
/x(JC\(T uN;_ ]0INTA: MOV A,R2
@x-D/P!a`S a0JZ INTB ;阶码为零否?
G"v6Ff E!q0JB ACC.7,INTB;阶符为负否?
u.kS$V'mjp0CLR C电子园51单片机学习网`;J![7~"D_Z
SUBB A,#10H ;阶码小于16否?电子园51单片机学习网$OEsdP'e$b
JC INTD
gj e4I)~*p/N0RET ;阶码大于16,已经是整数电子园51单片机学习网.t8n8v&h G.{]!@
INTB: CLR A ;绝对值小于一,取整后正数为零,负数为负一
Q`&U@T?.?:r0MOV R4,A
b@`o9Bp0MOV C,1FH
v q M8yqwz {0RRC A
Nt5r+d&^xd-m)I0MOV R3,A电子园51单片机学习网 AJ8D7T-K M,p
RL A电子园51单片机学习网1h7m RK:a2l}2KUcx3u
MOV R2,A电子园51单片机学习网Gz `vD{9l7P&~l1a/N
JNZ INTC
GE4hNH\0MOV R2,#41H
kbo9Y4lEF0INTC: RET
x/d]H G(F"MLT2^0INTD: CLR F0 ;舍尾标志初始化电子园51单片机学习网Jw-bA!P,X5XV@
INTE: CLR C
Ps{H ZZ$n0?0LCALL RR1 ;右规一次
,Y*lNe+_4z&S#|9_E0ORL C,F0 ;记忆舍尾情况电子园51单片机学习网;XZa J OR4X
MOV F0,C
O6P7x:V&K0CJNE R2,#10H,INTE;阶码达到16(尾数完全为整数)否?电子园51单片机学习网#@o|c-aI3sK$Jqr
JNB F0,INTF ;舍去部分为零否?电子园51单片机学习网 Nt5i'P1Z4|jA.M
JNB 1FH,INTF;操作数为正数否?
,Vc%Of9n&lQJfT0INC R4 ;对于带小数的负数,向下取整
;Xecdo1tG0MOV A,R4电子园51单片机学习网W ~;XDc kJT
JNZ INTF
&d8O3T5X$S@CO%]0INC R3电子园51单片机学习网hysCO W
INTF: LJMP RLN ;将结果规格化电子园51单片机学习网Z c2R0w)qxJ


I|3P}u0(15) 标号: FRCP 功能:浮点倒数函数电子园51单片机学习网l7[J7H t%`hD

电子园51单片机学习网6ff&WF,Y

入口条件:操作数在[R0]中。
(nj+NaqjpZ0出口信息:OV=0时,结果仍在[R0]中,OV=1时,溢出。电子园51单片机学习网'G2r ?:Gb3sO!T
影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 5字节电子园51单片机学习网 c f[P-_5ryF
FRCP: MOV A,@R0电子园51单片机学习网*te|K5F3_(sK1t5l&T
MOV C,ACC.7
p*d#L f;Xk@&x.Y/e0MOV 1FH,C ;保存数符电子园51单片机学习网 ^ E0A@E-R(Wr T a^
MOV C,ACC.6 ;绝对值传送到第二工作区电子园51单片机学习网a.~,x}$v H
MOV ACC.7,C电子园51单片机学习网/M~#Vp!cR^2XF/s
MOV R5,A电子园51单片机学习网`d7[Em$A-U
INC R0电子园51单片机学习网Q R h W*J;N
MOV A,@R0
hc|h"|K.X0MOV R6,A电子园51单片机学习网6z`m+B;x-bV'@,I
INC R0
1S]"e6Ia3c0MOV A,@R0电子园51单片机学习网)_t]#x:Y4?HI
MOV R7,A
({;fC2I c0DEC R0
@8A r8X}$}K'h0DEC R0
Q3x X3B)[,K0ORL A,R6电子园51单片机学习网 v5s ]co._&X
JNZ RCP
AQ S9J{n0SETB OV ;零不能求倒数,设立溢出标志电子园51单片机学习网 ~s5o,r aLBS q
RET电子园51单片机学习网'Q0^A}l)Eo!w
RCP: MOV A,R6电子园51单片机学习网7^CK{4xx:G4~!D4h Bi
JB ACC.7,RCP2;操作数格式化否?
1{AC1o1a4e`0CLR C ;格式化之电子园51单片机学习网/p0@(S$oQ1Y"N
MOV A,R7
YF?1B0]9Jb4MD0RLC A电子园51单片机学习网&y nc;Lt/\%iHJ
MOV R7,A电子园51单片机学习网!]OH9O&bH
MOV A,R6
%p m| lvk([0RLC A
W7[LvF)uy0MOV R6,A电子园51单片机学习网 zO^ciwLu
DEC R5电子园51单片机学习网#R m?p/I(y?|
SJMP RCP电子园51单片机学习网vAvh)T`+{
RCP2: MOV R2,#1 ;将数值1.00传送到第一工作区
^"L5~-C(?HZ2`%o0MOV R3,#80H电子园51单片机学习网1kWN`;?[0N-N.Ob
MOV R4,#0
X6c G-TI']m0K0LCALL DIV3 ;调用工作区浮点除法,求得倒数
Ax0g:Qbw&z0LJMP MOV0 ;回传结果

7fi5V X1I!AG$W%H#a9p0 电子园51单片机学习网h-pJT1GZBNl

(16) 标号: FSQU 功能:浮点数平方

BC3a*rL6F3Ts0

gc6LL;H!VC0入口条件:操作数在[R0]中。电子园51单片机学习网K-~F#zf.Ot7G Y
出口信息:OV=0时,平方值仍然在[R0]中,OV=1时溢出。电子园51单片机学习网I-Ne7C%z2M j.b I
影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 9字节
c R V9i4H!c.`9oW0FSQU: MOV A,R0 ;将操作数电子园51单片机学习网r{cPn
XCH A,R1 ;同时作为乘数
A[ WC ^k0PUSH ACC ;保存R1指针
U)Vx+dNf4|Qo0LCALL FMUL ;进行乘法运算
.^rJOK0POP ACC电子园51单片机学习网B[ d sw ~+\(m
MOV R1,A ;恢复R1指针
aC[$k\0gv2J O0RET电子园51单片机学习网j9q E+s-B ncC


eI'g4\%?*y6C0 
|&}n?NO0MCS-51单片机实用子程序库(六)
K(A9m2iq7O(u y n0 电子园51单片机学习网"IA"Q9p%N
MCS-51单片机实用子程序库
5Ra4_2A/{ {7\nU-k p0(17) 标号: FSQR 功能:浮点数开平方(快速逼近算法)

eXDb$cS0l0

2c^~ X2nZ0入口条件:操作数在[R0]中。电子园51单片机学习网yT"n&y(s
出口信息:OV=0时,平方根仍在[R0]中,OV=1时,负数开平方出错。电子园51单片机学习网k:M!` U8~H*m
影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
Da*Y'nG5cMj P#y0FSQR: MOV A,@R0
~s:]8f(c L ] i }0JNB ACC.7,SQR电子园51单片机学习网8i1b1i(H&X+f
SETB OV ;负数开平方,出错电子园51单片机学习网r3S2Tm4E ~EFu6l
RET
*SO_^Z6g+i/t6I p}0SQR: INC R0
'x r4uy CxVmrE ZgD0INC R0电子园51单片机学习网w/yivNj&L
MOV A,@R0电子园51单片机学习网/U*`/t!g qh j
DEC R0
gKn*k&}-ESS0ORL A,@R0
Si)t?{&`(qL0DEC R0电子园51单片机学习网 j} E3z9g @7Y8pnpw
JNZ SQ
$V p R"\)V~m7x-bxS U0MOV @R0,#41H;尾数为零,不必运算
M]c)@|y"My0CLR OV电子园51单片机学习网9^`#z1Q4P
RET
k;W1p Rol#o%X0t0SQ: MOV A,@R0电子园51单片机学习网$X Av-YtO2Sz
MOV C,ACC.6 ;将阶码扩展成8bit补码
Q.UySO#X0MOV ACC.7,C
2a*yi;hJ&F0INC A ;加一
X)iI}Nt:Z0CLR C电子园51单片机学习网,Q!A*I1^%h:\-uzA
RRC A ;除二电子园51单片机学习网5|#j]'N:d)H*R8`S'l"NT
MOV @R0,A ;得到平方根的阶码,回存之
f%Q'[)GG0}0INC R0 ;指向被开方数尾数的高字节电子园51单片机学习网Qc1v C~3J1x9s
JC SQR0 ;原被开方数的阶码是奇数吗?电子园51单片机学习网Y R#w{8k5@0~&d"W
MOV A,@R0 ;是奇数,尾数右规一次电子园51单片机学习网-phsV9l
RRC A
r1pP3YV,] gOK0MOV @R0,A
abM,v/A2T(V!p0INC R0
o*]5m&F.L5g,K`0MOV A,@R0电子园51单片机学习网.Z$lU|?-K1Sf)j2R"]
RRC A
9K S`*iZ0MOV @R0,A电子园51单片机学习网(gnI5ID
DEC R0电子园51单片机学习网#hXB`&cY
SQR0: MOV A,@R0
T w{R.M+GJv0JZ SQR9 ;尾数为零,不必运算
]S3w'c4Oc&L0MOV R2,A ;将尾数传送到R2R3中
&g%Cxo4h _b0INC R0
+mm:\D:Q*g'S9[)s0MOV A,@R0电子园51单片机学习网$Q3Y9S8Q1?a5y
MOV R3,A电子园51单片机学习网^![%^H] A k
MOV A,R2 ;快速开方,参阅定点子程序说明电子园51单片机学习网^&Fcls7j q!Xj
ADD A,#57H电子园51单片机学习网@0mB(?doF(A
JC SQR2电子园51单片机学习网)qS3l Mc+]8c}
ADD A,#45H
;glj5f*~"n f]4J0JC SQR1电子园51单片机学习网:w#a2}0~ F0]V*h
ADD A,#24H
t ^LT3A7SDJ }0MOV B,#0E3H
V%K MN9\[)VA0MOV R4,#80H电子园51单片机学习网5~,Y5A;BA
SJMP SQR3
%[.iuC6}^~9W1K0SQR1: MOV B,#0B2H
,GY'h%q&r&o/w{0MOV R4,#0A0H
YhK#@1Y0gN0SJMP SQR3电子园51单片机学习网$poPuw2I
SQR2: MOV B,#8DH
j'H Rkf!IOV0x0MOV R4,#0D0H
Q p$h[e ]%A0SQR3: MUL AB电子园51单片机学习网eYd8h R/R(~
MOV A,B
:[[5l~:K'?UbV0ADD A,R4电子园51单片机学习网ZR+N?\
MOV R4,A
P0i0l0N;n[3[r-Ls6n0MOV B,A
0\+|-DKV A-s U0Y0MUL AB
qD*CH{3XDvT a0XCH A,R3
^ c%FG#ZqV\:w0CLR C电子园51单片机学习网 E`uRs
SUBB A,R3
H ^*qke:b!X/I0MOV R3,A
^r6Y)w7d0MOV A,B电子园51单片机学习网.uC~ n4wba
XCH A,R2电子园51单片机学习网 J6^ Ug a b(N
SUBB A,R2
S I(@+{|QPw*BH0MOV R2,A电子园51单片机学习网1m5@-M.P0|;\)X(C4P7GX7i
SQR4: SETB C
+~T-kfVq~'iM0MOV A,R4
s)d%gQ \K I7CLe`0RLC A电子园51单片机学习网!v5o@Bdtl:GG
MOV R6,A电子园51单片机学习网dX(`;mV:WE
CLR A
*yMD-Tg*L!tm0RLC A电子园51单片机学习网,qs$`\!@
MOV R5,A电子园51单片机学习网x dDU.? x0lQ~
MOV A,R3电子园51单片机学习网5U%HCf C|/xTq
SUBB A,R6电子园51单片机学习网 e_ v0P,W/N*\eY qU
MOV B,A
?r9O+f-^(qxg0MOV A,R2
-f-|U:W6V"j0j!\S0SUBB A,R5
8k3Kwz4b5Y0JC SQR5电子园51单片机学习网 B$M%`-F1U&e@;h
INC R4
0^1Y S*t'u'Ly1`0MOV R2,A电子园51单片机学习网~0v^L|
MOV R3,B
eq|}4x @y0SJMP SQR4
)Dy;E*U Oh3BQ!k0SQR5: MOV A,R4电子园51单片机学习网fcu]ZeI7zu
XCH A,R2
u7Y_vtZrz }0RRC A电子园51单片机学习网 \4?M|GH,R[ n n
MOV F0,C电子园51单片机学习网 @S0cX~gz
MOV A,R3电子园51单片机学习网8fz6Am ?$z8n
MOV R5,A电子园51单片机学习网-Z9Af$hY`$oK0E
MOV R4,#8
lA D$n7fz0SQR6: CLR C电子园51单片机学习网!Jq` U |
MOV A,R3
~j3yG!d]9fH_7@2q0RLC A电子园51单片机学习网+XM'y0I-MzPf
MOV R3,A
@Th xz~0CLR C电子园51单片机学习网[%bQ*Ts^)pV
MOV A,R5
;MG:^fyJ(X&p1|u)J0SUBB A,R2
v"m,wyU,m cA.~4J0JB F0,SQR7电子园51单片机学习网 s{/d G#e'L!F}
JC SQR8电子园51单片机学习网b;} ZF2]Y`-jU0G"d
SQR7: MOV R5,A电子园51单片机学习网"\)`3A)E^#k~ FK'T8i
INC R3电子园51单片机学习网j%d'D*[yH p
SQR8: CLR C
Y.Fr0r-TZpX0MOV A,R5电子园51单片机学习网7HsD"e)ID'@
RLC A
%WXik:x/EY0MOV R5,A
N1y u&_.w5_\/W0MOV F0,C
boZ#f3\%Z"h4} ]c{ }0DJNZ R4,SQR6
6N6Xr.Bl a aBur0MOV A,R3 ;将平方根的尾数回传到[R0]中电子园51单片机学习网x$T2Ol.D
MOV @R0,A电子园51单片机学习网:zB.u[h9E f
DEC R0电子园51单片机学习网)L T)wGX
MOV A,R2
*i O/f'\5Pj+Fe0MOV @R0,A
y?zcO#a#BZeVo0SQR9: DEC R0 ;数据指针回归原位
oc eaU9ev~ Yj*O0CLR OV ;开方结果有效电子园51单片机学习网?wZK0?K@
RET

B(PJ"t8bg5u Y0

^3[dS0l/bf0(18) 标号: FPLN 功能:浮点数多项式计算

A'fIs(T(\0

(E&B%MX#i$B0入口条件:自变量在[R0]中,多项式系数在调用指令之后,以40H结束。
8HK9f||b0出口信息:OV=0时,结果仍在[R0]中,OV=1时,溢出。电子园51单片机学习网E/H-Q s)n1I
影响资源:DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 4字节
}8j6Jw)[ Pg!`A.^%\0FPLN: POP DPH ;取出多项式系数存放地址
4]M ?nXcq(~1Y0POP DPL电子园51单片机学习网-{"^#x5I;s~
XCH A,R0 ;R0、R1交换角色,自变量在[R1]中电子园51单片机学习网u|kYBZ
XCH A,R1电子园51单片机学习网kW\0zN.d,n
XCH A,R0
F+N{"e&o ]1y}0CLR A ;清第一工作区电子园51单片机学习网T%kk [ N0P
MOV R2,A电子园51单片机学习网y+O&}TlC
MOV R3,A
!G#d~ L&]$N r0MOV R4,A
R$m j?V:L0CLR 1FH
$q#?e2v5R rt#i-r0PLN1: CLR A ;读取一个系数,并装入第二工作区电子园51单片机学习网M9w5mN#]2@
MOVC A,@A+DPTR
@{AG/tTv?R h0MOV C,ACC.7
F2Kec&ko D}0MOV 1EH,C
Np|*XeD!q#Yo]0MOV C,ACC.6
OX%K)y t5pa*pXY0MOV ACC.7,C电子园51单片机学习网%e*Wr!j m}'bF
MOV R5,A电子园51单片机学习网3@3^_*I Z
INC DPTR
.CqHCU[%Rj tE,utH ~f0CLR A电子园51单片机学习网"r6ZK9~#RLT2\
MOVC A,@A+DPTR电子园51单片机学习网+W p h_IJ#` t5?r9a
MOV R6,A
P V[ll7v#f;xT2W0INC DPTR
p$O/g]];DL7j0CLR A
4Q;il1E9RQp-Z0MOVC A,@A+DPTR电子园51单片机学习网pb%Fh4e
MOV R7,A
4SO7E!Q6{pr0INC DPTR ;指向下一个系数电子园51单片机学习网u(O])Q'~2r{*Z
MOV C,1EH ;比较两个数符
yK$X6uH;P0RRC A
Gngrop0A0XRL A,23H
n bF@o'Vax0RLC A
0E*Q%FS]+F9n0MOV F0,C ;保存比较结果
u {H[dPy0LCALL AS1 ;进行代数加法运算电子园51单片机学习网7U#]FM5f,{2t]}
CLR A ;读取下一个系数的第一个字节电子园51单片机学习网 @ZT$@0\.J w
MOVC A,@A+DPTR
"M-b$^-Sl-uM(zmt V0CJNE A,#40H,PLN2;是结束标志吗?电子园51单片机学习网I7]Knt;{nh,W+D
XCH A,R0 ;运算结束,恢复R0、R1原来的角色
p_o2g1s0XCH A,R1电子园51单片机学习网2D$Sl2B9v'`c] t
XCH A,R0
}8G7xQRJ!F fV0LCALL MOV0 ;将结果回传到[R0]中电子园51单片机学习网Fm0kjz| b}
CLR A电子园51单片机学习网#kd4R/D5?N7N
INC DPTR
wX:N&bzC N0JMP @A+DPTR ;返回主程序
!MC:Y_(k!S9q0PLN2: MOV A,@R1 ;比较自变量和中间结果的符号电子园51单片机学习网P^S%Txp
XRL A,23H
ycV9E].[:d3j8B0RLC A电子园51单片机学习网GI F S6J ?g
MOV 1FH,C ;保存比较结果电子园51单片机学习网S0r.C-sm8}
LCALL MUL0 ;进行乘法运算电子园51单片机学习网n8A0s N9X0Q#e2o)H1Fc e
SJMP PLN1 ;继续下一项运算

{)w"As`6b0

m@B9bq$C0(19) 标号: FLOG 功能:以10为底的浮点对数函数

qR4LT#\-|ZR0 电子园51单片机学习网)u5J&oX4f&` ?P;K

入口条件:操作数在[R0]中。
|Dt m@9x'W0出口信息:OV=0时,结果仍在[R0]中,OV=1时,负数或零求对数出错。
_BF6XKh7Ot;j0影响资源:DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:9字节
?aJ$v,NE5Fg0FLOG: LCALL FLN ;先以e为底求对数电子园51单片机学习网c"btX*b
JNB OV,LOG电子园51单片机学习网kE(_*`mXfZ
RET ;如溢出则停止计算电子园51单片机学习网3`(VB{*{h*B6G
LOG: MOV R5,#0FFH;系数0.43430(1/Ln10)电子园51单片机学习网 z)]6M(}:w![ z
MOV R6,#0DEH
!Fw3\fy2J~0MOV R7,#5CH
-o#v6c|%{0I Bj0f#}0LCALL MUL1 ;通过相乘来换底电子园51单片机学习网jxL}_
LJMP MOV0 ;传回结果电子园51单片机学习网-X&k q4a7N
 电子园51单片机学习网 Js-Z:V MJ/I!Q1M#kYL
(20) 标号: FLN 功能:以e为底的浮点对数函数电子园51单片机学习网 i{2K%G!kG


"Y5g6V7f l0入口条件:操作数在[R0]中。
/^$w*O(@u,n$i"SD b0出口信息:OV=0时,结果仍在[R0]中,OV=1时,负数或零求对数出错。
xz!LF6M F6x0影响资源:DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 7字节
2NW4M!bFKz&S1u)Y0 
UkepIt"k;_RbO)y0FLN: LCALL MVR0 ;将[R0]传送到第一工作区
v[ x&TkS0O2x0JB 1FH,LNOV;负数或零求对数,出错电子园51单片机学习网 _FXt rDC({!K4\j
MOV A,R3
Qo5AE,oe1U;l0ORL A,R4
N'v$k Q0X(YbA0JNZ LN0电子园51单片机学习网6V.]F m|;xE |
LNOV: SETB OV
0W^#R;G\ g%oi#a0RET
6Z]Q U2j6J0LN0: CLR C电子园51单片机学习网A\P)X2Ht9k3x
LCALL RL1 ;左规一次
lh2?[@"i0CLR A电子园51单片机学习网C3?)\:B3v7erb
XCH A,R2 ;保存原阶码,清零工作区的阶码电子园51单片机学习网!v-\{&X M _OdO
PUSH ACC
^;Nvso8t'V&sr`Uu0LCALL RLN ;规格化
bN`x#Yhx Dw-^+{ n0a0LCALL MOV0 ;回传
D,@,`q-I8B0LCALL FPLN ;用多项式计算尾数的对数电子园51单片机学习网J%Gm#_)[9J
DB 7BH,0F4H,30H;0.029808电子园51单片机学习网J9fatg.^
DB 0FEH,85H,13H;-0.12996电子园51单片机学习网A$HY4?x2n q&V7y
DB 7FH,91H,51H;0.28382
1R5F3auK'wL8K0DB 0FFH,0FAH,0BAH;-0.4897
7G,jT,^)T6vw1W}5oR0DB 0,0FFH,0CAH;0.99918电子园51单片机学习网B ] p6dG^2S
DB 70H,0C0H,0;1.1442×10-5
qhf9P%Jyl0DB 40H ;结束电子园51单片机学习网2|2T"H&e8m _7D
POP ACC ;取出原阶码电子园51单片机学习网Q/q P^*r*G~(TH-?!`
JNZ LN1
F6e!s)rO?#t0RET ;如为零,则结束
X0A7KF Y h)^-x0LN1: CLR 1EH ;清第二区数符电子园51单片机学习网&B2](_o8h1mQ.x
MOV C,ACC.7
F/D`-m-o7m0MOV F0,C ;保存阶符电子园51单片机学习网6@5K;E)B4[
JNC LN2
U"[1jFH0CPL A ;当阶码为负时,求其绝对值电子园51单片机学习网/^#i6m'J.rM*G]
INC A
[d!n*lK6?0LN2: MOV R2,A ;阶码的绝对值乘以0.69315电子园51单片机学习网zaw-e bfc!sDb`
MOV B,#72H
!g6o7C al~8[ ut0MUL AB电子园51单片机学习网?S\mCX
XCH A,R2
:R4e6c!{Y pD w0MOV R7,B
.`:i9C J,J"h0\0MOV B,#0B1H
h6i0n`7r K+kt0Fg7Bj0MUL AB
,] hq_A&omJ0ADD A,R7电子园51单片机学习网^{0oB.Hq^d |f%uD
MOV R7,A ;乘积的尾数在R6R7R2中
:x-s8IX!iq5a-hX0CLR A
!?+lTYl+J0ADDC A,B
})F)P@5Z4L@R5C^0MOV R6,A电子园51单片机学习网s0pgXVL-U!I
MOV R5,#8 ;乘积的阶码初始化(整数部分为一字节)
3NB a\6kZ;j*]s0LN3: JB ACC.7,LN4;乘积格式化电子园51单片机学习网$s"T7Ir4IE x:T'C@6E
MOV A,R2电子园51单片机学习网*i3R.q4F+w
RLC A电子园51单片机学习网]8wYP"I'Gu9^
MOV R2,A
4P_rq xlA8P E4N R0MOV A,R7
Qzk%c&J/M)Jj2O2t0RLC A电子园51单片机学习网&u-b7FL^t8k?)s
MOV R7,A
@E%}/t@a0MOV A,R6电子园51单片机学习网$]0KY*l%wR
RLC A电子园51单片机学习网O c[ n,O
MOV R6,A电子园51单片机学习网$K/Cx$@*[#Z|;T?
DEC R5
&@;j%h(F N }*W5G9r0SJMP LN3
Rj-z?:U.G0LN4: MOV C,F0 ;取出阶符,作为乘积的数符
1X]/fu8l T0MOV ACC.7,C电子园51单片机学习网 i2C!V_6a7Q,C(h
LJMP ASN ;与尾数的对数合并,得原操作数的对数
1b E Sb:Eu0 
%l(^3p.Hh u0(21) 标号: FE10 功能:以10为底的浮点指数函数电子园51单片机学习网MA k0z+zV


iv7a@ YF0入口条件:操作数在[R0]中。电子园51单片机学习网NLs9Y\-HvciZy
出口信息:OV=0时,结果仍在[R0]中,OV=1时,溢出。电子园51单片机学习网:y4PV,W U
影响资源:DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节电子园51单片机学习网]1l Ir G(S}3S4o'dj
FE10: MOV R5,#2 ;加权系数为3.3219(Log210)电子园51单片机学习网*UduV:~%A|
MOV R6,#0D4H
TS*l(S9Ah@k"s0MOV R7,#9AH电子园51单片机学习网T"C z4h,z E sNM
SJMP EXP ;先进行加权运算,后以2为底统一求幂电子园51单片机学习网 N;T)Yqo

电子园51单片机学习网sm3DeV5T [

(22) 标号: FEXP 功能:以e为底的浮点指数函数电子园51单片机学习网S-QzD HX4YO{m

电子园51单片机学习网@Hf/s^y

入口条件:操作数在[R0]中。
pmF|vY4eir0出口信息:OV=0时,结果仍在[R0]中,OV=1时,溢出。
1v,` \&{4Og[{9T0影响资源:DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节
(l%[Pc,Wf&Pu0FEXP: MOV R5,#1 ;加权系数为1.44272(Lng2e)
6]3]$I(FL GQ0MOV R6,#0B8H电子园51单片机学习网#SG TP9i[M
MOV R7,#0ABH电子园51单片机学习网4oFr3f.M0}
EXP: CLR 1EH ;加权系数为正数
)d/UM7q@.q_U0LCALL MVR0 ;将[R0]传送到第一工作区
_u0u V?B.g"I'{MG0LCALL MUL1 ;进行加权运算电子园51单片机学习网)W&I[ s$Y
SJMP E20 ;以2为底统一求幂

r!Od/jHh `T0

_1?7Rk~+gn6E(Y0(23) 标号: FE2 功能:以2为底的浮点指数函数

2y6WlN^3a'~A9X6R1o0

L*OD)Y0c#Z0入口条件:操作数在[R0]中。电子园51单片机学习网.}%PJG,\t-A"Q3\j8W
出口信息:OV=0时,结果仍在[R0]中,OV=1时,溢出。
5]P@&q Eu"p0影响资源:DPTR、PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节电子园51单片机学习网g;N`;N$H3C
FE2: LCALL MVR0 ;将[R0]传送到第一工作区
){j2x6nn@;^0E20: MOV A,R3电子园51单片机学习网 ND7k:OQQj
ORL A,R4
-|+m'PG1\5BIj0JZ EXP1 ;尾数为零
*ahPDO*x0MOV A,R2电子园51单片机学习网P"rJ)R0L%{|*vP,^K
JB ACC.7,EXP2;阶符为负?电子园51单片机学习网4t2v6{][W
SETB C
6X.mM'F:g7xI0SUBB A,#6 ;阶码大于6否?电子园51单片机学习网J c2].{6}F,Y B4{.^
JC EXP2电子园51单片机学习网5UT/pY Hl7zt
JB 1FH,EXP0;数符为负否?
"YhR2M@#R3h(B%~o? f0MOV @R0,#3FH;正指数过大,幂溢出电子园51单片机学习网q3DOG,w P){%s-E.u
INC R0
![b0ri&J0MOV @R0,#0FFH电子园51单片机学习网:rq wA @u8a9Z
INC R0
P\Ut8?;R _0MOV @R0,#0FFH电子园51单片机学习网KJ V:[Wg)a
DEC R0
E,Z_} i0WSC[0DEC R0
yXN*O8C"CG0SETB OV电子园51单片机学习网V.M e#`,K
RET电子园51单片机学习网 s+jxd^
EXP0: MOV @R0,#41H;负指数过大,幂下溢,清零处理电子园51单片机学习网xPa!Ay.N~ |m*nR
CLR A电子园51单片机学习网3Vjbp QrK$V
INC R0电子园51单片机学习网2~RT _d
MOV @R0,A
"Pmz'DHE0INC R0
eb"o1L F0MOV @R0,A电子园51单片机学习网:Y&?P(u"L} K^S
DEC R0
^XVb e_`;v1q/M:bb0DEC R0
'q(Mz-F0Cpq*{0CLR OV电子园51单片机学习网+E/A"IG`X!C
RET电子园51单片机学习网)h_L9lj(r%C U9R{
EXP1: MOV @R0,#1 ;指数为零,幂为1.00电子园51单片机学习网8?(br&Y:e8A$`
INC R0电子园51单片机学习网6||R:]RP.Q
MOV @R0,#80H
mC;CQ"yC!q|0INC R0电子园51单片机学习网6@Ux5?~(Q/s4T-|
MOV @R0,#0电子园51单片机学习网J9] Q4ZjdJn)qYd
DEC R0电子园51单片机学习网loY3`7s$ZR${
DEC R0
%M*v n JD)V;G0CLR OV电子园51单片机学习网$]/x6OgbSG4H `(@r
RET
X%Xi,W QW zZ:v5v4k0EXP2: MOV A,R2 ;将指数复制到第二工作区电子园51单片机学习网] M"pqu u
MOV R5,A
*tSK/~-?#E0MOV A,R3
.\C.aG7Z i-Z0MOV R6,A
.G}"@IM4k7p0MOV A,R4电子园51单片机学习网n5s0S8la
MOV R7,A电子园51单片机学习网#D I u!i8d"wUH3` U
MOV C,1FH
+pG~0YO0MOV 1EH,C电子园51单片机学习网Na:tor M Q v$H/j
LCALL INT ;对第一区取整电子园51单片机学习网^T1O+v0Li N B+U%t
MOV A,R3电子园51单片机学习网u [(I3}/AUj
JZ EXP4电子园51单片机学习网2OfiSUQ
EXP3: CLR C ;使尾数高字节R3对应一个字节整数电子园51单片机学习网GsG2` g,S
RRC A
W0\X1b.C\~[u\0INC R2
P,RVpu4v0?f @0CJNE R2,#8,EXP3
-g[A$M*H Q*b~0EXP4: MOV R3,A
v,Y_ z0rX1U ^0JNB 1FH,EXP5
(x,Yt,l&B%s3L6B@0CPL A ;并用补码表示电子园51单片机学习网'{Cy)s)F$v9O8iA
INC A电子园51单片机学习网h.QIw Bs} q
EXP5: PUSH ACC ;暂时保存之电子园51单片机学习网8Ro[hEJ0r;D
LCALL RLN ;重新规格化
j:KJP8rf"k#T-Un0CPL 1FH
Xb@'P1R0SETB F0电子园51单片机学习网3gFUR/N'p2f{R
LCALL AS1 ;求指数的小数部分电子园51单片机学习网(t0qrZQR9t3[
LCALL MOV0 ;回传指数的小数部分
2O{6zK]6[?0LCALL FPLN ;通过多项式计算指数的小数部分的幂
J@^.MN&Iy0DB 77H,0B1H,0C9H;1.3564×10-3电子园51单片机学习网*Zn [7BWxH
DB 7AH,0A1H,68H;9.8514×10-3
W%r"j0m;lRp/`)]0DB 7CH,0E3H,4FH;0.055495电子园51单片机学习网s-{@!~8c
DB 7EH,0F5H,0E7H;0.24014电子园51单片机学习网PmN^0U e.T#^
DB 0,0B1H,72H;0.69315电子园51单片机学习网4y6HBo dU X M
DB 1,80H,0 ;1.00000电子园51单片机学习网4f0yM'uJ `/b @|+k,x
DB 40H ;结束
-N7lqR7YC,?0POP ACC ;取出指数的整数部分电子园51单片机学习网]K v_)v{$w'Q%g[K
ADD A,R2 ;按补码加到幂的阶码上
S s'X?)`A'auy0MOV R2,A电子园51单片机学习网 P2V.sQpV6P
CLR 1FH ;幂的符号为正
8VQ I;X~ qb0LJMP MOV0 ;将幂传回[R0]中电子园51单片机学习网0b^f g\v
 电子园51单片机学习网%I4T@:E8i,rh
(24)标号: DTOF 功能:双字节十六进制定点数转换成格式化浮点数

S_/?9r/jh0

|2[;?3B/h6_&C Rz~0入口条件:双字节定点数的绝对值在[R0]中,数符在位1FH中,整数部分的位数在A中。
:E.S&zjb&}[-Fv ^0出口信息:转换成格式化浮点数在[R0]中(三字节)。电子园51单片机学习网-z I!}U{zl
影响资源:PSW、A、R2、R3、R4、位1FH 堆栈需求: 6字节电子园51单片机学习网6b)TK @R(p8q8S
DTOF: MOV R2,A ;按整数的位数初始化阶码电子园51单片机学习网oYJbdQ;pD
MOV A,@R0 ;将定点数作尾数电子园51单片机学习网+Vr^P&H#o0Mw
MOV R3,A电子园51单片机学习网i3@.`!Fa,o
INC R0电子园51单片机学习网p3G0~JhGo'r
MOV A,@R0电子园51单片机学习网R8@/g;Zl:\m!n
MOV R4,A电子园51单片机学习网:tV`;c xHbY
DEC R0电子园51单片机学习网0fxGS0{qx8@5y5J+y
LCALL RLN ;进行规格化
l|^$[;\!k.eP0LJMP MOV0 ;传送结果到[R0]中电子园51单片机学习网F:QIw Tb'a-x x


x0tH3z6K*hc;F `/d;S0  电子园51单片机学习网0b7S#M)Y] `7A5f


&~!]5C/|x(W I1T0 
@m[(r!@ ]0MCS-51单片机实用子程序库(七)电子园51单片机学习网 r?3q*QQ"il
 
d+e G3[ j7S_0MCS-51单片机实用子程序库 电子园51单片机学习网X\Xq8D d0dJ)?
(25) 标号: FTOD 功能:格式化浮点数转换

文章评论1条评论)

登录后参与讨论

用户377235 2014-10-26 09:37

相关推荐阅读
用户1414655 2012-11-28 16:09
给你们介绍一些毛骨悚然的骗人技术
星期六下午 2 点多, 我一个人乘70 路至四川路,当中我在和我老公通电话的时候发觉有人拍了下我的肩膀,刚开始我以为是遇到认识的人和我打招呼的,后来一看旁边是40 多岁的...
用户1414655 2009-11-24 23:01
通信电源蓄电池温度监测系统设计
0 引 言    在通信系统的设计和建设中,通信电源被称为通信系统的心脏,电源系统将直接影响通信系统的可靠性和稳定性。美国APC公司的一项调查结果表明,大约有75%以上的通信系统故障都是由于电源设备故...
用户1414655 2009-09-23 08:53
各种白光LED驱动电路特性评比
作者:    时间:2008-12-02    来源:52RD硬件研发         1996年日亚化学的中村氏发表蓝光LED之后,白光LED就被视为次世代照明光源最具发展潜力的元件,因此有关白光L...
用户1414655 2009-09-23 08:52
论机器视觉与图像分析技术
作者:    时间:2008-12-02    来源:52RD硬件研发         也许你仍然希望能得到咨询专家的帮助,不过紧缩包裹型(Shrink-Wrapped)开发工具包现在已经使得缺乏专业...
用户1414655 2009-09-23 08:52
LCD TV视频解码器技术概述
作者:    时间:2008-12-03    来源:52RD硬件研发          CD TV属于高整合性电子产品,它涵盖了演算法、软体、韧体、硬体、晶片、无线射频等领域,且许多专利仍是属于国外...
用户1414655 2009-09-23 08:52
液晶显示器的自动调光技术
作者:    时间:2008-12-03    来源:52RD硬件研发          最近几年大型液晶显示器的应用,从笔记型电脑、PDA、桌上型电脑用监视器,持续扩展至家用液晶电视等领域,液晶电视...
我要评论
1
8
关闭 站长推荐上一条 /2 下一条