




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第二講:指令與編程本講重點:本講重點: 尋址方式;尋址方式; MCS-51MCS-51指令集;指令集; 偽指令;偽指令; 匯編語言與簡單程序設計匯編語言與簡單程序設計. .第三章 指令系統及程序設計P.43)每條指令在執行時要花去一定的時間,以機器每條指令在執行時要花去一定的時間,以機器周期為單位。按指令執行時間分類:周期為單位。按指令執行時間分類:單周期單周期(64(64條條););雙周期雙周期(45(45條條);4);4周期周期(2(2條條) )按指令的功能分類,可分為按指令的功能分類,可分為5 5大類:大類:數據傳送類數據傳送類2929條);算術運算類條);算術運算類2424條)條)邏輯
2、運算及移位類邏輯運算及移位類2424);控制轉移類);控制轉移類1717條)條)位操作類位操作類1717條)條)每條指令在程序存儲器每條指令在程序存儲器ROMROM中占據一定的空間,中占據一定的空間,以字節為單位。按指令所占字節數分類:以字節為單位。按指令所占字節數分類:單字節單字節(49(49條條););雙字節雙字節(46(46條條);3);3字節字節(16(16條條) )ASM-51指令的格式(P.44)方括符方括符 表示可選項表示可選項標號代表指令所在地址,標號代表指令所在地址,1-81-8個字母個字母/ /數字,數字,“: :”結尾結尾操作碼就是指令功能助記符,指令實體操作碼就是指令功
3、能助記符,指令實體目的操作數目的操作數源操作數源操作數注釋,以注釋,以“; ;”開頭開頭 標號標號:操作碼操作碼 目的操作數目的操作數,源操作數源操作數;注釋注釋 51單片機指令的尋址方式(P.45)寄存器尋址寄存器尋址立即尋址立即尋址寄存器間接尋址寄存器間接尋址直接尋址直接尋址變址尋址變址尋址( (基址寄存器基址寄存器+ +變址寄存器間接尋址變址寄存器間接尋址) )相對尋址相對尋址位尋址位尋址尋址方式:指令按地址獲得操作數的方式尋址方式:指令按地址獲得操作數的方式七種尋址方式七種尋址方式, ,一條指令可能含多種尋址方式一條指令可能含多種尋址方式寄存器尋址寄存器尋址(P.45)(P.45)從寄
4、存器中讀取操作數或存放操作數進寄存器從寄存器中讀取操作數或存放操作數進寄存器例:例:MOV AMOV A,B B ; (A A) (B B) MOV 30H MOV 30H,R0 R0 ;(;(30H30H)(R0R0) MOV A MOV A,R1 R1 ; (A A) (R1R1)立即尋址立即尋址(P.45)(P.45)操作數直接就出現在指令中操作數直接就出現在指令中例:例:MOV AMOV A,#64H #64H ;(A) (A) 立即數立即數 64H 64H ADD A ADD A,#05H #05H ;(A)(A)+(A)(A)+立即數立即數 05H 05H留意:符號留意:符號“#
5、#”表明其后跟的是立即數表明其后跟的是立即數, , 立即數立即數就是數字量本身。就是數字量本身。寄存器間接尋址寄存器間接尋址(P.46)(P.46)寄存器中的內容是一個地址,由該地址單元寄存器中的內容是一個地址,由該地址單元尋址到所需的操作數尋址到所需的操作數留意:留意:1 1)“間接表示某寄存器中的間接表示某寄存器中的“內容只是一個內容只是一個“單元地址單元地址”,這個地址單元中存放的數據才是,這個地址單元中存放的數據才是要找的要找的“操作數操作數”。2 2符號符號“”表示表示“在在”,其含義與讀音皆同,其含義與讀音皆同“atat”。例:例: MOV R1 MOV R1,#30H ;(R1)
6、 #30H ;(R1) 立即數立即數30H 30H MOV R1 MOV R1,#30H ;(R1) #30H ;(R1) 立即數立即數30H 30H MOV R1 MOV R1,#0FH ;(30H)#0FH ;(30H)立即數立即數0FH0FH MOV A MOV A,R1 ;(A)(30H)=#0FHR1 ;(A)(30H)=#0FH直接尋址直接尋址(P.46)(P.46)指令中直接給出了操作數所在單元的地址或名稱指令中直接給出了操作數所在單元的地址或名稱 例:例:MOV R1MOV R1,1FH 1FH ;(R1) (R1) (1FH1FH) MOV 30H MOV 30H,4AH 4
7、AH ;(30H)(30H)(4AH4AH)在本單片機中規定:訪問特殊功能寄存器在本單片機中規定:訪問特殊功能寄存器SFRSFR只能采用直接尋址方式。例如:只能采用直接尋址方式。例如:MOV A, SP MOV A, SP ; (A) (SP) (A) (SP) MOV A, 81H MOV A, 81H ; (A) (SP) (A) (SP) MOV P1, #5AH MOV P1, #5AH ; (P1)(#5AH) (P1)(#5AH) MOV 90H,#5AH MOV 90H,#5AH ; (P1)(#5AH) (P1)(#5AH) MOV B, 30H MOV B, 30H ; (B
8、) (30H) (B) (30H) SFRSFR的地址見的地址見 P.33 P.33表表一樣一樣一樣一樣在本單片機中訪問特殊功能寄存器在本單片機中訪問特殊功能寄存器SFRSFR只能采用直只能采用直接尋址方式的原因:接尋址方式的原因:SFRSFR分布在分布在80H80H0FFH0FFH范圍內,范圍內,而而5252系列單片機有系列單片機有256256字節的片內字節的片內RAM,RAM,其中的其中的80H80H0FFH0FFH的的RAMRAM與與SFRSFR所占地址重疊。所占地址重疊。MOV A, 90H MOV A, 90H 等效于等效于 MOV A, P1 MOV A, P1 屬直接尋址屬直接尋
9、址 MOV A, R0 MOV A, R0 ; 事先已知事先已知 (R0) = #90H (R0) = #90H 執行的操作:執行的操作:A (90H) A (90H) 屬寄存器間接尋址屬寄存器間接尋址, , 隨意寫的指令如:隨意寫的指令如:MOV A, 85H MOV A, 85H 則是非法的!則是非法的! 于是規定:于是規定: 80H 80H0FFH0FFH范圍內的范圍內的RAMRAM只能用寄存器只能用寄存器間接尋址方式,而間接尋址方式,而SFRSFR只能用直接尋址方式。從而只能用直接尋址方式。從而解決了地址沖突的問題。例如:解決了地址沖突的問題。例如:存儲器配置片內RAM)89C5189
10、C51片內片內RAM 128RAM 128字節字節00H7FH00H7FH)89C5289C52片內片內RAM 256RAM 256字節字節00H0FFH00H0FFH)00H00H20H20H2FH2FH7FH7FH1FH1FH30H30H80H80HFFHFFH52子系列才有子系列才有的的RAM區區普通普通RAM區區位尋址區位尋址區工作寄存器區工作寄存器區SFR分布在分布在80H-FFH其中其中92個位個位可位尋址可位尋址80H80HFFHFFH89C51 128字節字節89C52 256字節字節只能直接尋址只能直接尋址只能寄存器間接尋址只能寄存器間接尋址變址尋址變址尋址(P.47P.47
11、) 也稱為也稱為: : 基址寄存器基址寄存器+ +變址寄存器間接尋址變址寄存器間接尋址以以1616位的地址指針寄存器位的地址指針寄存器DPTRDPTR或或 16 16位的位的PCPC寄存器為寄存器為基址寄存器,以累加器基址寄存器,以累加器 A A 為變址寄存器,兩者中的為變址寄存器,兩者中的“內容形成一個內容形成一個1616位的位的“地址地址”,該,該“地址所指的地址所指的存儲單元中的內容才是操作數。存儲單元中的內容才是操作數。P47P47例例:設:設:A A中已存有中已存有#A4H#A4H,DPTRDPTR中已存有中已存有#1234H#1234H MOVC A MOVC A,A+DPTRA+
12、DPTR;(;(A A)(A)+(DPTR)(A)+(DPTR)操作:將操作:將A4H+1234H=12D8HA4H+1234H=12D8H單元中的數放進累加器單元中的數放進累加器A A相對尋址相對尋址(P.47)(P.47)當前當前PCPC值加上指令中規定的偏移量值加上指令中規定的偏移量 rel rel,構成實際,構成實際的操作數地址的操作數地址例:例: SJMP rel SJMP rel 操作:跳轉到的目的地址操作:跳轉到的目的地址 = = 當前當前1616位位PCPC值值 + rel + rel留意:留意:1 1)“當前當前PCPC值指程序中下一條指令所在的首地址,值指程序中下一條指令所
13、在的首地址, 是一個是一個1616位數;位數;2 2符號符號“relrel表示表示“偏移量偏移量”, ,是一個帶符號的單字是一個帶符號的單字 節數節數, ,范圍是范圍是:-128+127(80H7FH), :-128+127(80H7FH), 在實際編程中,在實際編程中,“relrel” 通常用標號代替通常用標號代替位尋址位尋址(P.48)(P.48)指令中直接給出了操作數所在的位地址。指令中直接給出了操作數所在的位地址。例:例: CLR P1.0 CLR P1.0 ;(P1.0) 0(P1.0) 0 SETB ACC.7 SETB ACC.7 ;(ACC.7) 1(ACC.7) 1 CPL
14、C CPL C ;( C ) NOT( C )( C ) NOT( C )留意:留意: 1 1位地址里的數據只可能是一個位地址里的數據只可能是一個 0 0 或或 1 1 2 2有的位地址十分明確有的位地址十分明確, ,如如 P1.0, ACC.7 P1.0, ACC.7等等, , 有的位地址則有的位地址則“不太明確不太明確”,如:,如: MOV A MOV A,17H ; (A)(17H),17H17H ; (A)(17H),17H是字節地址是字節地址 MOV ACC.0 MOV ACC.0,17H ;(ACC.0)(17H),17H ;(ACC.0)(17H),這里這里ACC.0ACC.0
15、是位地址所以該指令中的是位地址所以該指令中的17H17H是是22H22H單元的第單元的第7 7位位片內片內RAMRAM中有中有128128個位可按個位可按位尋址的位,位地址:位尋址的位,位地址:00H7FH00H7FH分布在:分布在:20H20H2FH2FH單元;單元;另外,在另外,在SFRSFR中還有中還有9292個個位可按位尋址位可按位尋址00H00H20H20H2FH2FH7FH7FH1FH1FH30H30H80H80HFFHFFH52子系列才有子系列才有的的RAM區區普通普通RAM區區位尋址區位尋址區工作寄存器區工作寄存器區27H22H21H20H26H24H25H23H28H07 0
16、6 05 04 03 02 01 000F 0E 0D 0C 0B 0A 09 0817 16 15 14 13 12 11 101F 1E 1D 1C 1B 1A 19 1827 26 25 24 23 22 21 202F 2E 2D 2C 2B 2A 29 2837 36 35 34 33 32 31 303F 3E 3D 3C 3B 3A 39 3847 46 45 44 43 42 41 402FH7F 7E 7D 7C 7B 7A 79 78位地址位地址總共總共128個可個可按位按位尋址尋址的位的位單元地址單元地址17D7 D6 D5 D4 D3 D2 D1 D0位尋址位尋址(P.
17、48)(P.48)指令中直接給出了操作數所在的位地址。指令中直接給出了操作數所在的位地址。例:例: CLR P1.0 CLR P1.0 ;(P1.0) 0(P1.0) 0 SETB ACC.7 SETB ACC.7 ;(ACC.7) 1(ACC.7) 1 CPL C CPL C ;( C ) NOT( C )( C ) NOT( C )留意:留意: 1 1位地址里的數據只可能是一個位地址里的數據只可能是一個 0 0 或或 1 1 2 2有的位地址十分明確有的位地址十分明確, ,如如 P1.0, ACC.7 P1.0, ACC.7等等, , 有的位地址則有的位地址則“不太明確不太明確”,如:,如
18、: MOV A MOV A,17H ; (A)(17H),17H17H ; (A)(17H),17H是字節地址是字節地址 MOV ACC.0 MOV ACC.0,17H ;(ACC.0)(17H),17H ;(ACC.0)(17H),這里這里ACC.0ACC.0 是位地址所以該指令中的是位地址所以該指令中的17H17H是是22H22H單元的第單元的第7 7位位MCS-51指令集功能分五類,共111條指令MCS-51MCS-51指令集五大類功能指令集五大類功能P.49P.49頁頁數據傳送類指令:數據傳送類指令: (2929條)條)算術運算類指令:算術運算類指令: (2424條)條)邏輯運算及移位
19、類指令:邏輯運算及移位類指令: (2424條)條)控制轉移類指令:控制轉移類指令: (1717條)條)位操作布爾操作類指令:(位操作布爾操作類指令:(1717條)條)內部存儲器間傳送:內部存儲器間傳送: (MOV16MOV16條)條)外部數據存儲器與累加器間傳送外部數據存儲器與累加器間傳送: : (MOVX4MOVX4條)條)程序存儲器向累加器傳送:程序存儲器向累加器傳送: (MOVC2MOVC2條)條)數據交換:(數據交換:(XCHXCH,XCHDXCHD,SWAP5SWAP5條)條)堆棧操作:堆棧操作: (PUSHPUSH,POP2POP2條)條)(一)數據傳送類指令5種/29條) P.4
20、9見見P.49P.49的表的表3 32 2Acc 累加器累加器Direct 直接尋址直接尋址Ri 間接尋址間接尋址Rn 寄存器寄存器#data 立即數立即數RnRn: R0R7 R0R7RiRi: R0 R0,R1R1#data#data:8 8位立即數位立即數#data16#data16:1616位立即數位立即數directdirect:直接地址:直接地址relrel: 8 8位帶符號偏移量位帶符號偏移量(一)數據傳送類指令5種/29條)內部存儲器間傳送指令內部存儲器間傳送指令 (16(16條條) ): MOV MOV 類指令的操作方向總是后面的類指令的操作方向總是后面的操作數操作數 指向前
21、面的操作數!指向前面的操作數!例例:MOV A:MOV A,30H 30H (A A)(30H30H) 數據傳送類指令續) P.52外部數據存儲器與累加器間傳送外部數據存儲器與累加器間傳送 (4(4條條):):MOVXMOVX類指令可在累加器與以類指令可在累加器與以DPTRDPTR或或RiRi所代表的外所代表的外部部 RAM RAM 之間進行數據傳送。之間進行數據傳送。例如例如: : MOVX AMOVX A, DPTR (A) DPTR (A) (DPTR) (DPTR)MOVX AMOVX A, Ri (A) Ri (A) (Ri) (Ri) MOVX DPTR, A (DPTR) MOV
22、X DPTR, A (DPTR) (A) (A) MOVX Ri, A (Ri) MOVX Ri, A (Ri) (A)(A)程序存儲器向累加器傳送指令程序存儲器向累加器傳送指令2 2條):條): MOVC A MOVC A,A+DPTRA+DPTR MOVC A MOVC A,A+PC A+PC 通常稱為查表指令,尋址方式屬通常稱為查表指令,尋址方式屬: : “基址寄存器基址寄存器 + + 變址寄存器間接尋址變址寄存器間接尋址”數據傳送類指令續) P.52A+DPTRA+DPTR或或A+PCA+PC指向程序存儲器中的某單元。擬傳指向程序存儲器中的某單元。擬傳送給累加器送給累加器ACC ACC
23、 的數據就是程序中事先寫進去的的數據就是程序中事先寫進去的表格數據。這些表格數據往往用偽指令表格數據。這些表格數據往往用偽指令 DB,DW DB,DW 等定義在程序中。等定義在程序中。數據傳送類指令續)數據交換指令數據交換指令(5(5條條): P.53): P.53XCH AXCH A,direct (direct (字節互換字節互換) )XCH AXCH A,Ri (Ri (字節互換字節互換) ) XCH AXCH A,Rn (Rn (字節互換字節互換) )(A A) (directdirect) 或或(Ri)(Ri),或,或(Rn)(Rn)XCHD AXCHD A,RiRi 累加器累加器
24、Acc Acc的低的低4 4位與位與(Ri)(Ri)的低的低4 4位互換,位互換,各自的高各自的高4 4位不變位不變SWAP ASWAP A 累加器累加器 Acc Acc的低的低4 4位與自身的高位與自身的高4 4位互換位互換堆棧操作指令堆棧操作指令(2(2條條): P.54): P.54PUSHPUSH壓棧指令壓棧指令POP POP 彈棧指令彈棧指令堆棧區由特殊功能寄存器堆棧指針堆棧區由特殊功能寄存器堆棧指針SP SP 管理管理堆棧區可以安排在堆棧區可以安排在 RAM RAM區任意位置,一般不安區任意位置,一般不安排在工作寄存器區和可按位尋址的排在工作寄存器區和可按位尋址的RAMRAM區區,
25、 ,而是放而是放在在RAMRAM區的靠后的位置區的靠后的位置堆棧總是指向棧頂堆??偸侵赶驐m斖ǔMǔUSHPUSH與與POPPOP兩條指令成對使用兩條指令成對使用數據傳送類指令續)例如:設例如:設(A)=7BH; (35H)=11H(A)=7BH; (35H)=11H 并且知道并且知道SPSP)60H60H PUSH ACC ;(61H) PUSH ACC ;(61H) #7BH #7BH PUSH 35H ;(62H) PUSH 35H ;(62H) (35H) (35H) 即:即:(62H) (62H) #11H #11H POP ACC ;(A) POP ACC ;(A) (62H)
26、(62H) 即:即:(A)(A) #11H #11H POP 5AH ;(5AH) POP 5AH ;(5AH) (61H) (61H) 即:即:(5AH) (5AH) #7BH #7BH(二)算術運算類指令6種/24條) P.54加法運算:加法運算: (ADD4 (ADD4條條) )帶進位加法運算帶進位加法運算: (ADDC4: (ADDC4條條) )帶借位減法運算帶借位減法運算: (SUBB4: (SUBB4條條) )加加1/1/減減1 1操作:操作: (INC (INC,DEC9DEC9條條) )單字節乘單字節乘/ /除法運算除法運算: (MUL: (MUL,DIV2DIV2條條) )十
27、進制調整:十進制調整: (DA A1 (DA A1條條) )(二)算術運算類指令續) P.55加法運算:加法運算: (ADD4ADD4條)條)帶進位加法運算帶進位加法運算: : (ADDC4ADDC4條)條)帶借位減法運算:帶借位減法運算: (SUBB4SUBB4條)條)所有的加法所有的加法(ADD)(ADD)、帶進位加法、帶進位加法(ADDC)(ADDC)、帶借位減、帶借位減法法(SUBB)(SUBB)運算都是以運算都是以 A A為一個加數或被減數為一個加數或被減數, ,最終最終結果也存進結果也存進 A A 。加法加法(ADD)(ADD)、帶進位加法、帶進位加法(ADDC) (ADDC) 以
28、及帶借位減法以及帶借位減法(SUBB)(SUBB)運算中運算中, ,如果產生了進位或借位如果產生了進位或借位, ,將自動對將自動對PSWPSW中的中的CyCy標志位置標志位置“1 1” 。帶進位加法帶進位加法(ADDC):(A)(ADDC):(A)(A)+(Cy)+(A)+(Cy)+(第二操作數第二操作數) )帶借位減法帶借位減法(SUBB):(A)(SUBB):(A)(A)-(Cy)-(A)-(Cy)-(第二操作數第二操作數) )(二)算術運算類指令續) P.57加加1/1/減減1 1操作:操作: (INCINC,DEC9DEC9條)條)INC, DECINC, DEC與用加與用加/ /減法
29、指令做加減法指令做加1/1/減減1 1 操作不同之操作不同之處在于處在于INCINC、DECDEC不影響標志位不影響標志位. .單字節乘單字節乘/ /除運算除運算: (MUL: (MUL,DIV2DIV2條條) )兩個單字節數的乘兩個單字節數的乘/ /除法運算只在除法運算只在A A與與B B之間進行。之間進行。MUL AB: (A)MUL AB: (A)與與(B)(B)相乘相乘, , 積為積為1616位數位數, , (A) (A)積的高積的高8 8位位; (B); (B)積的低積的低8 8位位DIV AB: (A)DIV AB: (A)除以除以(B),(B),結果用結果用2 2字節表示字節表示
30、, , (A) (A)商的整數部分商的整數部分;(B);(B)余數余數(二)算術運算類指令續) P.60BCDBCD碼是指碼是指“用二進制表達的十進制數用二進制表達的十進制數”。如:。如: 十進制數十進制數2020可以用二進制數可以用二進制數00010100B00010100B表示表示; ; 也可以用十六進制數也可以用十六進制數14H14H表示;表示; 還可以用還可以用BCDBCD碼碼 00100000B 00100000B 或或 20H 20H 表示。表示。4 4個二進制位就可以表示一位個二進制位就可以表示一位BCDBCD碼:碼: 000000001001 1001 可表示十進制數可表示十進
31、制數(BCD(BCD數數) 0) 09; 9; 8 8個二進制位就可以表示兩位壓縮的個二進制位就可以表示兩位壓縮的BCDBCD碼:碼:000000000000000010011001 10011001 表示表示 00 009999。十進制調整:十進制調整: (DA A1DA A1條)條)用于兩個用于兩個BCDBCD碼之間的相加,這條指令只能跟在碼之間的相加,這條指令只能跟在 ADD ADD 或或 ADDC ADDC 之后之后假設假設(A)3(A)30 09 9或或(AC)=1(AC)=1則則(A)3(A)30 0(A)3(A)30 06 6; 假設假設(A)7(A)74 49 9或或(CY)=
32、1(CY)=1則則(A)7(A)74 4(A)7(A)74 46 6;P.60P.60例例5 5:兩個十進制數:兩個十進制數“6565與與“5858相加,根相加,根據常識,顯然其和應當為據常識,顯然其和應當為“123123”。MOV A,#65H MOV A,#65H ADD A,#58H ADD A,#58H DA ADA A結果結果:(A)= 23H:(A)= 23H (CY)= 1 (CY)= 1指令指令 “DA ADA A” 完成的操作:完成的操作: 6 5 0110 0101 6 5 0110 0101 5 8 0101 1000 5 8 0101 1000 +13 31818 19
33、192 26 6 0110 01106 6 0110 0110假設假設(A)3(A)30 09 9或或(AC)=1(AC)=1則則(A)3(A)30 0(A)3(A)30 06 6; 假設假設(A)7(A)74 49 9或或(CY)=1(CY)=1則則(A)7(A)74 4(A)7(A)74 46 6;又如:兩個十進制數又如:兩個十進制數“3939與與“5858相加,根據常相加,根據常識,顯然其和應當為識,顯然其和應當為“9797”。MOV A,#39H MOV A,#39H ADD A,#58H ADD A,#58H DA ADA A結果結果:(A)= 97H:(A)= 97H (CY)=
34、0 (CY)= 0 3 9 0011 1001 3 9 0011 1001 5 8 0101 1000 5 8 0101 1000 +07 723239 9 6 0110 6 0110指令指令 “DA ADA A” 完成的操作:完成的操作:( (三三) )邏輯運算及移位類指令邏輯運算及移位類指令5 5種種/24/24條)條) P.61P.61邏輯與運算:邏輯與運算: (ANL6ANL6條)條)邏輯或運算:邏輯或運算: (ORL6ORL6條)條)邏輯異或運算:邏輯異或運算: (XRL6XRL6條)條)累加器清零累加器清零/ /取反:取反: (CLRCLR,CPL2CPL2條)條)累加器移位操作累
35、加器移位操作: : (RL,RLC,RR,RRC4RL,RLC,RR,RRC4條)條)邏輯運算及移位類指令續)邏輯運算及移位類指令續) P.61P.61邏輯與邏輯與(ANL),(ANL),邏輯或邏輯或(ORL),(ORL),邏輯異或邏輯異或(XRL):(XRL):累加器清零累加器清零/ /取反操作取反操作 (CLR,CPL2CLR,CPL2條)條)CLR A CLR A 對累加器清零對累加器清零 1 Byte 1 1 Byte 1 個個Tm Tm CPL A CPL A 對累加器按位取非對累加器按位取非 1 Byte 1 1 Byte 1 個個TmTm指指 令令 形形 式式ByteByteTm
36、TmANLANL(ORL(ORL,XRL)XRL) direct direct, A A2 21 1ANLANL(ORL(ORL,XRL)XRL) direct direct,#data#data3 32 2ANLANL(ORL(ORL,XRL)XRL) A A, #data#data2 21 1ANLANL(ORL(ORL,XRL)XRL) A A, directdirect2 21 1ANLANL(ORL(ORL,XRL)XRL) A A, RiRi1 11 1ANLANL(ORL(ORL,XRL)XRL) A A, RnRn1 11 1邏輯運算指令的常見邏輯運算指令的常見用法用法邏輯與邏
37、輯與ANLANL用于清用于清0 0或者保留某些位:或者保留某些位:例例: ANL A, #0FH; : ANL A, #0FH; 那么那么(A) = 0AH(A) = 0AH( ( 已知累加器已知累加器A A中已存有數:中已存有數:9AH )9AH )邏輯或邏輯或ORLORL用于置用于置1 1或者保留某些位:或者保留某些位:例例: ORL A, #0FH; : ORL A, #0FH; 那么那么(A) = 9FH(A) = 9FH邏輯異或邏輯異或XRLXRL用于取反或者保留某些位:用于取反或者保留某些位:例例: XRL A, #0FH; : XRL A, #0FH; 那么那么(A) = 95H
38、(A) = 95H (A) (A) 1001 1010 1001 1010 #0FH #0FH 0000 1111 0000 1111 95H 95H 1001 0101 1001 0101邏輯運算及移位類指令續)邏輯運算及移位類指令續) P.64P.64累加器移位操作累加器移位操作: :(RL,RLC,RR,RRC4RL,RLC,RR,RRC4條)條)RL A RL A 左環移左環移累加器累加器 A A累加器累加器 A ACyCy累加器累加器 A ACyCy累加器累加器 A ARRC A RRC A 帶進位位右環移帶進位位右環移RR A RR A 右環移右環移RLC A RLC A 帶進位位
39、左環移帶進位位左環移( (四四) )控制轉移類指令控制轉移類指令4 4種種/17/17條)條) P.65P.65此類指令改變程序的執行順序此類指令改變程序的執行順序改變當前改變當前PCPC值值無條件轉移:無條件轉移: (LJMP,AJMP,SJMP,JMP4LJMP,AJMP,SJMP,JMP4條)條)條件轉移判斷跳轉):條件轉移判斷跳轉): (JZ,JNZ,CJNE,DJNZ8JZ,JNZ,CJNE,DJNZ8條)條)子程序調用及返回:子程序調用及返回: (LCALL,ACALL,RET,RETI4LCALL,ACALL,RET,RETI4條)條)空操作空操作: : (NOP1NOP1條)條
40、) “耗時一個機器周期。耗時一個機器周期。 do nothing! do nothing!控制轉移類指令續)控制轉移類指令續) P.65-67P.65-67無條件轉移:無條件轉移: LJMP,AJMP,SJMP,JMP4 LJMP,AJMP,SJMP,JMP4條條LJMP addr16 LJMP addr16 長跳轉指令長跳轉指令 可在可在64K64K范圍內跳轉范圍內跳轉AJMP addr11 AJMP addr11 絕對跳轉指令絕對跳轉指令 可在指令所在的可在指令所在的2K2K范圍內跳轉范圍內跳轉SJMP rel SJMP rel 相對跳轉指令相對跳轉指令 可在當前可在當前PC-128PC-
41、128與與+127+127范圍內跳轉范圍內跳轉JMP A+DPTR JMP A+DPTR 間接長跳轉指令間接長跳轉指令 可在以可在以DPTRDPTR為基址為基址 + A + A為偏移量為偏移量 之和所指向的之和所指向的64K64K程序范圍內跳轉程序范圍內跳轉控制轉移類指令續)控制轉移類指令續) P.67-69P.67-69條件轉移:條件轉移: JZ,JNZ,CJNE,DJNZ8JZ,JNZ,CJNE,DJNZ8條條JZ relJZ relJNZ relJNZ rel根據根據AccAcc的內容是否為的內容是否為0 0決定是否跳轉決定是否跳轉DJNZ directDJNZ direct,relre
42、lDJNZ RnDJNZ Rn, rel rel將將direct(direct(或或Rn)Rn)里的內容減里的內容減 1 1,結果不等,結果不等于于0 0就跳轉;等于就跳轉;等于0 0則不跳轉繼續往下走。則不跳轉繼續往下走。條件轉移續)條件轉移續)CJNE A, #data, relCJNE A, #data, relCJNE A, direct,rel CJNE A, direct,rel CJNE Ri,#data, relCJNE Ri,#data, relCJNE Rn, #data, relCJNE Rn, #data, rel 將將A(A(或或Ri,Ri,或或Rn)Rn)與與#da
43、ta(#data(或或direct)direct)相比較,相比較,其值不相等就跳轉;相等則不跳轉其值不相等就跳轉;相等則不跳轉, ,繼續往下走。繼續往下走??刂妻D移類指令續)控制轉移類指令續) P.70P.70LCALL addr16 LCALL addr16 子程序長調用指令子程序長調用指令可在可在64K64K范圍內調用子程序范圍內調用子程序子程序調用及返回:子程序調用及返回: (LCALL,ACALL,RET,RETI4LCALL,ACALL,RET,RETI4條)條) ACALL addr11 ACALL addr11 子程序絕對調用指令子程序絕對調用指令可在指令所在的可在指令所在的2K
44、2K范圍內調用子程序范圍內調用子程序RET RET 子程序返回指令子程序返回指令子程序結束并返回調用的下一條指令子程序結束并返回調用的下一條指令RETI RETI 中斷服務子程序返回指令中斷服務子程序返回指令中斷結束中斷結束/ /返回被打斷處的下一條指令返回被打斷處的下一條指令( (五五) )位操作類指令位操作類指令1717條)條) P.71P.71位傳送:位傳送: (MOV2MOV2條)條)位清零位清零/ /置位:置位: (CLR,SETB4CLR,SETB4條)條)位邏輯與位邏輯與/ /或或/ /非運算:(非運算:(ANL,ORL,CPL6ANL,ORL,CPL6條)條)位條件轉移位條件轉
45、移: : (JC,JNC,JB,JNB,JBC5JC,JNC,JB,JNB,JBC5條)條)位操作類指令續)位操作類指令續) P.72P.72位傳送指令位傳送指令2 2條):條): MOV C MOV C, bit bit (C C)(bitbit) MOV bit MOV bit, C C (bitbit)(C C) 注:注: bit bit表示位地址表示位地址位清零位清零/ /置位指令置位指令4 4條):條): CLR bit CLR bit或或C C) (bitbit或或 C C)“0 0” SETB bit SETB bit或或C C) (bitbit或或 C C)“1 1” 位邏輯與
46、位邏輯與/ /或或/ /非指令非指令6 6條):條): ANL C ANL C,bitbit或或/bit/bit) ORL C ORL C,bitbit或或/bit/bit) CPL bit CPL bit (或(或 C C) 注注: :“/bit/bit表示對表示對bitbit位先取反然后再參加運位先取反然后再參加運算算位操作類指令續)位操作類指令續) P.74P.74判位條件轉移指令判位條件轉移指令5 5條):條): JC rel JC rel(CyCy)= =“1 1就跳轉;否則不跳轉就跳轉;否則不跳轉 JNC rel JNC rel(CyCy)“1 1就跳轉;否則不跳轉就跳轉;否則不跳
47、轉 JB bit JB bit,relrel (bitbit)= =“1 1就跳轉;否則不跳轉就跳轉;否則不跳轉JNB bitJNB bit,relrel (bitbit)“1 1就跳轉;否則不跳轉就跳轉;否則不跳轉JBC bitJBC bit,relrel (bitbit)= =“1 1就先將其清零就先將其清零 再跳轉;再跳轉; 否則,不動此位也不跳轉。否則,不動此位也不跳轉。任務一:控制一盞燈點亮任務一:控制一盞燈點亮任務二:紅燈周期性地亮任務二:紅燈周期性地亮/ /滅滅JOB3: CLR P1.1 ; P1.1JOB3: CLR P1.1 ; P1.1清清“0 0” ,亮綠燈,亮綠燈RE
48、DO: SETB P1.3 ;REDO: SETB P1.3 ;將將P1.3P1.3置置“1 1”CHECK:JNB P1.3,CHECK ;CHECK:JNB P1.3,CHECK ;檢測傳感器是否被阻斷檢測傳感器是否被阻斷LOOP: ;LOOP: ;有入侵者,報警!有入侵者,報警! AJMP REDO ; AJMP REDO ;再跳回去檢測再跳回去檢測JOB1:JOB1: CLR P1.0 ;P1.0 CLR P1.0 ;P1.0清清“0 0”,亮紅燈,亮紅燈HERE: AJMP HERE ;HERE: AJMP HERE ;原地等待,不做別的事原地等待,不做別的事JOB2: CPL P1
49、.0 ;JOB2: CPL P1.0 ;對對P1.0P1.0取反:紅燈亮取反:紅燈亮/ /滅滅 ACALL DELAY ; ACALL DELAY ;延時延時1 1秒秒 AJMP JOB2 ; AJMP JOB2 ;反復反復任務三:紅外防盜報警任務三:紅外防盜報警 前面的簡單測控實例中的前面的簡單測控實例中的程序:程序:位操作指令位操作指令任務一:控制一盞燈點亮任務一:控制一盞燈點亮任務二:紅燈周期性地亮任務二:紅燈周期性地亮/ /滅滅JOB3: CLR P1.1 ; P1.1JOB3: CLR P1.1 ; P1.1清清“0 0” ,亮綠燈,亮綠燈REDO: SETB P1.3 ;REDO:
50、 SETB P1.3 ;將將P1.3P1.3置置“1 1”CHECK:JNB P1.3,CHECK ;CHECK:JNB P1.3,CHECK ;檢測傳感器是否被阻斷檢測傳感器是否被阻斷LOOP: ;LOOP: ;有入侵者,報警!有入侵者,報警! AJMP REDO ; AJMP REDO ;再跳回去檢測再跳回去檢測JOB1:JOB1: CLR P1.0 ;P1.0 CLR P1.0 ;P1.0清清“0 0”,亮紅燈,亮紅燈HERE: AJMP HERE ;HERE: AJMP HERE ;原地等待,不做別的事原地等待,不做別的事JOB2: CPL P1.0 ;JOB2: CPL P1.0 ;
51、對對P1.0P1.0取反:紅燈亮取反:紅燈亮/ /滅滅 ACALL DELAY ;ACALL DELAY ;延時延時1 1秒秒 AJMP JOB2 ;AJMP JOB2 ;反復反復任務三:紅外防盜報警任務三:紅外防盜報警跳轉指令跳轉指令 前面的簡單測控實例中的前面的簡單測控實例中的程序:程序:小結:MCS-51指令集五大類功能)數據傳送類指令數據傳送類指令 (2929條)條)算術運算類指令算術運算類指令 (2424條)條)邏輯運算及移位類指令邏輯運算及移位類指令 (2424條)條)控制轉移類指令控制轉移類指令 (1717條)條)位操作位操作( (布爾操作布爾操作) )類指令類指令 (1717條
52、)條)內部存儲器間傳送:內部存儲器間傳送: (MOV16MOV16條)條)外部數據存儲器外部數據存儲器RAMRAM與累加器間傳送與累加器間傳送: : (MOVX4MOVX4條)條)程序存儲器程序存儲器ROMROM向累加器傳送:向累加器傳送: (MOVC2MOVC2條)條)數據交換:(數據交換:(XCHXCH,XCHDXCHD,SWAP5SWAP5條)條)堆棧操作:堆棧操作: (PUSHPUSH,POP2POP2條)條)(一)數據傳送類指令5種/29條)(二)算術運算類指令6種/24條)加法運算加法運算 (ADD4 (ADD4條條) )帶進位加法運算帶進位加法運算 (ADDC4 (ADDC4條條
53、) )帶借位減法運算帶借位減法運算 (SUBB4 (SUBB4條條) )加加1/1/減減1 1操作操作 (INC,DEC9 (INC,DEC9條條) )單字節乘單字節乘/ /除法運算除法運算(MUL,DIV2(MUL,DIV2條條) )十進制調整十進制調整 (DA A1 (DA A1條條) )(三)邏輯運算及移位指令5種/24條)邏輯與運算:邏輯與運算: (ANL6ANL6條)條)邏輯或運算:邏輯或運算: (ORL6ORL6條)條)邏輯異或運算:邏輯異或運算: (XRL6XRL6條)條)累加器清零累加器清零/ /取反:取反: (CLRCLR,CPL2CPL2條)條)累加器移位操作累加器移位操作
54、: :(RL,RLC,RR,RRC4RL,RLC,RR,RRC4條)條)(四)控制轉移類指令4種/17條)無條件轉移:無條件轉移: (LJMP,AJMP,SJMP,JMP4LJMP,AJMP,SJMP,JMP4條)條)條件轉移判斷跳轉):條件轉移判斷跳轉): (JZ,JNZ,CJNE,DJNZ8JZ,JNZ,CJNE,DJNZ8條)條)子程序調用及返回:子程序調用及返回: (LCALL,ACALL,RET,RETI4LCALL,ACALL,RET,RETI4條)條)空操作空操作: : (NOP1NOP1條)條) (五)位操作類指令4種17條)位傳送:位傳送: (MOV2MOV2條)條)位清零位
55、清零/ /置位:置位: (CLR,SETB4CLR,SETB4條)條)位邏輯與位邏輯與/ /或或/ /非運算:非運算: (ANL,ORL,CPL6ANL,ORL,CPL6條)條)位條件轉移位條件轉移: : (JC,JNC,JB,JNB,JBC5JC,JNC,JB,JNB,JBC5條)條)匯編語言與 簡單程序設計匯編語言程序設計中的數計算機只能識別二進制數計算機只能識別二進制數機器指令,它原本是機器指令,它原本是不認識常用的十六進制數和十進制數的。不認識常用的十六進制數和十進制數的。機器指令機器指令/ /目標代碼:目標代碼: 由由0/10/1代碼組成的操作碼與操作數。代碼組成的操作碼與操作數。十
56、六進制數:便于讀寫記憶的二進制數的簡寫形式。十六進制數:便于讀寫記憶的二進制數的簡寫形式。 (0 09 9,A AF F 后綴:后綴:H/hH/h)BCDBCD碼:用二進制數表達的十進制數。碼:用二進制數表達的十進制數。 (0 09 9表示為表示為:0000:00001001B 1001B 后綴后綴:B/b,H/h:B/b,H/h)二進制數:由二進制數:由0/10/1組成、組成、“逢逢2 2進進1 1的數制。的數制。 如:如:01011110B 01011110B (0 01 1 后綴:后綴:B/bB/b)匯編語言編程基本規則匯編語言匯編語言: :用助記符描述的指令的集合。用助記符描述的指令的
57、集合。指令中以指令中以 AF AF 開頭的十六進制數前必須添一個開頭的十六進制數前必須添一個 “0 0”。二進制數必須帶后綴二進制數必須帶后綴“B B或或“b b”;十六進制數必;十六進制數必須帶后綴須帶后綴“H H或或“h h”;十進制數的后綴是;十進制數的后綴是“D D或或“d d或無或無. .標號:操作碼 目的操作數,源操作數;注釋匯編程序匯編程序: :匯編語言編寫的程序借助編譯工具匯編語言編寫的程序借助編譯工具編譯成為目標代碼編譯成為目標代碼, ,計算機才能識別。這個編譯工具計算機才能識別。這個編譯工具稱為匯編程序。稱為匯編程序。匯編程序的偽指令匯編程序匯編程序 軟件軟件 工具工具工具
58、軟件:工具軟件: 將程序員用匯編語言編寫的程序翻譯成機器碼將程序員用匯編語言編寫的程序翻譯成機器碼 ( (真真) )指令指令: :告訴計算機如何操作以及做何種操作告訴計算機如何操作以及做何種操作用匯編語言編寫的程序在此被稱為應用程序用匯編語言編寫的程序在此被稱為應用程序偽指令:告訴匯編程序在翻譯應用程序時有何具偽指令:告訴匯編程序在翻譯應用程序時有何具體約定。偽指令不進行具體的操作,那是真指令體約定。偽指令不進行具體的操作,那是真指令的事。的事。 比如:從何處開始,何處結束,某些編程者自己比如:從何處開始,何處結束,某些編程者自己規定的表述代表什么意思規定的表述代表什么意思 匯編程序的常用偽指
59、令ORG addr16ASM51ORG addr16ASM51程序中一定要寫!程序中一定要寫!規定編譯后的機器代碼存放的起始位置。規定編譯后的機器代碼存放的起始位置。END ASM51END ASM51程序中一定要寫!程序中一定要寫!表示翻譯到此結束,其后的任何內容不予理睬。表示翻譯到此結束,其后的任何內容不予理睬。符號名稱符號名稱 EQU EQU 表達式表達式將表達式的值賦予符號名稱。程序中凡出現該符將表達式的值賦予符號名稱。程序中凡出現該符號名稱就等同于該表達式。號名稱就等同于該表達式。$ $ “當前當前PCPC值也叫位置計數器值也叫位置計數器 代表正在執行的指令所在位置。代表正在執行的指
60、令所在位置。匯編程序的常用偽指令(續)符號名稱符號名稱 BIT BIT 位地址位地址將位地址的值賦予符號名稱。程序中凡出現該將位地址的值賦予符號名稱。程序中凡出現該符號名稱就代表該位地址。符號名稱就代表該位地址。DW DW 雙字節數據雙字節數據 或雙字節數據組或雙字節數據組 將雙字節數據將雙字節數據 或雙字節數據組或雙字節數據組 順序存放在此順序存放在此后的存儲單元中。占據相應存儲空間。后的存儲單元中。占據相應存儲空間。DB 8DB 8位數據位數據 或或8 8位數據組位數據組 將將8 8位數據位數據 或或8 8位數據組位數據組 順序存放在此后的存順序存放在此后的存儲單元中。占相應數量的存儲空間
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何健全辦學管理辦法
- 員額退出機制管理辦法
- 藥品責任追究管理辦法
- 拉薩補貼資金管理辦法
- 肯德基安全培訓課件
- 倒閘操作培訓課件
- 肝膿腫病人護理課件
- 眾安實業培訓課件
- 二附中期末數學試卷
- kbz饋電開關培訓課件
- 廢氣治理設施運行管理規程制度
- 市政工程質量通病防治措施
- 《三國的世界》解說詞 第五集
- 漢字的發展(英文版介紹)Chinese-character
- 供貨方案及供貨計劃范文六篇
- 華為“1+X”職業技能等級(網絡系統建設與運維)中級考試題庫(含答案)
- 單位財務內控制度
- 【電氣專業】15D501建筑物防雷設施安裝
- 山東省病原微生物實驗室及實驗活動備案管理系統
- DB41T 1564-2018豫南再生稻栽培技術規程
- 統編初中《道德與法治》課標解讀與新教材介紹課件
評論
0/150
提交評論