單片機匯編程序算術邏輯運算_第1頁
單片機匯編程序算術邏輯運算_第2頁
單片機匯編程序算術邏輯運算_第3頁
單片機匯編程序算術邏輯運算_第4頁
單片機匯編程序算術邏輯運算_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5講:指令系統知識目標:掌握算術邏輯運算技能目標:對P1口LED燈操作3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第1頁!§3.3.2算術運算指令1.不帶進位加法指令(四條)2.帶進位加法指令(四條)3.帶借位減法指令(四條)4.乘法指令(1條)5、除法指令(1條)6、加1指令(5條)7、減1指令(4條)8、十進制調整指令(1條)Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第2頁!1、不帶進位加法指令(四條)

匯編指令格式機器碼格式操作注釋ADDA,Rn;00101rrr(A)+(Rn)→A將工作寄存器內容和累加器A中的數相加,“和”存放于累加器A中ADDA,direct;00100101(A)+(direct)→A將內部RAM單元內容和direct累加器A中的數相加,“和”存放于累加器A中ADDA,@Ri;0010011i(A)+((Ri))→A將間接尋址(Ri為R0或R1)所得的片內RAM單元中內容和累加器A中的數相加,“和”存放于累加器A中ADDA,#data;00100100(A)+#data→A將立即數的8位無符號二進制data數和累加器A中的數相加,“和”存放于累加器A中3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第3頁!說明:上述指令的執行將影響標志位AC,Cy,OV,P。當“和”的第3位或第7位有進位時,分別將AC,CY標志位置1,否則為0。溢出標志位OV=C7+C6(異或),該標志位只有帶符號數運算時才有用。例:若:(A)=78H,(R0)=64H

執行ADDA,R0后,結果及PSW=?

(A):78H=01111000B

+(R0):64H=01100100B (A):DCH=11011100B標志位: CY=0,AC=0,OV=1,P=1,即:PSW=05H結果:(A)=DCH(R0)=64HBack3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第4頁!說明:本組指令的功能是同時把源操作數所指出的內容和進位標志未CY都加到累加器A中,結果存放到A中,其余的功能和上面的ADD指令相同。本組指令常用于多字節加法。

例:設(A)=0C3H,(R0)=0AAH,(CY)=1。

執行指令“ADDCA,R0”后的結果及標志位如何?解:(A):C3H=11000011+(CY):1=0000000111000100+(R0):AAH=10101010(A):6EH=01101110標志位:CY=1,OV=1,AC=0,結果:(A)=6EH,(R0)=0AAH。

3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第5頁!3、帶借位減法指令(四條)匯編指令格式機器碼格式操作注釋SUBBA,Rn;10011rrr(A)-CY-(Rn)→A將工作寄存器內容與CY及累加器A中的數相減,“差”存放于累加器A中SUBBA,direct;10010101(A)-CY-(direct)→A將內部RAM單元內容與directCY及累加器A中的數相減,“差”存放于累加器A中SUBBA,@Ri;1001011i(A)-CY-((Ri))→A將間接尋址(Ri為R0或R1)所得的片內RAM單元中內容與CY及累加器A中的數相減,“差”存放于累加器A中SUBBA,#data;10010100(A)-CY-#data→A將立即數的8位無符號二進data制數與CY及累加器A中的數相減,“差”存放于累加器A中3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第6頁!例:設(A)=0C9H,(R2)=54H,Cy=1。

執行指令“SUBBA,R2”的結果如何?解: (A)=0C9H=11001001B-)Cy=1=00000001B11001000B-)(R2)=54H=01010100B(A)=74H=01110100B結果為:(A)=74H標志位為:Cy=0AC=0OV=1P=0Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第7頁!5、除法指令(1條)例:(A)=BFH,(B)=32H。執行指令“DIVAB”后:結果為(A)=03H,(B)=29H;標志位CY=0,OV=0。匯編指令格式機器碼格式操作DIVAB;10000100(A)/(B)的商→A,(A)/(B)的余數→BA中內容除以B中內容,整數商存于A中,余數存于B中。該指令執行后,CY和OV均被清0。 若原(B)=00H,則結果無法確定,用OV=1表示,CY仍為0。Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第8頁!例:若:(R1)=30H,(30H)=11H

求執行下面指令后的結果。

INC@R1;(30H)=12H

INCR1;(R1)=31H解:結果為:(30H)=12H,(R1)=31H。不影響PWS.Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第9頁!8、十進制調整指令(1條)匯編指令格式機器碼格式操作DAA; 11010100 若(A0-3)>9或AC=1,則(A0-3)+6→A0-3 同時,若(A4-7)>9或CY=1,則(A4-7)+6→A4-7☆該指令調整累加器內容為BCD碼。☆

這條指令跟在ADD或ADDC指令后,將相加后存放在累加器中的結果進行十進制調整,完成十進制加法運算功能。

必須注意,本指令不能簡單地把累加器A的16進制數變換成BCD碼,也不能用于十進制減法的調整。

3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第10頁!§3.3.3邏輯操作指令

邏輯操作指令包括:與、或、異或、清除、求反、移位等操作。該指令組全部操作數都是8位25條指令。1.簡單操作指令(2條)2.移位指令(4條)3.邏輯“與”指令(6條)4.邏輯“或”指令(6條)5.邏輯“異或”指令(6條)Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第11頁!2.移位指令(4條)匯編指令格式機器碼格式操作注釋RLA;00100011A中內容循環左移一位。

←a7←a0

←RRA;00000011A中內容循環右移一位。 →a7→a0→RLCA;00110011A中內容連同進位位CY一起循 ←CY←a7←a0←環左移一位。RRCA;00010011A中內容連同進位位CY一起循 →CY→a7→a0→環右移一位。我們通常用RLCA指令將累加器A的內容做乘2運算。

例如:無符號8位二進制數(A)=10111101B=BDH,(CY)=0。將(A)乘2,執行指令“RLCA”后結果:(A)=01111010B=7AH,(CY)=1,而17AH正是BDH的2倍。Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第12頁!4.邏輯“或”指令(6條)匯編指令格式 機器碼格式 操作ORLA,Rn; 01001rrr (A)∨(Rn)→A

ORLA,direct; 01000101 (A)∨(direct)→A

directORLA,@Ri; 0100011i (A)∨((Ri))→A

ORLA,#data; 01000100 (A)∨data→A data

ORLdirect,A; 01000010 (direct)∨(A)→direct

directORLdirect,#data; 01000011 (direct)∨#data→direct direct data這組指令的功能是將兩個指定的操作數按位進行邏輯“或”,前四條指令的操作結果存放在累加器A中,后兩條指令的操作結果存放在直接地址單元中。Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第13頁!2、帶進位加法指令(四條)匯編指令格式機器碼格式操作注釋ADDCA,Rn;00111rrr(A)+CY+(Rn)→A將工作寄存器內容與CY及累加器A中的數相加,“和”存放于累加器A中ADDCA,direct;00110101(A)+CY+(direct)→A將內部RAM單元內容與directCY及累加器A中的數相加,“和”存放于累加器A中ADDCA,@Ri;0011011i(A)+CY+((Ri))→A將間接尋址(Ri為R0或R1)所得的片內RAM單元中內容與CY及累加器A中的數相加,“和”存放于累加器A中ADDCA,#data;00110100(A)+CY+#data→A將立即數的8位無符號二進data制數與CY及累加器A中的數相加,“和”存放于累加器A中3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第14頁!例:編程,將(30H),(31H)單元中的數與(40H),(41H)單元中的數相加,結果存于(30H),(31H)單元中。解: MOVA,30H ADDA,40H MOV30H,A MOVA,31H ADDCA,41H MOV31H,ABack3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第15頁!

說明:這組指令的功能是從累加器A中減去源操作數所指出的數及進位位CY的值,差保留在累加器A中。 由于89C51指令系統中沒有不帶借位的減法指令,如需要的話,可以在“SUBB”指令前用“CLRC”指令將Cy清0,這一點必須注意。3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第16頁!4、乘法指令(1條)該指令若乘積大于0FFH,則OV置1,否則OV清0。Cy位總是被清0。匯編指令格式機器碼格式操作MULAB ;10100100(A)×(B)→B15-8A7-0該指令將累加器A和寄存器B中兩個無符號數相乘,所得16位積的低字節存放在A中,高字節存放中B中。例:(A)=4EH,(B)=5DH,執行指令“MULAB”后結果如何?

解:結果為:(B)=1CH,(A)=56H,表示積(BA)=1C56H,OV=1。Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第17頁!6、加1指令(5條)

該組指令的操作不影響PSW。若原單元內容為FFH,加1后溢出為00H,也不影響PSW標志。匯編指令格式機器碼格式操作注釋INCA;00000100(A)+1→AA中內容加1。INCRn;00001rrr(Rn)+1→RnRn中內容加1。INCdirect;00000101(direct)+1→directdirect單元中內容加1。directINC@Ri;0000011i((Ri))+1→(Ri)Ri間接尋址所得的片內RAM單元中內容加1。INCDPTR;10100011(DPTR)+1→DPTRDPTR中內容加1例:比較指令“INCA”和“ADDA,#01H”的結果。解: “INCA”指令只將A的內容加1,標志位沒有變化。而“ADDA,#01H”指令不僅將A的內容加1,還影響標志位變化。3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第18頁!7、減1指令(4條)匯編指令格式機器碼格式操作注釋DECA;00010100(A)-1→AA中內容減1。DECRn;00011rrr(Rn)-1→RnRn中內容減1。DECdirect;00010101(direct)-1→directdirect單元中內容減1。directDEC@Ri;0001011i((Ri))-1→(Ri)Ri間接尋址所得的片內RAM單元中內容減1。

該組指令的操作不影響PSW。Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第19頁!例: 設累加器A內容為:01010110B(即為56的BCD碼),寄存器R3的內容為01100111B(即67的BCD碼),CY內容為1。求執行下列指令后的結果。 ADDCA,R3;

DAA;解:先執行ADDCA,R3; (A):01010110BCD:56(R3):01100111BCD:67

(+)(CY):00000001BCD:01 和:10111110即(A)=10111110且影響標志位CY=0,AC=0;

再執行DAA;因為A中的高四位值為11,大于9,低四位值為14,也大于9,所以內部調整自動進行加66H的操作: 10111110

調整+)01100110 100100100BCD:124即(A)=00100100=24BCD,CY=1;AC=1。Back3/1/2023單片機匯編程序算術邏輯運算共23頁,您現在瀏覽的是第20頁!1.簡單操作指令(2條)Back匯編指令格式機器碼格式操作注釋CLRA;111001000→A累加器A清0指令,只影響標

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論