第4章 MCS-51單片機(jī)的指令系統(tǒng)_第1頁
第4章 MCS-51單片機(jī)的指令系統(tǒng)_第2頁
第4章 MCS-51單片機(jī)的指令系統(tǒng)_第3頁
第4章 MCS-51單片機(jī)的指令系統(tǒng)_第4頁
第4章 MCS-51單片機(jī)的指令系統(tǒng)_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、p4.1 指令和指令程序指令和指令程序 p4.2 尋址方式尋址方式 p4.3 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令p4.4 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 p4.5 邏輯運(yùn)算及移位指令邏輯運(yùn)算及移位指令 p4.6 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令 p4.7 布爾變量操作指令布爾變量操作指令 1附錄附錄1:指令匯總指令匯總附錄附錄2:某些指令的說明某些指令的說明4.1 指令和指令程序指令和指令程序p所有軟件,都要翻譯成計(jì)算機(jī)能直接識(shí)別和執(zhí)行所有軟件,都要翻譯成計(jì)算機(jī)能直接識(shí)別和執(zhí)行的命令,才能由計(jì)算機(jī)去執(zhí)行。這種計(jì)算機(jī)能直的命令,才能由計(jì)算機(jī)去執(zhí)行。這種計(jì)算機(jī)能直接識(shí)別和執(zhí)行的命令稱為接識(shí)別和執(zhí)行的命令稱為指令指令。一臺(tái)

2、計(jì)算機(jī)所能。一臺(tái)計(jì)算機(jī)所能執(zhí)行的全部指令的集合稱為這臺(tái)計(jì)算機(jī)的執(zhí)行的全部指令的集合稱為這臺(tái)計(jì)算機(jī)的指令系指令系統(tǒng)統(tǒng)。24.1 指令和指令程序指令和指令程序“指令指令”: CPU能能直接識(shí)別和執(zhí)行直接識(shí)別和執(zhí)行的的命令命令。指令系統(tǒng)指令系統(tǒng):CPU所能執(zhí)行的全部指令的集合。所能執(zhí)行的全部指令的集合。 與與CPU的能力、使用的方便靈活性密切相關(guān)。的能力、使用的方便靈活性密切相關(guān)。指令的記憶問題指令的記憶問題?指令本身是二進(jìn)制代碼。?指令本身是二進(jìn)制代碼。3例如以下的例如以下的51單片機(jī)指令:?jiǎn)纹瑱C(jī)指令:把10放到累加器A中 A加20,結(jié)果仍在A中 為了便于記憶 740AH 2414H用一組有一定意

3、義的字符來表示 指令助記符 助記符、助記符、匯編語言源程序匯編語言源程序4p雖然書寫的字符增多了,但由于可讀性增強(qiáng)雖然書寫的字符增多了,但由于可讀性增強(qiáng)了,使用時(shí)反而感到方便。了,使用時(shí)反而感到方便。 p經(jīng)常采用經(jīng)常采用助記符助記符和其他一些符號(hào)來編寫指令程序,和其他一些符號(hào)來編寫指令程序,這樣編出的程序稱為這樣編出的程序稱為匯編語言源程序匯編語言源程序。它經(jīng)過一種。它經(jīng)過一種稱為稱為匯編程序匯編程序的軟件的翻譯,就可變成機(jī)器可執(zhí)行的軟件的翻譯,就可變成機(jī)器可執(zhí)行的的目標(biāo)程序目標(biāo)程序了。了。p高級(jí)語言編程、效率問題高級(jí)語言編程、效率問題指令的組成指令的組成及字節(jié)數(shù)及字節(jié)數(shù)5p指令通常由兩部分構(gòu)

4、成,即指令通常由兩部分構(gòu)成,即操作碼操作碼和和操作數(shù)操作數(shù)。p操作碼操作碼用來規(guī)定這條指令完成什么操作,如是做加法用來規(guī)定這條指令完成什么操作,如是做加法還是做減法,是數(shù)據(jù)傳送還是數(shù)據(jù)移位等。還是做減法,是數(shù)據(jù)傳送還是數(shù)據(jù)移位等。p操作數(shù)操作數(shù)則表示這條指令所完成操作的對(duì)象,即是對(duì)誰則表示這條指令所完成操作的對(duì)象,即是對(duì)誰來進(jìn)行操作。操作數(shù)可以直接是一個(gè)數(shù),或者一個(gè)數(shù)據(jù)來進(jìn)行操作。操作數(shù)可以直接是一個(gè)數(shù),或者一個(gè)數(shù)據(jù)所在的地址。所在的地址。 51單片機(jī)的指令的長(zhǎng)度:?jiǎn)纹瑱C(jī)的指令的長(zhǎng)度:13個(gè)字節(jié)。個(gè)字節(jié)。5大類大類111條。條。 單字節(jié):?jiǎn)巫止?jié):49條條雙字節(jié):雙字節(jié):45條條三字節(jié):三字節(jié):

5、17條條在二進(jìn)制的在二進(jìn)制的51指令中,單字節(jié)指令的操作碼和操作數(shù)加起來指令中,單字節(jié)指令的操作碼和操作數(shù)加起來只有只有1B;雙字節(jié)指令的操作碼和操作數(shù)各占;雙字節(jié)指令的操作碼和操作數(shù)各占1B;三字節(jié)指;三字節(jié)指令的第令的第1字節(jié)為操作碼,第字節(jié)為操作碼,第2、第、第3字節(jié)為操作數(shù)、操作數(shù)地字節(jié)為操作數(shù)、操作數(shù)地址或符號(hào)。址或符號(hào)。1單字節(jié)指令(單字節(jié)指令(49條)條)在在51指令指令系統(tǒng)中,單字節(jié)指令可分為指令指令系統(tǒng)中,單字節(jié)指令可分為兩大類兩大類:無操作數(shù)無操作數(shù)的單字節(jié)指令的單字節(jié)指令和和含有操作數(shù)寄存器編號(hào)的單字節(jié)指令含有操作數(shù)寄存器編號(hào)的單字節(jié)指令。1)無操作數(shù)單字節(jié)指令)無操作數(shù)

6、單字節(jié)指令這類指令只有操作碼字段,操作數(shù)隱含在操作碼中。這類指令只有操作碼字段,操作數(shù)隱含在操作碼中。例如:例如:INC DPTR 指令碼為指令碼為 : 數(shù)據(jù)指針隱含其中數(shù)據(jù)指針隱含其中 指令的組成指令的組成及字節(jié)數(shù)及字節(jié)數(shù)2)含有操作數(shù)寄存器號(hào)的單字節(jié)指令)含有操作數(shù)寄存器號(hào)的單字節(jié)指令 單字節(jié)的指令碼由操作碼字段和指示操作數(shù)所單字節(jié)的指令碼由操作碼字段和指示操作數(shù)所 在寄在寄存器號(hào)的字段組成。存器號(hào)的字段組成。 例如;例如;MOV A,Rn 指令碼為:指令碼為: 其中,其中,rrr為寄存器為寄存器Rn的編號(hào)的編號(hào) 指令的組成指令的組成及字節(jié)數(shù)及字節(jié)數(shù)2雙字節(jié)指令(雙字節(jié)指令(45條)條)雙

7、字節(jié)指令的操作碼字節(jié)在雙字節(jié)指令的操作碼字節(jié)在前前;在后面的操作數(shù)字節(jié)可以;在后面的操作數(shù)字節(jié)可以是是立即數(shù)立即數(shù),也可以是操作數(shù)所在的,也可以是操作數(shù)所在的片內(nèi)片內(nèi)RAM地址地址。例如:例如:MOV A,#23H指令碼為:指令碼為: 這條這條8位數(shù)傳送指令的含義是把指令碼第位數(shù)傳送指令的含義是把指令碼第2字節(jié)立即數(shù)字節(jié)立即數(shù)23H取出來存放到累加器取出來存放到累加器(A)中。該指令的操作碼占中。該指令的操作碼占1B;23H為源操作數(shù),也是為源操作數(shù),也是1B;累加器(累加器(A)是目的操作數(shù)寄)是目的操作數(shù)寄存器,隱含在操作碼字段中存器,隱含在操作碼字段中。指令的組成指令的組成及字節(jié)數(shù)及字節(jié)

8、數(shù)3三字節(jié)指令(三字節(jié)指令(17條)條)這條指令的指令碼的第這條指令的指令碼的第1字節(jié)為字節(jié)為操作碼操作碼;第;第2和第和第3字節(jié)為字節(jié)為操作數(shù)或操作數(shù)地址操作數(shù)或操作數(shù)地址,有如下,有如下3類。類。1)16位數(shù)據(jù)位數(shù)據(jù)例如:例如:MOV DPTR,#26ABH指令碼為:指令碼為:指令的組成指令的組成及字節(jié)數(shù)及字節(jié)數(shù)2)8位地址和位地址和8位數(shù)據(jù)位數(shù)據(jù)例如:例如:MOV 74H,#0FFH指令碼為:指令碼為:指令的組成指令的組成及字節(jié)數(shù)及字節(jié)數(shù)01175H 74H FFH3)16位地址位地址例如:例如:LCALL 2020H指令碼為:指令碼為:指令的組成指令的組成及字節(jié)數(shù)及字節(jié)數(shù)指令的組成指令

9、的組成及字節(jié)數(shù)及字節(jié)數(shù)12p三字節(jié)指令三字節(jié)指令第第1個(gè)字節(jié)的操作碼,后兩個(gè)字節(jié)是操作數(shù)。個(gè)字節(jié)的操作碼,后兩個(gè)字節(jié)是操作數(shù)。 操作數(shù)可以是數(shù)據(jù),也可以是地址。操作數(shù)可以是數(shù)據(jù),也可以是地址。有以下有以下4種情況。種情況。 在程序設(shè)計(jì)中,應(yīng)盡可能選用字節(jié)少的指令。這在程序設(shè)計(jì)中,應(yīng)盡可能選用字節(jié)少的指令。這樣,指令所占存儲(chǔ)單元少,執(zhí)行速度也快。樣,指令所占存儲(chǔ)單元少,執(zhí)行速度也快。 51匯編語言有匯編語言有42種種操作碼助記符,用來描述操作碼助記符,用來描述33種種操作功操作功能。一種操作碼可以使用一種以上的數(shù)據(jù)類型,又由于能。一種操作碼可以使用一種以上的數(shù)據(jù)類型,又由于助記符規(guī)定了其訪問的存

10、儲(chǔ)器空間,所以一種功能可能助記符規(guī)定了其訪問的存儲(chǔ)器空間,所以一種功能可能有幾個(gè)助記符有幾個(gè)助記符(如(如MOV、MOVX、MOVC)。功能助記)。功能助記符與尋址方式組合,得到符與尋址方式組合,得到111條指令。條指令。4.2 尋址方式尋址方式4.2 尋址方式尋址方式p尋址就是尋找操作數(shù)的地址。尋址就是尋找操作數(shù)的地址。p在用高級(jí)語言編程時(shí)在用高級(jí)語言編程時(shí),編程者,編程者不必關(guān)心不必關(guān)心參與運(yùn)算數(shù)據(jù)參與運(yùn)算數(shù)據(jù)(操作數(shù))的(操作數(shù))的存放問題存放問題,也不必關(guān)心這些運(yùn)算是在哪里,也不必關(guān)心這些運(yùn)算是在哪里(哪個(gè)寄存器)完成的。編程者只需關(guān)心語句的使用是(哪個(gè)寄存器)完成的。編程者只需關(guān)心語

11、句的使用是否正確,結(jié)果是否正確。至于變量的值存放在何處,則否正確,結(jié)果是否正確。至于變量的值存放在何處,則根本不必關(guān)心。根本不必關(guān)心。p在匯編語言編程時(shí)在匯編語言編程時(shí),數(shù)據(jù)的存放、傳送、運(yùn)算都要通過,數(shù)據(jù)的存放、傳送、運(yùn)算都要通過指令來完成,編程者必須自始至終都要十分指令來完成,編程者必須自始至終都要十分清楚清楚操作數(shù)操作數(shù)的的位置位置以及如何將它們傳送至適當(dāng)?shù)募拇嫫髦腥ミ\(yùn)算。以及如何將它們傳送至適當(dāng)?shù)募拇嫫髦腥ミ\(yùn)算。因此,如何從各個(gè)存放操作數(shù)的區(qū)域去尋找和提取操作因此,如何從各個(gè)存放操作數(shù)的區(qū)域去尋找和提取操作數(shù)就變得十分重要。數(shù)就變得十分重要。p所謂尋址方式就是如何通過確定操作數(shù)所在的位

12、置所謂尋址方式就是如何通過確定操作數(shù)所在的位置(地地址址)從而把操作數(shù)提取出來的方法。從而把操作數(shù)提取出來的方法。 14常用符號(hào)說明常用符號(hào)說明用匯編語言編寫指令時(shí)必須遵守一定的規(guī)則用匯編語言編寫指令時(shí)必須遵守一定的規(guī)則,下表給,下表給出了編寫指令時(shí)的出了編寫指令時(shí)的一些符號(hào)的約定含義。一些符號(hào)的約定含義。51單片機(jī)的尋址方式單片機(jī)的尋址方式1.立即尋址立即尋址2.寄存器尋址寄存器尋址3.直接尋址直接尋址4.寄存器間接尋址寄存器間接尋址5.變址尋址(基址寄存器加偏移量寄存器)變址尋址(基址寄存器加偏移量寄存器)6.相對(duì)尋址相對(duì)尋址7.位尋址位尋址 16操作數(shù)的尋址方式有操作數(shù)的尋址方式有7種種

13、1、立即尋址立即尋址若指令的若指令的操作數(shù)操作數(shù)是一個(gè)是一個(gè)8位二進(jìn)制數(shù)或位二進(jìn)制數(shù)或16位二進(jìn)制數(shù),就位二進(jìn)制數(shù),就稱為稱為立即尋址立即尋址。指令中出現(xiàn)的操作數(shù)就稱為。指令中出現(xiàn)的操作數(shù)就稱為立即數(shù)立即數(shù)。例如:例如:MOV A,#3AH;A 3AH MOV DPTR,#8000H在在MCS51系統(tǒng)中采用系統(tǒng)中采用“#”來表示后面的是立即數(shù)。來表示后面的是立即數(shù)。 172、寄存器尋址寄存器尋址u寄存器尋址就是以通用寄存器的內(nèi)容作為操作數(shù),在指令寄存器尋址就是以通用寄存器的內(nèi)容作為操作數(shù),在指令的助記符中直接以寄存器的名字來表示操作數(shù)位置。這種的助記符中直接以寄存器的名字來表示操作數(shù)位置。這種

14、尋址方式如果使用了另一個(gè)操作數(shù),那么另一操作數(shù)必須尋址方式如果使用了另一個(gè)操作數(shù),那么另一操作數(shù)必須是是累加器累加器A,這些指令都是,這些指令都是單字節(jié)指令單字節(jié)指令u 在在MCS-51指令中,若操作數(shù)是以指令中,若操作數(shù)是以R0R7來表示操作數(shù)時(shí),來表示操作數(shù)時(shí),就屬于寄存器尋址方式。就屬于寄存器尋址方式。u例如例如MOV A,R0 ;(;(A)(R0)INC R0; (R0)+1R0 183、直接尋址直接尋址在指令中在指令中直接給出操作數(shù)地址直接給出操作數(shù)地址,就屬于直接尋址方式。此,就屬于直接尋址方式。此時(shí),指令的操作數(shù)部分直接是操作數(shù)的地址。時(shí),指令的操作數(shù)部分直接是操作數(shù)的地址。19

15、例如:例如:MOV A,3AH;A 68H3、直接尋址直接尋址20例如:例如:MOV A,TH0 MOV A, 8CH直接尋址方式只能給出直接尋址方式只能給出8位地址位地址,因此,這種尋址方式的,因此,這種尋址方式的尋址范圍只限于片內(nèi)尋址范圍只限于片內(nèi)RAM,具體說:,具體說: 1)低)低128單元,在指令中直接以單元地址形式給出。單元,在指令中直接以單元地址形式給出。 2)特殊功能寄存器,這時(shí)除可以用單元地址形式給出外,)特殊功能寄存器,這時(shí)除可以用單元地址形式給出外,還可以寄存器符號(hào)形式給出。還可以寄存器符號(hào)形式給出。特殊功能寄存器的唯一尋址特殊功能寄存器的唯一尋址方式。方式。4、寄存器間

16、接尋址寄存器間接尋址操作數(shù)的地址,若以寄存操作數(shù)的地址,若以寄存器的名稱間接給出器的名稱間接給出,則為,則為寄存器間接尋址。采用寄寄存器間接尋址。采用寄存器間接尋址,可以訪問存器間接尋址,可以訪問內(nèi)部數(shù)據(jù)內(nèi)部數(shù)據(jù)RAM的的128個(gè)存貯個(gè)存貯單元(單元(007FH),全部的),全部的64kB外部數(shù)據(jù)存貯器,外部數(shù)據(jù)存貯器,但但不能訪問特殊功能寄存器不能訪問特殊功能寄存器。21例如:例如:MOV A,R0;A(R0)A=65Hp可以用做間接尋址的寄存器:R0和R1,數(shù)據(jù)指針寄存器DPTR;用寄存器名前加“”符號(hào)來表示。 寄存器間接尋址的尋址范圍:寄存器間接尋址的尋址范圍: 1)片內(nèi))片內(nèi)RAM低低

17、128單元:這里只能用單元:這里只能用R0和和R1作為間接作為間接尋址寄存器。尋址寄存器。 2)片外)片外RAM 64KB:使用:使用DPTR作為間接尋址寄存器。作為間接尋址寄存器。 3)片外)片外RAM低低256單元:也可以使用單元:也可以使用R0和和R1。MOVX 4)在執(zhí)行)在執(zhí)行PUSH(壓棧)(壓棧)和和POP(出棧)(出棧)指令時(shí),采指令時(shí),采用堆棧指針用堆棧指針SP作寄存器間接尋址作寄存器間接尋址。 例:例:PUSH 30H;把內(nèi)部把內(nèi)部RAM地址地址30H內(nèi)的值放到堆內(nèi)的值放到堆棧區(qū)中棧區(qū)中堆棧區(qū)是由SP寄存器指定的,如果執(zhí)行上面這條命令前,SP為60H,命令執(zhí)行后會(huì)把內(nèi)部RA

18、M地址30H內(nèi)的值放到RAM的61H內(nèi)。例:例:已知已知R0中存放片內(nèi)中存放片內(nèi)RAM地址地址65H,數(shù)據(jù)指針,數(shù)據(jù)指針DPTR內(nèi)存放片外內(nèi)存放片外RAM地址地址8000H,地址,地址65H和和8000H里面都里面都存放著立即數(shù)存放著立即數(shù)30H,執(zhí)行以下指令后:,執(zhí)行以下指令后: MOV A,R0; MOVX A,DPTR;累加器累加器A的內(nèi)容為的內(nèi)容為30H。例:例: MOVR0,#30H; MOVA,R0MOVA,R0MOVXA,R0這種尋址方式用于訪問這種尋址方式用于訪問程序存儲(chǔ)器中的數(shù)據(jù)表格程序存儲(chǔ)器中的數(shù)據(jù)表格,以程序,以程序計(jì)數(shù)器(計(jì)數(shù)器(PC)或數(shù)據(jù)指針()或數(shù)據(jù)指針(DPTR

19、)作為基址寄存器,以)作為基址寄存器,以累加器作為變址寄存器?;芳拇嫫骱妥冎芳拇嫫鞯膬?nèi)容累加器作為變址寄存器?;芳拇嫫骱妥冎芳拇嫫鞯膬?nèi)容相加形成相加形成16位地址,該地址即作為操作數(shù)的地址。位地址,該地址即作為操作數(shù)的地址。245、變址尋址變址尋址例如:例如: MOVC A,A+PC ;(A)+(PC)A MOVC A,A+DPTR; (A)+(DPTR)Ap變址尋址的區(qū)域是程序存儲(chǔ)器ROM而不是數(shù)據(jù)存儲(chǔ)器RAM 。操作數(shù)地址操作數(shù)地址 = 變地址變地址 + 基地址基地址6、相對(duì)尋址相對(duì)尋址p相對(duì)尋址用于訪問程序存儲(chǔ)器,只出現(xiàn)在轉(zhuǎn)移指令中,指相對(duì)尋址用于訪問程序存儲(chǔ)器,只出現(xiàn)在轉(zhuǎn)移指令中,

20、指令的操作數(shù)部分給出的是地址的相對(duì)偏移量。令的操作數(shù)部分給出的是地址的相對(duì)偏移量。用用“rel”表示表示(補(bǔ)碼數(shù))(補(bǔ)碼數(shù))。相對(duì)轉(zhuǎn)移指令所在的地址稱為源地址,轉(zhuǎn)移。相對(duì)轉(zhuǎn)移指令所在的地址稱為源地址,轉(zhuǎn)移后的地址稱為目的地址后的地址稱為目的地址 。程序的轉(zhuǎn)移范圍以程序的轉(zhuǎn)移范圍以PC當(dāng)前值為中當(dāng)前值為中心,介于心,介于-128+127之間之間25例如例如SJMP rel指令的機(jī)器碼指令的機(jī)器碼是是“80H,rel”,兩個(gè)字節(jié)。,兩個(gè)字節(jié)。設(shè)指令所在地址為設(shè)指令所在地址為2000H,rel為為54H,則轉(zhuǎn)移地址,則轉(zhuǎn)移地址(目的目的地址地址)為:為: 2000H十02H十54H2056H PC的

21、值變?yōu)?056H,程序的執(zhí)行發(fā)生了轉(zhuǎn)移。 目的地址源地址十轉(zhuǎn)移指令字節(jié)數(shù)十relrel=85H?267、位尋址位尋址p采用位尋址方式的指令,其操作數(shù)將是采用位尋址方式的指令,其操作數(shù)將是8位二進(jìn)制數(shù)中的位二進(jìn)制數(shù)中的某某一位一位。位的直接地址。位的直接地址。p MCS-51系統(tǒng)的內(nèi)部數(shù)據(jù)系統(tǒng)的內(nèi)部數(shù)據(jù)RAM有兩個(gè)可以按位尋址的區(qū)域:有兩個(gè)可以按位尋址的區(qū)域:一是一是從內(nèi)部從內(nèi)部RAM 20H2FH共共16個(gè)單元中的每一位都可單個(gè)單元中的每一位都可單獨(dú)作為位操作數(shù);獨(dú)作為位操作數(shù);二是二是某些特殊功能寄存器,其特征是這某些特殊功能寄存器,其特征是這些特殊功能寄存器的單元地址些特殊功能寄存器的單元

22、地址能被能被8整除整除。p位地址在指令中用位地址在指令中用bit表示。具體表示方法有表示。具體表示方法有:27(1)直接用位地址直接用位地址00HFFH來表示;來表示; (2)采用第幾單元第幾位的表示方法;采用第幾單元第幾位的表示方法;25H.5 (3)對(duì)特殊功能寄存器可直接用寄存器名加位數(shù);對(duì)特殊功能寄存器可直接用寄存器名加位數(shù);TCON.3 (4)用偽指令定義用偽指令定義,詳見第,詳見第5章章 。可以位尋址的可以位尋址的特殊功能寄存器特殊功能寄存器位地址表位地址表 28對(duì)于對(duì)于20H一一2FH單元中的各位單元中的各位 位地址位地址(單元地址一單元地址一20H)x 8 十十 位號(hào)位號(hào)例:例:

23、 MOV C,40H小結(jié):小結(jié):指令對(duì)哪個(gè)存儲(chǔ)器空間進(jìn)行操作是由指令對(duì)哪個(gè)存儲(chǔ)器空間進(jìn)行操作是由指令的操作碼指令的操作碼和和尋址方式尋址方式確定的。確定的。程序存儲(chǔ)器程序存儲(chǔ)器只能采用立即尋址和變只能采用立即尋址和變址尋址方式,址尋址方式,特殊功能寄存器特殊功能寄存器只能采用直接尋址方式,只能采用直接尋址方式,不能不能采用寄存器間接尋址,采用寄存器間接尋址,位操作指令只能位操作指令只能對(duì)位尋址對(duì)位尋址區(qū)進(jìn)行操作。區(qū)進(jìn)行操作。外部擴(kuò)展的數(shù)據(jù)存儲(chǔ)器只能用外部擴(kuò)展的數(shù)據(jù)存儲(chǔ)器只能用MOVX指令訪問,而內(nèi)指令訪問,而內(nèi)部部RAM的低的低128字節(jié)(字節(jié)(00H7FH)既能用直接尋址,)既能用直接尋址,

24、也能用寄存器間接尋址。也能用寄存器間接尋址。MCS-51指令系統(tǒng),可以分為五大類指令系統(tǒng),可以分為五大類即:即:u數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令28條條u算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令24條條u邏輯運(yùn)算及移位指令邏輯運(yùn)算及移位指令25條條u控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令17條條u位操作(布爾操作)指令位操作(布爾操作)指令17條條304.3 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令一、內(nèi)部一、內(nèi)部RAM數(shù)據(jù)傳送類數(shù)據(jù)傳送類二、二、 外部外部RAM數(shù)據(jù)傳送數(shù)據(jù)傳送三、與程序三、與程序ROM之間的數(shù)據(jù)傳送之間的數(shù)據(jù)傳送 (查表指令)(查表指令)31數(shù)據(jù)傳送類數(shù)據(jù)傳送類-功能示意圖功能示意圖32程序程序存儲(chǔ)器存儲(chǔ)器ROMEPROM特

25、殊功能特殊功能寄存器寄存器SFR片內(nèi)片內(nèi)RAM128字節(jié)字節(jié)片外片外數(shù)據(jù)數(shù)據(jù)存儲(chǔ)器存儲(chǔ)器RAMMOVCMOVXMOV PUSHPOPXCHXCHD單片機(jī)單片機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器內(nèi)部數(shù)據(jù)存儲(chǔ)器一、內(nèi)部一、內(nèi)部RAM數(shù)據(jù)傳送類數(shù)據(jù)傳送類1、基本數(shù)據(jù)傳送指令、基本數(shù)據(jù)傳送指令MOV2、棧操作指令、棧操作指令PUSH、POP3、數(shù)據(jù)交換指令、數(shù)據(jù)交換指令331、基本數(shù)據(jù)傳送指令、基本數(shù)據(jù)傳送指令MOV34格式格式 MOV 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) ;目的操作數(shù)目的操作數(shù) 源操作數(shù)源操作數(shù), 本質(zhì)是復(fù)制本質(zhì)是復(fù)制8Ri不包括特不包括特殊功能寄存器殊功能寄存器根據(jù)目的操作根據(jù)目的操作數(shù)的不同來

26、學(xué)數(shù)的不同來學(xué)習(xí)和記憶。習(xí)和記憶。基本數(shù)據(jù)傳送指令基本數(shù)據(jù)傳送指令MOV351、以、以累加器累加器為目的操作數(shù)為目的操作數(shù) MOV A,Rn ; ARnMOV A,direct;MOV A,Ri;MOV A,#data;舉例舉例2、以、以寄存器寄存器Rn為目的操作數(shù)為目的操作數(shù) MOV Rn,A ; Rn AMOV Rn,directMOV Rn,#data8R0R7R0,R1若(若(R1)=20H,(,(20H)=60H, 分析程序執(zhí)行后分析程序執(zhí)行后,累加器,累加器A的內(nèi)容的內(nèi)容MOV A,R1 ;MOV A,20H;MOV A,Ri;MOV A,# 20H;若(若(A)=20H,(,(2

27、0H)=F0H,分析程序執(zhí)行后寄,分析程序執(zhí)行后寄存器的內(nèi)容存器的內(nèi)容:MOV R0,A ;MOV R0,20H ;MOV R0,#20H;36A20HA60HA60HA20H(R0)=20H (R0)=F0H(R0)=20H基本數(shù)據(jù)傳送指令基本數(shù)據(jù)傳送指令MOV37MOV Ri,AMOV Ri, directMOV Ri,#data舉例舉例MOV direct,AMOV direct,RnMOV direct,directMOV direct,RiMOV direct,#data3、以、以直接地址直接地址為目的操作數(shù)為目的操作數(shù) 8R0R7R0,R14、以、以間接地址間接地址為目的操作數(shù)為目

28、的操作數(shù) 例:將例:將A的內(nèi)容送至的內(nèi)容送至30H單元,單元,R6的內(nèi)容送至的內(nèi)容送至32H單元,立單元,立即數(shù)即數(shù)66H送至送至36H單元,單元,38H單元內(nèi)容送至單元內(nèi)容送至40H單元,可用單元,可用以下指令:以下指令: MOV30H,A MOV32H,R6 MOV36H,#66H MOV38H,40H 例:若例:若A的內(nèi)容為的內(nèi)容為20H,32H單元的內(nèi)容為單元的內(nèi)容為46H,42H單元的單元的內(nèi)容為內(nèi)容為52H,R0的內(nèi)容為的內(nèi)容為42H,執(zhí)行以下指令后,寄存器,執(zhí)行以下指令后,寄存器中的內(nèi)容如下:中的內(nèi)容如下: MOVR0,A MOVR0,32H MOVR0,#35H(A) 30H

29、(R6)32H 66H(36H)(40H)(38H)(42H)=20H,(,(A)=20H(42H)=32H,(,(32H)=46H(42H)=35H基本數(shù)據(jù)傳送指令基本數(shù)據(jù)傳送指令MOV39MOV DPTR,#data16 ;舉例舉例8R0R7R0,R15、唯一的、唯一的16位數(shù)據(jù)位數(shù)據(jù) 傳送指令。傳送指令。MOV DPTR,#1234H MOV DPH,#12H; MOV DPL,#34H; 注意注意40上述指令不影響任何標(biāo)志位,但上述指令不影響任何標(biāo)志位,但PSW的的P位除外。位除外。注意:注意:MOV Rn,Rn MOV Ri, Ri MOV Rn, Ri MOV #data, A 等

30、等等指令是等指令是非法指令非法指令。 哇!好容易出錯(cuò)??! 立即數(shù)不能為目的操作數(shù)。立即數(shù)不能為目的操作數(shù)。 一條指令中不能出現(xiàn)兩個(gè)工作寄存器。一條指令中不能出現(xiàn)兩個(gè)工作寄存器。 特殊功能寄存器特殊功能寄存器SFR只能直接尋址。只能直接尋址。 間接尋址間接尋址 的寄存器為的寄存器為R0和和R1。2、堆棧操作指令、堆棧操作指令p數(shù)據(jù)存取數(shù)據(jù)存取原則按照原則按照“先進(jìn)后出,后進(jìn)先出先進(jìn)后出,后進(jìn)先出”。p堆棧是在堆棧是在內(nèi)存中內(nèi)存中專門開辟出來的專門開辟出來的區(qū)域(片內(nèi)區(qū)域(片內(nèi)RAM)。p堆棧指示器堆棧指示器SP就是用來指示堆棧位置的。就是用來指示堆棧位置的。p在使用堆棧之前,先給在使用堆棧之前,

31、先給SP賦值,以規(guī)定堆棧的起始位量,賦值,以規(guī)定堆棧的起始位量,稱為棧底。稱為棧底。p復(fù)位后,復(fù)位后,SP=07Hp進(jìn)棧指令進(jìn)棧指令PUSHp出棧指令出棧指令POP41進(jìn)棧操作指令進(jìn)棧操作指令PUSH格式:格式:PUSH direct自動(dòng)進(jìn)行兩步操作:自動(dòng)進(jìn)行兩步操作:(1) SPSP + 1(2)(SP) ( direct )42例例1首先將首先將SP 中的值加中的值加1,然后把然后把SP 中的值當(dāng)作中的值當(dāng)作地址,將地址,將direct 中的值中的值送進(jìn)以送進(jìn)以SP 中的值為地中的值為地址的址的RAM 單元中。單元中。 MOV SP,#5FH ; MOV A,#100 ; MOV B,#2

32、0 ; PUSH ACC ; PUSH B ;堆棧操作指令中的操作堆棧操作指令中的操作數(shù)只能用直接尋址方式,數(shù)只能用直接尋址方式,所以將累加器壓入堆棧所以將累加器壓入堆棧時(shí),累加器時(shí),累加器(ACC)不能不能簡(jiǎn)寫簡(jiǎn)寫A。 出棧操作指令出棧操作指令POP格式:格式:POP direct自動(dòng)進(jìn)行兩步操作:自動(dòng)進(jìn)行兩步操作:(1)()( direct ) ( SP ) (2) SPSP - 143例例2、首先將SP 中的值作為地址,并將此地址中的數(shù)送到POP 指令后面的那個(gè)direct 中,然后SP 減1。 MOV SP,#5FH ; MOV A,#100 ; MOV B,#20 ; PUSH AC

33、C ; PUSH B ; POP B ; POP ACC ; 作用?作用?結(jié)論:結(jié)論:441)PUSH 與與 POP 操作過程剛好相反,成對(duì)出現(xiàn);操作過程剛好相反,成對(duì)出現(xiàn); 2)進(jìn)、出棧規(guī)則:進(jìn)、出棧規(guī)則: 先進(jìn)后出,后進(jìn)先出。應(yīng)注意指令書寫先后順序;先進(jìn)后出,后進(jìn)先出。應(yīng)注意指令書寫先后順序; 3)可用于可用于“保護(hù)現(xiàn)場(chǎng),恢復(fù)現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng),恢復(fù)現(xiàn)場(chǎng)”。 3、數(shù)據(jù)交換指令數(shù)據(jù)交換指令半字節(jié)交換半字節(jié)交換45 整字節(jié)交換整字節(jié)交換 XCHD A,Ri;高四位不變,第四位互換。;高四位不變,第四位互換。 SWAP A;累加器自身的高低四位互換。累加器自身的高低四位互換。將將A A的低的低4 4位

34、和位和R0R0或或R1R1指出的指出的RAMRAM單元低單元低4 4位相互交換,各自位相互交換,各自的高的高4 4位不變。源操作數(shù)只有寄存器間接尋址方式。位不變。源操作數(shù)只有寄存器間接尋址方式。二、二、 外部外部RAM數(shù)據(jù)傳送數(shù)據(jù)傳送46MOVX A,Ri;讀有效,輸入;讀有效,輸入MOVX A, DPTR;MOVX Ri, A;寫有效,輸出;寫有效,輸出MOVX DPTR,Au執(zhí)行過程中會(huì)使寫執(zhí)行過程中會(huì)使寫/WR、讀、讀/RD有效。有效。具體分析。具體分析。u間接尋址,間接尋址,8位或位或16位的地址指針位的地址指針 。u只能通過累加器傳送只能通過累加器傳送。舉例舉例47例例3、試編寫一程

35、序段,實(shí)現(xiàn)將外試編寫一程序段,實(shí)現(xiàn)將外RAM 0FAH單元中的單元中的內(nèi)容傳送到外內(nèi)容傳送到外RAM 04FFH單元中。單元中。解:解: MOV DPTR,#04FFH MOV R0,#0FAH MOVX A,R0 MOVX DPTR, A 三、與程序三、與程序ROM之間的數(shù)據(jù)傳送之間的數(shù)據(jù)傳送48p 執(zhí)行時(shí)會(huì)使執(zhí)行時(shí)會(huì)使/PSEN有效。有效。p MOVC 傳送傳送常數(shù)常數(shù)。p 以以DPTR 為基地址的指令,可在為基地址的指令,可在ROM 的的64KB范范圍內(nèi)查表;圍內(nèi)查表;p 而以而以PC為基地址的指令只能在(為基地址的指令只能在(PC)+ 1為中心為中心上、下上、下256B范圍內(nèi)查表。范圍

36、內(nèi)查表。p 只能通過累加器傳送只能通過累加器傳送。所謂的查表指令所謂的查表指令MOVC A,A+PC ;(;(PC)(PC)+1 ;(;(A)(A)+(PC)MOVC A,A+DPTR;(;(A)(A)+(DPTR)例:例:設(shè)(設(shè)(A)=30H,執(zhí)行指令:,執(zhí)行指令:MOVCA, A+PC;若本指令的存儲(chǔ)地址為;若本指令的存儲(chǔ)地址為1000H 結(jié)果結(jié)果? 將程序存儲(chǔ)器中將程序存儲(chǔ)器中1031H單元的內(nèi)容送入累加器單元的內(nèi)容送入累加器A 舉例舉例 例:設(shè)(例:設(shè)(DPTR)=8200H,(,(A)=30H,執(zhí)行指令:,執(zhí)行指令: MOVCA, A+DPTR結(jié)果結(jié)果? 將程序存儲(chǔ)器中將程序存儲(chǔ)器中

37、8230H單元的內(nèi)容送入累加器。單元的內(nèi)容送入累加器。 舉例舉例舉例舉例例例、設(shè)(、設(shè)(A)= 一個(gè)一個(gè)BCD碼常數(shù),試用查表法獲得其相應(yīng)的碼常數(shù),試用查表法獲得其相應(yīng)的ASCII碼。碼。51解法解法I: MOV DPTR,#TAB MOVC A,.A+DPTR TAB:DB 30H DB 31H DB 32H,33H,34H,35H 解法解法II: MOVC A,A+PC TAB: DB 30H,31H,32H,33H DB 34H,35H,36H,37H 4.4 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令4.4.1 加法指令加法指令4.4.2 帶進(jìn)位加法指令帶進(jìn)位加法指令4.4.3 加加1指令指令4.4.4

38、 帶借位減法指令和減帶借位減法指令和減1指令指令4.4.5 乘、除指令乘、除指令4.4.6 十進(jìn)制加法調(diào)整指令十進(jìn)制加法調(diào)整指令4.4.7 數(shù)據(jù)指針數(shù)據(jù)指針DPTR加加1指令指令524.4.1 加法指令加法指令53這些指令的意思就是把后面的值與這些指令的意思就是把后面的值與A 中的值相加,結(jié)果中的值相加,結(jié)果送到送到A 中去中去 加法類指令都是加法類指令都是以以A 為核心為核心的,其中一個(gè)數(shù)必須放在的,其中一個(gè)數(shù)必須放在A 中,而運(yùn)算結(jié)果也必須放在中,而運(yùn)算結(jié)果也必須放在A 中。中。4.4.2 帶進(jìn)位帶進(jìn)位加法指令加法指令54這些指令的作用都是將這些指令的作用都是將A 中的值和其后面的值相加,

39、中的值和其后面的值相加,并且加上并且加上進(jìn)位進(jìn)位位位CY 中的值。中的值。 例如例如 2 個(gè)個(gè)16 進(jìn)制數(shù)相加:進(jìn)制數(shù)相加:1367H+12A0H ,先做,先做67H+A0H=107H ,而,而107H 顯然超過了顯然超過了0FFH ,因此,因此最終保存在最終保存在A 中的是中的是7,而,而1 則進(jìn)到了則進(jìn)到了PSW 中的中的CY 位去了,換言之,位去了,換言之,CY 位就相當(dāng)于是位就相當(dāng)于是100H ,然后再,然后再做做12H+13H+CY ,結(jié)果是,結(jié)果是26H ,所以最終的結(jié)果是,所以最終的結(jié)果是2607H。 4.4.3 加加1指令指令55p指令說明指令說明:從結(jié)果上看:從結(jié)果上看INC

40、 A 和和ADD A,#1 差不多,差不多,但但I(xiàn)NC A 是單字節(jié)單周期指令是單字節(jié)單周期指令,而,而ADD A,#1 則是雙則是雙字節(jié)雙周期指令字節(jié)雙周期指令,而且,而且INC A 不會(huì)影響不會(huì)影響PSW 位(位(P位位除外)除外),如,如A=0FFH,INC A 后后A=00H ,而,而CY 依然保依然保持不變;如果是持不變;如果是ADD A ,#1,則,則A=00H ,而,而CY 一定一定是是“1”。因此加因此加1 指令并不適合做加法,事實(shí)上它主要指令并不適合做加法,事實(shí)上它主要是用來做計(jì)數(shù)、地址增加等用途。是用來做計(jì)數(shù)、地址增加等用途。 例:例:設(shè)(設(shè)(A)=0FFH,(,(R3)=

41、0FH,(,(30H)=0E2H,(,(R0)=40H,(,(40H)=0AAH,執(zhí)行指令:執(zhí)行指令: INCA INCR3 INC30H INCR0( A)=00H(R3)=10H(30H)=0E3H (40H)=0ABH4.4.4 帶借位減法指令帶借位減法指令和減和減1指令指令57p 指令說明指令說明:沒有沒有不帶借位不帶借位的減法指令的減法指令,如果需要做不,如果需要做不帶借位的減法指令(在做第一次相減時(shí)),只要先將帶借位的減法指令(在做第一次相減時(shí)),只要先將CY 清零清零即可。即可。 CLR C減減1指令指令58p指令說明指令說明:既然加:既然加1 指令可以用于計(jì)數(shù)、地址等加指令可以

42、用于計(jì)數(shù)、地址等加1,所以減所以減1 指令的功能與加指令的功能與加1 指令類似指令類似.(1)DEC A ;(2)DEC Rn ;例如:例如:R7=20H, DEC A; R7=19H (3)DEC direct; 例如:例如:30H=20H, DEC 30H; (30H)=19H (4)DEC Ri ;4.4.5 乘、除指令乘、除指令u乘、除指令乘、除指令(單字節(jié),四周期)(單字節(jié),四周期)p MUL AB ;AB=B(高(高8 位)位) A (低(低8 位)位)p DIV AB ;ABA(商)(商)B(余數(shù))(余數(shù))59 MUL乘法乘法指令說明指令說明:兩個(gè):兩個(gè)8 位無符號(hào)數(shù)相乘,結(jié)果位

43、無符號(hào)數(shù)相乘,結(jié)果16位位 ,在乘積大于在乘積大于FFH時(shí),時(shí),0V =“1”(溢出),否則(溢出),否則OV =“0”,而,而CY 位總是為位總是為“0”。 DIV除法指令說明除法指令說明: 通常通常CY 位和位和OV 位都是位都是“0”,但是但是如如果在做除法前果在做除法前B 中的值是中的值是00H,也就是除數(shù)為,也就是除數(shù)為0,那么,那么0V=1。 例:(A)=4EH,(B)=5DH;MUL AB ;乘積是1C56H 如13/5 ,其商是2,余數(shù)是3。除了以后,商2放在A 中,余數(shù)3放在B 中。 4.4.6 十進(jìn)制加法調(diào)整指令十進(jìn)制加法調(diào)整指令u十進(jìn)制加法調(diào)整指令十進(jìn)制加法調(diào)整指令p D

44、A A60p 是對(duì)壓縮的是對(duì)壓縮的BCD碼(一個(gè)字節(jié)存放碼(一個(gè)字節(jié)存放2位位BCD碼)的碼)的加加法結(jié)果法結(jié)果進(jìn)行進(jìn)行十進(jìn)制調(diào)整十進(jìn)制調(diào)整。p 兩個(gè)兩個(gè)BCD碼碼按二進(jìn)制相加按二進(jìn)制相加之后,必須經(jīng)本指令的之后,必須經(jīng)本指令的調(diào)整調(diào)整才能得到正確的結(jié)果(壓縮的才能得到正確的結(jié)果(壓縮的BCD碼的碼的和數(shù)和數(shù))。)。十進(jìn)制加法調(diào)整指令十進(jìn)制加法調(diào)整指令u十進(jìn)制加法調(diào)整指令十進(jìn)制加法調(diào)整指令p DA A61調(diào)整方法調(diào)整方法(加法時(shí)加法時(shí))p高低四位各一組高低四位各一組相加結(jié)果大于相加結(jié)果大于9(1001B,無效的無效的BCD),加),加6修正;修正;結(jié)果大于等于結(jié)果大于等于=16(進(jìn)位(進(jìn)位CY

45、或輔助進(jìn)位或輔助進(jìn)位AC),加),加6修正。修正。例如加法: 87 +35MOV A,#87HADD A,#35H;A=0bcHDA A ;例如:減法87-35?87+(100-35)計(jì)算計(jì)算87H+(9AH-35H)再調(diào)整再調(diào)整4.4.7 數(shù)據(jù)指針數(shù)據(jù)指針DPTR加加1指令指令u數(shù)據(jù)指針加數(shù)據(jù)指針加1指令指令p INC DPTR ; DPTRDPTR+162注意:沒有相應(yīng)的減1指令。在算術(shù)運(yùn)算類指令中,除了加在算術(shù)運(yùn)算類指令中,除了加1 和減和減1 指令外,指令外,其他的算術(shù)運(yùn)算類指令都要把結(jié)果放到累加器其他的算術(shù)運(yùn)算類指令都要把結(jié)果放到累加器A 中,這與數(shù)據(jù)傳遞類指令有所不同。中,這與數(shù)據(jù)

46、傳遞類指令有所不同。 4.5 邏輯運(yùn)算及移位指令邏輯運(yùn)算及移位指令4.5.1 邏輯與運(yùn)算指令邏輯與運(yùn)算指令4.5.2 邏輯或運(yùn)算指令邏輯或運(yùn)算指令4.5.3 邏輯異或運(yùn)算指令邏輯異或運(yùn)算指令4.5.4 累加器清零及取反指令累加器清零及取反指令4.4.5 循環(huán)循環(huán)移位指令移位指令63邏輯運(yùn)算指令邏輯運(yùn)算指令64主要用于對(duì)主要用于對(duì)2 2個(gè)操作數(shù)按個(gè)操作數(shù)按位進(jìn)行邏輯位進(jìn)行邏輯操作,結(jié)果送到操作,結(jié)果送到ACC或或直接尋址直接尋址單元。單元。v 主要操作主要操作 與、與、或或、異或、異或、取反取反、清零等。、清零等。v 對(duì)標(biāo)志位的影響對(duì)標(biāo)志位的影響 除了目的操作數(shù)為除了目的操作數(shù)為ACCACC的指

47、令影響的指令影響奇偶標(biāo)志奇偶標(biāo)志P P外,外,一般不影響標(biāo)志位。一般不影響標(biāo)志位。4.5.1 邏輯邏輯“與與”運(yùn)算指令運(yùn)算指令65某一位和某一位和0邏輯邏輯 與與結(jié)果為結(jié)果為0;和;和1邏輯邏輯 與與結(jié)果不變。結(jié)果不變。p“指定位清零指定位清零”p邏輯或邏輯或ORL、邏輯異或邏輯異或 XRL的的尋址方式尋址方式與此相同與此相同。后兩條指令,后兩條指令,若若直接地址為直接地址為I/O端口端口,則為,則為“讀修改讀修改-寫寫”操作。操作。例例1解解: ANL P1,#0FH“位屏蔽位屏蔽”: 從包含多個(gè)位集的一個(gè)或一從包含多個(gè)位集的一個(gè)或一組字節(jié)中選出制定的一(些)位組字節(jié)中選出制定的一(些)位6

48、6P1= 35H, 使其高使其高4位輸出位輸出0,低,低4位不變。位不變。4.5.2 邏輯邏輯“或或”運(yùn)算指令運(yùn)算指令67按位依次進(jìn)行邏輯運(yùn)算。按位依次進(jìn)行邏輯運(yùn)算。 某一位和某一位和1邏輯邏輯 或或結(jié)果為結(jié)果為1;和;和0邏輯邏輯 或或結(jié)果不變。結(jié)果不變。p“指定位置指定位置1”后兩條指令,若直接地址為后兩條指令,若直接地址為I/O端口,則為端口,則為“讀修改讀修改-寫寫”操作。操作。例例2將將A中的低中的低3位送入位送入P1中,并且保持中,并且保持P1中高中高5位不變。位不變。68ANL A,#07HANL P1,#0F8HORL P1,A ;(;(P1)= P17P16P15P14P13

49、A2A1A0這稱為這稱為“數(shù)位組合數(shù)位組合”。 4.5.3 邏輯邏輯“異或異或”運(yùn)算指令運(yùn)算指令69按位依次進(jìn)行邏輯運(yùn)算。按位依次進(jìn)行邏輯運(yùn)算。某一位和某一位和1邏輯異或邏輯異或結(jié)果為取反;和結(jié)果為取反;和0邏輯異或邏輯異或結(jié)果不變。結(jié)果不變。p“指定位取反指定位取反”后兩條指令,若直接地址為后兩條指令,若直接地址為I/O端口,則為端口,則為“讀修改讀修改-寫寫”操作。操作。4.5.4 累加器清零及取反指令累加器清零及取反指令70指令說明:指令說明:CLR A,累加器累加器A 清零清零。效果同。效果同MOV A,#00H 是一樣的,只不過它是單字節(jié)指令,而是一樣的,只不過它是單字節(jié)指令,而MO

50、V A,#00H 是雙字節(jié)指令。是雙字節(jié)指令。 指令說明:指令說明: CPL A 將累加器將累加器A 逐位取反逐位取反。相當(dāng)于數(shù)字相當(dāng)于數(shù)字電路的電路的“非非”邏輯,例如:邏輯,例如:A=12H, CPL A ;12H 化化為二進(jìn)制是為二進(jìn)制是00010010,邏輯取反后為,邏輯取反后為11101101,即,即A=0EDH。4.4.5 循環(huán)循環(huán)移位指令移位指令71全部是全部是累加器累加器A循環(huán)移位循環(huán)移位,移位后信息沒有丟失。,移位后信息沒有丟失。p移位位數(shù):移位位數(shù):1 位。位。C循環(huán)移位指令循環(huán)移位指令72A.0A.7A.0A.7A.0A.7A.0A.7CYCYC16位數(shù)的算術(shù)左移,位數(shù)的

51、算術(shù)左移,16位數(shù)在內(nèi)存中存放在位數(shù)在內(nèi)存中存放在M1和和M1+1單元,低單元,低8位先存。位先存。CLR CMOV R1,#M1MOV A,R1RLC AMOV R1,AINC R1MOV A,R1RLC AMOV R1,A7316位循環(huán)移位的實(shí)現(xiàn)方法?位循環(huán)移位的實(shí)現(xiàn)方法?;進(jìn)位進(jìn)位Cy=0;操作數(shù)地址送操作數(shù)地址送R1;低低8位送位送A;低低8位左移,最低位添位左移,最低位添0,Cy A7;送回送回;指向高指向高8位位;高高8位送位送A;A7移入,高移入,高8位左移位左移; 送回送回4.6 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令控制轉(zhuǎn)移類指令共有控制轉(zhuǎn)移類指令共有17 條條轉(zhuǎn)移指令分為三大類轉(zhuǎn)移指令分

52、為三大類 無條件轉(zhuǎn)移指令、無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令調(diào)用及返回指令調(diào)用及返回指令空操作指令空操作指令NOP74作用:作用:改變程序計(jì)數(shù)器改變程序計(jì)數(shù)器PC的值,從而改變程序執(zhí)行方向,的值,從而改變程序執(zhí)行方向,轉(zhuǎn)向指令設(shè)定的目標(biāo)地址。轉(zhuǎn)向指令設(shè)定的目標(biāo)地址。4.6.1無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令75AJMP L2L0:MOV A,#15HL2:MOV R1,#3AH(絕對(duì)絕對(duì))長(zhǎng)轉(zhuǎn)移指令長(zhǎng)轉(zhuǎn)移指令LJMP addr16;PC addr16絕對(duì)轉(zhuǎn)移指令絕對(duì)轉(zhuǎn)移指令A(yù)JMP addr11;PC100 addr11(相對(duì))短轉(zhuǎn)移指令(相對(duì))短轉(zhuǎn)移指令SJMP rel;PC 源地址源地址

53、+2+rel變址方式的轉(zhuǎn)移指令變址方式的轉(zhuǎn)移指令JMP A + DPTR;前三個(gè):在助記符中可用前三個(gè):在助記符中可用標(biāo)號(hào)標(biāo)號(hào)(符號(hào)地址符號(hào)地址)來表示。來表示。例如例如LJMP L1MOV A,#12HL1:MOV R1,#3AHp目標(biāo)地址目標(biāo)地址L2與與下一條指令的地下一條指令的地址址L0在同一個(gè)在同一個(gè)2K 空間空間pL1為為64K的全部空間。的全部空間。(相對(duì))短轉(zhuǎn)移指令、(相對(duì))短轉(zhuǎn)移指令、散轉(zhuǎn)指令散轉(zhuǎn)指令76(絕對(duì)絕對(duì))長(zhǎng)轉(zhuǎn)移指令長(zhǎng)轉(zhuǎn)移指令LJMP addr16;PC addr16絕對(duì)轉(zhuǎn)移指令絕對(duì)轉(zhuǎn)移指令A(yù)JMP addr11;PC100 addr11(相對(duì))短轉(zhuǎn)移指令(相對(duì))短轉(zhuǎn)

54、移指令SJMP rel;PC 源地址源地址+2+rel變址方式的轉(zhuǎn)移指令變址方式的轉(zhuǎn)移指令JMP A + DPTR;Rel為為8位有符號(hào)數(shù)。(位有符號(hào)數(shù)。(-128+127)Rel = L3 - L0SJMP L3L0:MOV A,#12HL3:MOV R1,#3AH匯編時(shí)會(huì)自動(dòng)計(jì)算匯編時(shí)會(huì)自動(dòng)計(jì)算rel。前三個(gè):在助記符中可用前三個(gè):在助記符中可用目標(biāo)地址(目標(biāo)地址(標(biāo)號(hào)標(biāo)號(hào))來表示。來表示。例如例如JMP A + DPTR;間接轉(zhuǎn)移,間接轉(zhuǎn)移,所謂的所謂的“散轉(zhuǎn)指令散轉(zhuǎn)指令”,常用于常用于多多分支程序結(jié)構(gòu)分支程序結(jié)構(gòu)中,可在程序運(yùn)行過程中動(dòng)態(tài)地決定程序分支走向。中,可在程序運(yùn)行過程中動(dòng)態(tài)地

55、決定程序分支走向。 4.6.2 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令77p 基本規(guī)則:基本規(guī)則:條件成立時(shí)條件成立時(shí)則轉(zhuǎn)移到則轉(zhuǎn)移到目標(biāo)地址目標(biāo)地址, 條件條件不成立時(shí)不成立時(shí)順序執(zhí)行下一條指令。順序執(zhí)行下一條指令。p 屬于屬于相對(duì)尋址相對(duì)尋址。p條件轉(zhuǎn)移指令在執(zhí)行過程中需要判斷某種條件是否滿條件轉(zhuǎn)移指令在執(zhí)行過程中需要判斷某種條件是否滿足,從而決定要不要轉(zhuǎn)移。足,從而決定要不要轉(zhuǎn)移。 轉(zhuǎn)移目的地址轉(zhuǎn)移目的地址在以下一條指令地址為中心的在以下一條指令地址為中心的256B范圍范圍內(nèi)(內(nèi)(-128+127)。)。條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令的條件的條件78實(shí)現(xiàn)按照一定條件決定轉(zhuǎn)移的方向?qū)崿F(xiàn)按照一定條件決定轉(zhuǎn)移的方

56、向,分三類分三類:累加器累加器A判零條件轉(zhuǎn)移指令判零條件轉(zhuǎn)移指令比較條件轉(zhuǎn)移指令比較條件轉(zhuǎn)移指令循環(huán)轉(zhuǎn)移指令(減循環(huán)轉(zhuǎn)移指令(減1條件轉(zhuǎn)移指令)條件轉(zhuǎn)移指令) p 基本規(guī)則:基本規(guī)則:條件成立條件成立則轉(zhuǎn)移到則轉(zhuǎn)移到目標(biāo)地址目標(biāo)地址, 條件條件不成立不成立順序執(zhí)行下一條指令。順序執(zhí)行下一條指令。l條件轉(zhuǎn)移的條件條件轉(zhuǎn)移的條件可以是上一條指令或者更前一條指令可以是上一條指令或者更前一條指令的執(zhí)行結(jié)果(常體現(xiàn)在標(biāo)志位上),也可以是條件轉(zhuǎn)移的執(zhí)行結(jié)果(常體現(xiàn)在標(biāo)志位上),也可以是條件轉(zhuǎn)移指令本身包含的某種運(yùn)算結(jié)果指令本身包含的某種運(yùn)算結(jié)果。(1)累加器累加器A判判0條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令79p 執(zhí)

57、行指令時(shí),如執(zhí)行指令時(shí),如條件滿足條件滿足,則轉(zhuǎn)移;不滿足,則順序執(zhí),則轉(zhuǎn)移;不滿足,則順序執(zhí)行下一指令。行下一指令。p 轉(zhuǎn)移目的地址轉(zhuǎn)移目的地址在以下一條指令首地址為中心的在以下一條指令首地址為中心的256B范范圍內(nèi)(圍內(nèi)(-128+127)。)。JZ rel;如果如果A=0,則轉(zhuǎn)移,否則順序執(zhí)行。,則轉(zhuǎn)移,否則順序執(zhí)行。JNZ rel;如果如果A0,就轉(zhuǎn)移,否則順序執(zhí)行。,就轉(zhuǎn)移,否則順序執(zhí)行。 匯編語言書寫指令時(shí),匯編語言書寫指令時(shí),rel可采用目標(biāo)地址的標(biāo)號(hào)??刹捎媚繕?biāo)地址的標(biāo)號(hào)。 例如:例如:JZ 標(biāo)號(hào)標(biāo)號(hào) ;(2)比較比較條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令

58、80CJNEA,#data,relCJNE Rn,#data,relCJNE Ri,#data,relCJNEA,direct,relp比較前兩個(gè)操作數(shù)大小,如果值比較前兩個(gè)操作數(shù)大小,如果值不相等則轉(zhuǎn)移不相等則轉(zhuǎn)移,并轉(zhuǎn)向,并轉(zhuǎn)向目的地址;否則順序執(zhí)行。目的地址;否則順序執(zhí)行。p如果第一操作數(shù)(無符號(hào)整數(shù))小于第二操作數(shù)如果第一操作數(shù)(無符號(hào)整數(shù))小于第二操作數(shù)(無符(無符號(hào)整數(shù)),則進(jìn)位標(biāo)志位號(hào)整數(shù)),則進(jìn)位標(biāo)志位Cy置置1,否則,否則Cy清清0。該指令的。該指令的執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。匯編語言書寫指令匯編語言書寫指令時(shí),時(shí),rel可采用目標(biāo)可采用

59、目標(biāo)地址的標(biāo)號(hào)。地址的標(biāo)號(hào)。只有:只有:比較不相等轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令81p利用這些指令,可以判斷兩數(shù)是否利用這些指令,可以判斷兩數(shù)是否相等相等。p但有時(shí)還想得知兩數(shù)比較之后但有時(shí)還想得知兩數(shù)比較之后哪個(gè)大,哪個(gè)小哪個(gè)大,哪個(gè)小,本條,本條指令也具有這樣的功能:指令也具有這樣的功能:如果兩數(shù)不相等,則如果兩數(shù)不相等,則CPUCPU還會(huì)用還會(huì)用CYCY(進(jìn)位位)來反映哪(進(jìn)位位)來反映哪個(gè)數(shù)大,哪個(gè)數(shù)小。個(gè)數(shù)大,哪個(gè)數(shù)小。如果前面的數(shù)大,則如果前面的數(shù)大,則CY=0CY=0,否則,否則CY=1CY=1。因此在程序轉(zhuǎn)移后再次利用因此在程序轉(zhuǎn)移后再次利用CYCY就可判斷出哪個(gè)數(shù)大,就可判斷出哪

60、個(gè)數(shù)大,哪個(gè)數(shù)小了。哪個(gè)數(shù)小了。數(shù)據(jù)大小的比較數(shù)據(jù)大小的比較82p利用這些指令,可以判斷兩數(shù)是否利用這些指令,可以判斷兩數(shù)是否相等相等。還可以進(jìn)一。還可以進(jìn)一步比較兩個(gè)數(shù)步比較兩個(gè)數(shù)哪個(gè)大,哪個(gè)小哪個(gè)大,哪個(gè)小。(3)循環(huán)轉(zhuǎn)移指令(循環(huán)轉(zhuǎn)移指令(減減1不為不為0轉(zhuǎn)移指令轉(zhuǎn)移指令)把減把減1與條件轉(zhuǎn)移兩種功能合在一起。與條件轉(zhuǎn)移兩種功能合在一起。兩條:兩條:83DJNZ Rn, relDJNZ direct,relp執(zhí)行過程是這樣的執(zhí)行過程是這樣的: 它將它將Rn或或 direct中的值中的值減減1,然后看這個(gè)值是否等,然后看這個(gè)值是否等于于0,如果,如果等于等于0,就往下執(zhí)行,如果,就往下執(zhí)行

溫馨提示

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

評(píng)論

0/150

提交評(píng)論