?? dpjjx13.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 bgcolor="#CCCCCC" background="../back.jpg">
<FONT FACE="宋體" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">單片機指令(四)算術運算類指令</P>
</FONT><OL><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>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>ADD A,#DATA ;</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>例:</FONT><FONT SIZE=2>ADD A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#10H</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>ADD		A,direct ;</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>例:</FONT><FONT SIZE=2>ADD A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>10H</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>ADD		A,Rn ;</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>例:</FONT><FONT SIZE=2>ADD A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>R7</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>ADD		A,@Ri ;</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>例:</FONT><FONT SIZE=2>ADD A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>@R0</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>A</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>MOV A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#30H</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>ADD		A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#10H</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>40H</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		34H</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#10H</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOV		R0</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#13H</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOV		A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>34H</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>ADD		A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>R0</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>MOV		R1</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>#34H</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>ADD		A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>@R1</font></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>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>ADDC		A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>Rn</font></P>
<FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">ADDC		A,direct</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">ADDC		A,@Ri</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">ADDC		A,#data</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>C</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>51</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>單片機是一種</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位機,所以只能做</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位的數學運算,但</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位運算的范圍只有</FONT><FONT SIZE=2>0-255</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,這在實際工作中是不夠的,因此就要進行擴展,一般是將</FONT><FONT SIZE=2>2</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>個</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位的數學運算合起來,成為一個</FONT><FONT SIZE=2>16</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位的運算,這樣,可以表達的數的范圍就可以達到</FONT><FONT SIZE=2>0-65535</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>。如何合并呢?其實很簡單,讓我們看一個</FONT><FONT SIZE=2>10</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>進制數的例子:</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>66+78</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>6+8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>(低位),然后再做</FONT><FONT SIZE=2>6+7</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,這是高位。做了兩次加法,只是我們做的時候并沒有刻意分成兩次加法來做罷了,或者說我們并沒有意識到我們做了兩次加法。之所以要分成兩次來做,是因為這兩個數超過了一位數所能表達的范置(</FONT><FONT SIZE=2>0-9</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>16</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位加法時同樣如此,先做低</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位的,如果兩數相加產生了進位,也要“點一下”做個標記,這個標記就是進位位</FONT><FONT SIZE=2>C</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,在</FONT><FONT SIZE=2>PSW</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中。在進行高位加法是將這個</FONT><FONT SIZE=2>C</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>加進去。例:</FONT><FONT SIZE=2>1067H+10A0H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,先做</FONT><FONT SIZE=2>67H+A0H=107H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,而</FONT><FONT SIZE=2>107H</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>A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的是</FONT><FONT SIZE=2>7</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>PSW</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>CY</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>就相當于是</FONT><FONT SIZE=2>100H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>。然后再做</FONT><FONT SIZE=2>10H+10H+CY</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,結果是</FONT><FONT SIZE=2>21H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,所以最終的結果是</FONT><FONT SIZE=2>2107H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>。</font></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>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT SIZE=2>SUBB		A</font><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>Rn</font></P>
<FONT SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">SUBB		A,direct</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">SUBB		A,@Ri</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">SUBB		A,#data</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>H</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,(</FONT><FONT SIZE=2>R2</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>)</FONT><FONT SIZE=2>=55H</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>SUBB		A</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>R2</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>73H</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>CY</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>清零即可。</font></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">MUL		AB	</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>B</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中的兩個</FONT><FONT SIZE=2>8</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>16</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位數來表達,其中高</FONT><FONT SIZE=2>8</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>位放在</FONT><FONT SIZE=2>B</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>中,低</FONT><FONT SIZE=2>8</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>FFFFFH</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>(</FONT><FONT SIZE=2>65535</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=2>)時,</FONT><FONT SIZE=2>0V</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>OV</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>CY</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">
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -