📄 dpjjx16.htm
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft FrontPage 5.0">
<TITLE>单片机第十四课 </TITLE>
</HEAD>
<BODY background="../back.jpg">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">单片机第十三课</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">条件转移指令:</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">条件转移指令是指在满足一定条件时进行相对转移。</P>
</FONT>
<OL>
<LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>判</font><FONT SIZE=2>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>内容是否为</FONT><FONT SIZE=2>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>转移指令</font><font size="2"></LI>
</font>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3>
</p>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
</FONT><FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">JZ		rel</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">JNZ		rel</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>第一指令的功能是:如果</font><FONT SIZE=2>(A)=0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助于机器汇编了。因此这第指令我们可以这样理解:</FONT><FONT SIZE=2>JZ
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>标号。即转移到标号处。下面举一例说明:</font></P>
<FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">MOV	A,R0</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">JZ		L1</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">MOV	R1,#00H</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">AJMP	L2</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">L1:	MOV	R1,#0FFH</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">L2: SJMP 	L2</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>END</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>在执行上面这段程序前如果</font><FONT SIZE=2>R0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中的值是</FONT><FONT SIZE=2>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>的话,就转移到</FONT><FONT SIZE=2>L1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>执行,因此最终的执行结果是</FONT><FONT SIZE=2>R1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中的值为</FONT><FONT SIZE=2>0FFH</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>。而如果</FONT><FONT SIZE=2>R0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中的值不等于</FONT><FONT SIZE=2>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,则顺序执行,也就是执行</FONT><FONT SIZE=2>
MOV R1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#00H</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>指令。最终的执行结果是</FONT><FONT SIZE=2>R1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中的值等于</FONT><FONT SIZE=2>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>第一条指令的功能清楚了,第二条当然就好理解了,如果</font><FONT SIZE=2>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中的值不等于</FONT><FONT SIZE=2>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,就转移。把上面的那个例子中的</FONT><FONT SIZE=2>JZ</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>改成</FONT><FONT SIZE=2>JNZ</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>试试吧,看看程序执行的结果是什么</FONT><FONT SIZE=2>?</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"> </P>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
</FONT>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">比较转移指令</LI> </p>
</FONT>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=3>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P>
</FONT><FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">CJNE		A,#data,rel </P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">CJNE		A,direct,rel</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">CJNE		Rn,#data,rel</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">CJNE		@Ri,#data,rel</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>第一条指令的功能是将</font><FONT SIZE=2>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中的值和立即数</FONT><FONT SIZE=2>data</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>比较,如果两者相等,就顺序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们可以将</FONT><FONT SIZE=2>rel</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>理解成标号,即:</FONT><FONT SIZE=2>CJNE	A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#data,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>标号。这样利用这条指令,我们就可以判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则</FONT><FONT SIZE=2>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>还会反映出哪个数大,哪个数小,这是用</FONT><FONT SIZE=2>CY</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>(进位位)来实现的。如果前面的数(</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中的)大,则</FONT><FONT SIZE=2>CY=0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,否则</FONT><FONT SIZE=2>CY=1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,因此在程序转移后再次利用</FONT><FONT SIZE=2>CY</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>就可判断出</FONT><FONT SIZE=2>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中的数比</FONT><FONT SIZE=2>data</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>大还是小了。</font></P>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">例:</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOV		A,R0</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>CJNE		A,#10H,L1</font></P>
<FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">	MOV		R1,#0FFH</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">	AJMP		L3</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">L1:	JC			L2</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">	MOV		R1,#0AAH</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">	AJMP		L3</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">L2:	MOV		R1,#0FFH</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">L3:	SJMP		L3</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>上面的程序中有一条指令我们还没学过,即</font><FONT SIZE=2>JC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,这条指令的原型是</FONT><FONT SIZE=2>JC	rel,</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>作用和上面的</FONT><FONT SIZE=2>JZ</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>类似,但是它是判</FONT><FONT SIZE=2>CY</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>是</FONT><FONT SIZE=2>0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,还是</FONT><FONT SIZE=2>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>进行转移,如果</FONT><FONT SIZE=2>CY=1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,则转移到</FONT><FONT SIZE=2>JC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>后面的标号处执行,如果</FONT><FONT SIZE=2>CY=0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>则顺序执行(执行它的下面一条指令)。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -