單片機(jī)匯編程序設(shè)計ppt課件_第1頁
單片機(jī)匯編程序設(shè)計ppt課件_第2頁
單片機(jī)匯編程序設(shè)計ppt課件_第3頁
單片機(jī)匯編程序設(shè)計ppt課件_第4頁
單片機(jī)匯編程序設(shè)計ppt課件_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.1 MCS-51系列單片機(jī)匯編指令格式及標(biāo)識系列單片機(jī)匯編指令格式及標(biāo)識 MCS-51系列單片機(jī)指令系統(tǒng)功能強(qiáng)、指令短、執(zhí)行快。從功能上可分成五大類:數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、邏輯操作指令、控制轉(zhuǎn)移指令和位操作指令。3.1.1 指令格式指令格式標(biāo)號:標(biāo)號: 操作碼助記符操作碼助記符 目的操作數(shù)目的操作數(shù),源操作數(shù),源操作數(shù) ;注釋;注釋1操作碼助記符闡明指令的功能,不同的指令有不同的指令助記符,它普通用闡明其功能的英文單詞的縮寫方式表示。 2操作數(shù)用于給指令的操作提供數(shù)據(jù)、數(shù)據(jù)的地址或指令的地址,操作數(shù)往往用相應(yīng)的尋址方式指明。3標(biāo)號是

2、該指令的符號地址,后面須帶冒號。4注釋是對該指令的解釋,前面須帶分號。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.1.2 指令中用到的標(biāo)識符指令中用到的標(biāo)識符為便于后面的學(xué)習(xí),在這里先對指令中用到的一些符號的商定意義作以闡明:1Ri和Rn:表示當(dāng)前任務(wù)存放器區(qū)中的任務(wù)存放器,i取0或1,表示R0或R1。n取07,表示R0R7。2#data:表示包含在指令中的8位立刻數(shù)。3#data16:表示包含在指令中的16位立刻數(shù)。 4rel:以補(bǔ)碼方式表示的8位相對偏移量,范圍為-128127,主要用在相對尋址的指令中。5addr16和addr11:分別表示16位直接地址和11位直接地址。6d

3、irect:表示直接尋址的地址。7bit:表示可位尋址的直接位地址。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計8X:表示X單元中的內(nèi)容。9X:表示以X單元的內(nèi)容為地址的存儲器單元內(nèi)容,即X作地址,該地址單元的內(nèi)容用X表示。10/ 和符號:“/表示對該位操作數(shù)取反,但不影響該位的原值?!氨硎静僮髁鞒?,將箭尾一方的內(nèi)容送入箭頭所指一方的單元中去。 第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.2 MCS-51系列單片機(jī)尋址方式系列單片機(jī)尋址方式 MCS-51單片機(jī)的尋址方式按操作數(shù)的類型,可分為數(shù)的尋址和指令尋址,數(shù)的尋址有:常數(shù)尋址立刻尋址、存放器數(shù)尋址存放器尋址、存儲器數(shù)尋

4、址直接尋址方式、存放器間接尋址方式、變址尋址方式和位尋址,指令的尋址有絕對尋址和相對尋址, 3.2.1 常數(shù)尋址立刻尋址常數(shù)尋址立刻尋址操作數(shù)是常數(shù),常數(shù)又稱為立刻數(shù),運(yùn)用時直接出如今指令中,緊跟在操作碼的后面,作為指令的一部分。在匯編指令中,立刻數(shù)前面以“#符號作前綴。在程序中通常用于給存放器或存儲器單元賦初值,例如:MOV A,#20H其功能是把立刻數(shù)20H送給累加器A,其中源操作數(shù)20H就是立刻數(shù)。指令執(zhí)行后累加器A中的內(nèi)容為20H。 第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.2.2 存放器數(shù)尋址存放器尋址存放器數(shù)尋址存放器尋址操作數(shù)在存放器中,運(yùn)用時在指令中直接提供存放器

5、的稱號,這種尋址方式稱為存放器尋址。在MCS-51系統(tǒng)中,這種尋址方式針對的存放器只能是R0R7 8個通用存放器和部分特殊功能存放器如累加器A、存放器B、數(shù)據(jù)指針DPTR等中的數(shù)據(jù),對于其它的特殊功能存放器中的內(nèi)容的尋址方式不屬于它。在匯編指令中,存放器尋址在指令中直接提供存放器的稱號,如R0、R1、A、DPTR等。例如:MOV A,R0其功能是把R0存放器中的數(shù)送給累加器A,在指令中,源操作數(shù)R0為存放器尋址,傳送的對象為R0中的數(shù)據(jù)。如指令執(zhí)行前R0中的內(nèi)容為20H,那么指令執(zhí)行后累加器A中的內(nèi)容為20H。 3.2.3 存儲器數(shù)尋址存儲器數(shù)尋址 存儲器數(shù)尋址針對的數(shù)據(jù)是存放在存儲器單元中,

6、對于存儲器單元的內(nèi)容經(jīng)過提供存儲器單元地址運(yùn)用。根據(jù)存儲器單元地址的提供方式,存儲器數(shù)的尋址方式有:直接尋址、存放器間接尋址、變址尋址。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計一直接尋址一直接尋址直接尋址是指數(shù)據(jù)在存儲器單元中,在指令中直接提供存儲器單元的地址。在MCS-51系統(tǒng)中,這種尋址方式針對的是片內(nèi)數(shù)據(jù)存儲器和特殊功能存放器。在匯編指令中,指令中直接以地址數(shù)的方式提供存儲器單元的地址。例如:MOV A,20H其功能是把片內(nèi)數(shù)據(jù)存儲器20H單元的內(nèi)容送給累加器A。如指令執(zhí)行前片內(nèi)數(shù)據(jù)存儲器20H單元的內(nèi)容為30H,那么指令執(zhí)行后累加器A的內(nèi)容為30H。指令中20H是地址數(shù),它

7、是片內(nèi)數(shù)據(jù)存儲單元的地址。在MCS-51中,數(shù)據(jù)前面不加“#是存儲單元地址而不是常數(shù),常數(shù)前面要加符號“#。對于特殊功能存放器,在指令中運(yùn)用時往往經(jīng)過特殊功能存放器的稱號運(yùn)用,而特殊功能存放器稱號實(shí)踐上是特殊功能存放器單元的符號地址,因此它們是直接尋址。例如:MOV A,P0其功能是把P0口的內(nèi)容送給累加器A。P0是特殊功能存放器P0口的符號地址,該指令在翻譯成機(jī)器碼時,P0就轉(zhuǎn)換成直接地址80H。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計二存放器間接尋址二存放器間接尋址存放器間接尋址是指數(shù)據(jù)存放在存儲單元中,而存儲單元地址存放在存放器中,在指令中經(jīng)過提供存放存儲單元地址的存放器來運(yùn)

8、用對應(yīng)的存儲單元。方式為:存放器名。例如:MOV A,R1該指令的功能是將以任務(wù)存放器R1中的內(nèi)容為地址的片內(nèi)RAM單元的數(shù)據(jù)傳送到累加器A中去。指令的源操作數(shù)是存放器間接尋址。假設(shè)R1中的內(nèi)容為80H,片內(nèi)RAM地址為80H的單元中的內(nèi)容為20H,那么執(zhí)行該指令后,累加器A的內(nèi)容為20H。存放器間接尋址表示圖如以下圖。80H20H20HA80HR1第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計 在MCS-51單片機(jī)中,存放器間接尋址用到的存放器只能是通用存放器R0、R1和數(shù)據(jù)指針存放器DPTR,它能訪問的數(shù)據(jù)是片內(nèi)數(shù)據(jù)存儲器和片外數(shù)據(jù)存儲器。其中,片內(nèi)數(shù)據(jù)存儲器只能用R0和R1作指針間

9、接訪問;片外數(shù)據(jù)存儲器,低端的256字節(jié)單元,既可以用兩位十六進(jìn)制地址以R0或R1作指針間接訪問,也可用四位十六進(jìn)制地址以DPTR作指針間接訪問,而高端的字節(jié)單元那么只能以DPTR作指針間接訪問。對于片內(nèi)RAM和片外RAM的低端256字節(jié)都可以用R0和R1作指針訪問,它們之間用指令來區(qū)別。片內(nèi)RAM訪問用MOV指令,片外RAM訪問用MOVX指令。 三變址尋址三變址尋址 變址尋址是指操作數(shù)的地址由基址存放器的地址加上變址存放器的地址得到。在MCS-51系統(tǒng)中,它是以數(shù)據(jù)指針存放器DPTR或程序計數(shù)器PC為基址,累加器A為變址,兩者相加得存儲單元的地址,所訪問的存儲器為程序存儲器。 第第3 3章章

10、 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計例如:MOVC A,A+DPTR其功能是將數(shù)據(jù)指針存放器DPTR的內(nèi)容和累加器A中的內(nèi)容相加作為程序存儲器的地址,從對應(yīng)的單元中取出內(nèi)容送累加器A中。指令中,源操作數(shù)的尋址方式為變址尋址,設(shè)指令執(zhí)行前數(shù)據(jù)指針存放器DPTR的值為2000H,累加器A的值為05H,程序存儲器2005H單元的內(nèi)容為30H,那么指令執(zhí)行后,累加器A中的內(nèi)容為30H。表示圖如以下圖。2000H30H30HDPTRA2005H05HA+第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.2.4 位尋址位尋址位尋址是指操作數(shù)是二進(jìn)制位的尋址方式。在MCS-51單片機(jī)中有一個獨(dú)立的位

11、處置器,有多條位處置指令,可以進(jìn)展各種位運(yùn)算。在MCS-51系統(tǒng)中,位處置的操作對象是各種可位尋址位。對于它們的訪問是經(jīng)過提供相應(yīng)的位地址來處置。在MCS-51系統(tǒng)中,位地址的表示可以用以下幾種方式:1直接位地址00H0FFH。例如:20H2字節(jié)地址帶位號。例如:20H.3表示20H單元的3位。3特殊功能存放器名帶位號。例如:P0.1表示P0口的1位。4位符號地址。例如:TR0是定時/計數(shù)器T0的啟動位。3.2.5 指令尋址指令尋址一絕對尋址一絕對尋址絕對尋址是在指令的操作數(shù)中直接提供目的位置的地址或地址的一部份。在MCS-51系統(tǒng)中,長轉(zhuǎn)移和長調(diào)用提供目的位置的16位地址,絕對轉(zhuǎn)移和絕對調(diào)用

12、提供目的位置的16位地址的低11位,它們都為絕對尋址。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計二相對尋址二相對尋址相對尋址是以當(dāng)前程序計數(shù)器PC值加上指令中給出的偏移量rel得到目的位置的地址。在MCS-51系統(tǒng)中,相對轉(zhuǎn)移指令的操作數(shù)屬于相對尋址。在運(yùn)用相對尋址時要留意以下兩點(diǎn):1當(dāng)前PC值是指轉(zhuǎn)移指令執(zhí)行時的PC值,它等于轉(zhuǎn)移指令的地址加上轉(zhuǎn)移指令的字節(jié)數(shù)。實(shí)踐上是轉(zhuǎn)移指令的下一條指令的地址。例如:假設(shè)轉(zhuǎn)移指令的地址為2020H,轉(zhuǎn)移指令的長度為2字節(jié),那么轉(zhuǎn)移指令執(zhí)行時的PC值為2021H。2偏移量rel是8位有符號數(shù),以補(bǔ)碼表示,它的取值范圍為-128+127。當(dāng)為負(fù)值時,

13、向前轉(zhuǎn)移,當(dāng)為正數(shù)時向后轉(zhuǎn)移。相對尋址的目的地址為:目的地址=當(dāng)前PC+rel=轉(zhuǎn)移指令的地址+轉(zhuǎn)移指令的字節(jié)數(shù)+rel第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.3 MCS-51系列單片機(jī)指令系統(tǒng)系列單片機(jī)指令系統(tǒng)3.3.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令有29條,是指令系統(tǒng)中數(shù)量最多、運(yùn)用也最頻繁的一類指令。這類指令可分為三組:普通傳送指令、數(shù)據(jù)交換指令、堆棧操作指令。一普通傳送指令一普通傳送指令 普通傳送指令以助記符普通傳送指令以助記符MOV為根底。分成片內(nèi)數(shù)據(jù)存儲器傳為根底。分成片內(nèi)數(shù)據(jù)存儲器傳送指令、片外數(shù)據(jù)存儲器傳送指令和程序存儲器傳送指令。送指令、片外數(shù)據(jù)存儲器

14、傳送指令和程序存儲器傳送指令。1片內(nèi)數(shù)據(jù)存儲器傳送指令片內(nèi)數(shù)據(jù)存儲器傳送指令MOV指令格式:指令格式:MOV 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)其中:源操作數(shù)可以為其中:源操作數(shù)可以為A、Rn、Ri、direct、#data,目的操作,目的操作數(shù)可以為數(shù)可以為A、Rn、Ri、direct,組合起來總共,組合起來總共16條,按目的操作條,按目的操作數(shù)的尋址方式劃分為五組:數(shù)的尋址方式劃分為五組:第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計1以A為目的操作數(shù)MOV A,Rn;A RnMOV A,direct ;AdirectMOV A,Ri ;ARiMOV A,#data ;A #d

15、ata2以Rn為目的操作數(shù)MOV Rn,A;Rn AMOV Rn,direct;Rn directMOV Rn,#data;Rn #data3以直接地址direct為目的操作數(shù)MOV direct,A ;direct AMOV direct,Rn;direct RnMOV direct,direct;direct directMOV direct,Ri;direct RiMOV direct,#data;direct #data4以間接地址Ri為目的操作數(shù)MOV Ri,A ;Ri AMOV Ri,direct;Ri directMOV Ri,#data;Ri #data5以DPTR為目的操作數(shù)

16、MOV DPTR,#data16 ;DPTR #data16第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計留意,源操作數(shù)和目的操作數(shù)中的Rn和Ri不能相互配對。如不允許有“MOV Rn,Rn,“MOV Ri,Rn這樣的指令,在MOV指令中,不允許在一條指令中同時出現(xiàn)任務(wù)存放器,無論它是存放器尋址還是存放器間接尋址。 2片外數(shù)據(jù)存儲器傳送指令片外數(shù)據(jù)存儲器傳送指令MOVX 在在MCS-51系統(tǒng)中只能經(jīng)過累加器系統(tǒng)中只能經(jīng)過累加器A與片外數(shù)據(jù)存儲器進(jìn)展數(shù)據(jù)傳與片外數(shù)據(jù)存儲器進(jìn)展數(shù)據(jù)傳送,訪問時,只能經(jīng)過送,訪問時,只能經(jīng)過Ri和和DPTR以間接尋址方式進(jìn)展。以間接尋址方式進(jìn)展。MOVX指指令

17、共有四條:令共有四條:MOVX A,DPTR;A DPTRMOVX DPTR,A;DPTR AMOVX A,Ri;A RiMOVX Ri,A;Ri A 其中前兩條指令經(jīng)過其中前兩條指令經(jīng)過DPTR間接尋址,可以對整個間接尋址,可以對整個64K片外數(shù)據(jù)存片外數(shù)據(jù)存儲器訪問。后兩條指令經(jīng)過儲器訪問。后兩條指令經(jīng)過Ri間接尋址,只能對片外數(shù)據(jù)存儲器的低間接尋址,只能對片外數(shù)據(jù)存儲器的低端的端的256字節(jié)訪問,訪問時將低字節(jié)訪問,訪問時將低8位地址放于位地址放于Ri中。中。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3程序存儲器傳送指令程序存儲器傳送指令MOVC 程序存儲器傳送指令只需兩條,一

18、條用程序存儲器傳送指令只需兩條,一條用DPTR基址變址尋址。一基址變址尋址。一條用條用PC基址變址尋址。基址變址尋址。MOVC A,A+DPTR ;A A+DPTRMOVC A,A+PC;A A+PC這兩條指令通常用于訪問表格數(shù)據(jù),因此以稱為查表指令。這兩條指令通常用于訪問表格數(shù)據(jù),因此以稱為查表指令。 例如:查表指令MOVC A,A+PC所在的地址為2000H,表格的起始單元地址為2035H,表格的第4個元素位移量為03H的內(nèi)容為45H,那么查表指令的處置過程如下: MOV A,#03H ;表格元素相對于表首的位移量送累加器A ADD A,#34H ;當(dāng)前程序計數(shù)器PC相對于表首的差值加到累

19、加器A中 MOVC A,A+PC ;查表,查得第4個元素內(nèi)容45H送累加器A 留意:查表指令的長度為1個字節(jié),當(dāng)前程序計數(shù)器PC的值應(yīng)為查表指令的地址加1。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計【例【例3-1】寫出完成以下功能的程序段?!繉懗鐾瓿梢韵鹿δ艿某绦蚨?。1將將R0的內(nèi)容送的內(nèi)容送R6中中程序?yàn)椋撼绦驗(yàn)椋篗OV A,R0MOV R6,A2將片內(nèi)將片內(nèi)RAM 30H單元的內(nèi)容送片外單元的內(nèi)容送片外60H單元中單元中程序?yàn)椋撼绦驗(yàn)椋篗OV A,30HMOV R0,#60HMOVX R0,A3將片處將片處RAM 1000H單元的內(nèi)容送片內(nèi)單元的內(nèi)容送片內(nèi)20H單元中單元中程序?yàn)?/p>

20、:程序?yàn)椋篗OV DPTR,#1000HMOV A,DPTRMOV 20H,A4將將ROM 2000H單元的內(nèi)容送片內(nèi)單元的內(nèi)容送片內(nèi)RAM的的30H單元中單元中程序?yàn)椋撼绦驗(yàn)椋篗OV A,#0MOV DPTR,#2000HMOVC A,A+DPTRMOV 30H,A第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計二數(shù)據(jù)交換指令二數(shù)據(jù)交換指令 普通傳送指令實(shí)現(xiàn)將源操作數(shù)的數(shù)據(jù)傳送到目的操作數(shù),指普通傳送指令實(shí)現(xiàn)將源操作數(shù)的數(shù)據(jù)傳送到目的操作數(shù),指令執(zhí)行后源操作數(shù)不變,數(shù)據(jù)傳送是單向的。數(shù)據(jù)交換指令數(shù)據(jù)作令執(zhí)行后源操作數(shù)不變,數(shù)據(jù)傳送是單向的。數(shù)據(jù)交換指令數(shù)據(jù)作雙向傳送,傳送后,前一個操作數(shù)

21、原來的內(nèi)容傳送到后一個操作數(shù)雙向傳送,傳送后,前一個操作數(shù)原來的內(nèi)容傳送到后一個操作數(shù)中,后一個操作數(shù)原來的內(nèi)容傳送到前一個操作數(shù)中。中,后一個操作數(shù)原來的內(nèi)容傳送到前一個操作數(shù)中。 數(shù)據(jù)交換指令要求第一個操作數(shù)須為累加器數(shù)據(jù)交換指令要求第一個操作數(shù)須為累加器A,共有,共有5條。條。XCH A,Rn;A RnXCH A ,direct;AdirectXCH A,Ri;ARiXCHD A,Ri;A03Ri03SWAP A;A03A47【例【例3-2】假設(shè)】假設(shè)R0的內(nèi)容為的內(nèi)容為30H,片內(nèi),片內(nèi)RAM 30H單元的內(nèi)容為單元的內(nèi)容為23H,累加器累加器A的內(nèi)容為的內(nèi)容為45H,那么執(zhí)行,那么執(zhí)

22、行XCH A,R0指令后片內(nèi)指令后片內(nèi)RAM 30H單元的內(nèi)容為單元的內(nèi)容為45H,累加器,累加器A中的內(nèi)容為中的內(nèi)容為23H。假設(shè)執(zhí)行假設(shè)執(zhí)行SWAP A指令,那么累加器指令,那么累加器A的內(nèi)容為的內(nèi)容為54H。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計三堆棧操作指令三堆棧操作指令 堆棧是在片內(nèi)堆棧是在片內(nèi)RAM中按中按“先進(jìn)后出,后進(jìn)先出原那么設(shè)置的公先進(jìn)后出,后進(jìn)先出原那么設(shè)置的公用存儲區(qū)。數(shù)據(jù)的進(jìn)棧和出棧由指針用存儲區(qū)。數(shù)據(jù)的進(jìn)棧和出棧由指針SP一致管理。在一致管理。在MCS-51系統(tǒng)中,系統(tǒng)中,堆棧操作指令有兩條:堆棧操作指令有兩條:PUSH direct;SPSP+1,S

23、PdirectPOP direct;directSP,SP SP-1 其中其中PUSH指令入棧,指令入棧,POP指令出棧。操作時以字節(jié)為單位。入指令出棧。操作時以字節(jié)為單位。入棧時棧時SP指針先加指針先加1,再入棧。出棧時內(nèi)容先出棧,再入棧。出棧時內(nèi)容先出棧,SP指針再減指針再減1。用堆。用堆棧保管數(shù)據(jù)時,先入棧的內(nèi)容后出棧;后入棧的內(nèi)容先出棧。棧保管數(shù)據(jù)時,先入棧的內(nèi)容后出棧;后入棧的內(nèi)容先出棧。 【例【例3-3】假設(shè)入棧保管時入棧的順序?yàn)椋骸考僭O(shè)入棧保管時入棧的順序?yàn)椋篜USH APUSH B那么出棧的順序?yàn)椋耗敲闯鰲5捻樞驗(yàn)椋篜OP BPOP A第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯

24、編程序設(shè)計3.3.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令一加法指令一加法指令1普通的加法指令普通的加法指令A(yù)DDADD A,Rn ;A A + RnADD A,direct;A A +directADD A,Ri;A A +RiADD A,#data;A A + #data2帶進(jìn)位加指令帶進(jìn)位加指令A(yù)DDCADDC A,Rn;A A + Rn + CADDC A,direct;A A +direct+ CADDC A,Ri;A A +Ri+ CADDC A,#data;A A + #data + C3加加1指令指令I(lǐng)NC A;A A + 1INC Rn;Rn Rn + 1INC direct;direc

25、t direct+ 1INC Ri;RiRi+ 1INC DPTR;DPTR DPTR + 1第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計其中,ADD和ADDC指令在執(zhí)行時要影響CY、AC、OV和P標(biāo)志位。而INC指令除了INC A要影響P標(biāo)志位外,對其它標(biāo)志位都沒有影響。在MCS-51單片機(jī)中,常用ADD和ADDC配合運(yùn)用實(shí)現(xiàn)多字節(jié)加法運(yùn)算。【例【例3-4】試把存放在】試把存放在R1R2和和R3R4中的兩個中的兩個16位數(shù)相加,結(jié)果存位數(shù)相加,結(jié)果存于于R5R6中。中。 處置時,處置時,R2和和R4用普通的加法指令用普通的加法指令A(yù)DD,結(jié)果放于,結(jié)果放于R6中,中,R1和和R3用帶

26、進(jìn)位的加法指令用帶進(jìn)位的加法指令A(yù)DDC,結(jié)果放于,結(jié)果放于R5中,程序如下:中,程序如下:MOV A,R2ADD A,R4MOV R6,AMOV A,R1ADDC A,R3MOV R5,A第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計二減法指令二減法指令1帶借位減法指令帶借位減法指令SUBBSUBB A,Rn;A A - Rn - CSUBB A,direct;A A -direct- CSUBB A,Ri;A A -Ri- CSUBB A,#data;A A - #data C2減減1指令指令DECDEC A;A A - 1DEC Rn;Rn Rn - 1DEC direct ;di

27、rect direct- 1DEC Ri;RiRi- 1 在MCS-51單片機(jī)中,只提供了一種帶借位的減法指令,沒有提供普通的減法指令,普通的減法操作可以經(jīng)過先對CY標(biāo)志清零,然后再執(zhí)行帶借位的減法來實(shí)現(xiàn)。其中,SUBB指令在執(zhí)行時要影響CY、AC、OV和P標(biāo)志位。而DEC指令除了DEC A要影響P標(biāo)志位外,對其它標(biāo)志位都沒有影響。 第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計【例【例3-5】求】求R3 R2 - R1。程序?yàn)椋撼绦驗(yàn)椋篗OV A,R2CLR CSUBB A,R1MOV R3,A3乘法指令乘法指令MUL 在在MCS-51單片機(jī)中,乘法指令只需一條:單片機(jī)中,乘法指令只需

28、一條:MUL AB 該指令執(zhí)行時將對存放于累加器該指令執(zhí)行時將對存放于累加器A中的無符號被乘數(shù)和放于中的無符號被乘數(shù)和放于B存存放器中的無符號乘數(shù)相乘,積的高字節(jié)存于放器中的無符號乘數(shù)相乘,積的高字節(jié)存于B存放器中,低字節(jié)存于存放器中,低字節(jié)存于累加器累加器A中。中。 指令執(zhí)行后將影響指令執(zhí)行后將影響CY和和OV標(biāo)志,標(biāo)志,CY復(fù)位,對于復(fù)位,對于OV:當(dāng)積大:當(dāng)積大于于255時即時即B中不為中不為0,OV為為1;否那么,;否那么,OV為為0。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計4除法指令除法指令DIV 在在MCS-51單片機(jī)中,除法指令也只需一條:單片機(jī)中,除法指令也只需一條

29、:DIV AB 該指令執(zhí)行時將用存放在累加器該指令執(zhí)行時將用存放在累加器A中的無符號被除數(shù)與存放在中的無符號被除數(shù)與存放在B存放器中的無符號除數(shù)相除,除得的結(jié)果,商的存于累加器存放器中的無符號除數(shù)相除,除得的結(jié)果,商的存于累加器A中,中,余數(shù)存于余數(shù)存于B存放器中。存放器中。 指令執(zhí)行后將影響指令執(zhí)行后將影響CY和和OV標(biāo)志,普通情況標(biāo)志,普通情況CY和和OV都清都清0,只需當(dāng)只需當(dāng)B存放器中的除數(shù)為存放器中的除數(shù)為0時,時,CY和和OV才被置才被置1。5十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 在在MCS-51單片機(jī)中,十進(jìn)制調(diào)整指令只需一條:單片機(jī)中,十進(jìn)制調(diào)整指令只需一條:DA A 它只能用在它只能

30、用在ADD或或ADDC指令后面,用來對兩個二位的緊縮指令后面,用來對兩個二位的緊縮的的BCD碼數(shù)經(jīng)過用碼數(shù)經(jīng)過用ADD或或ADDC指令相加后存于累加器指令相加后存于累加器A中的結(jié)果中的結(jié)果進(jìn)展調(diào)整,使得它得到正確的十進(jìn)制結(jié)果。經(jīng)過該指令可實(shí)現(xiàn)兩進(jìn)展調(diào)整,使得它得到正確的十進(jìn)制結(jié)果。經(jīng)過該指令可實(shí)現(xiàn)兩位十進(jìn)制位十進(jìn)制BCD碼數(shù)的加法運(yùn)算。碼數(shù)的加法運(yùn)算。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計它的調(diào)整過程為:1假設(shè)累加器A的低四位為十六進(jìn)制的AF或輔助進(jìn)位標(biāo)志AC為1,那么累加器A中的內(nèi)容作加06H調(diào)整。2假設(shè)累加器A的高四位為十六進(jìn)制的AF或進(jìn)位標(biāo)志CY為1,那么累加器A中的內(nèi)容作

31、加60H調(diào)整?!纠?-6】在R3中有十進(jìn)制數(shù)67,在R2中有十進(jìn)制數(shù)85,用十進(jìn)制運(yùn)算,運(yùn)算的結(jié)果放于R5中。程序?yàn)椋篗OV A,R3ADD A,R2DA AMOV R5,A 程序中DA指令對ADD指令運(yùn)算出來的放于累加器A中的結(jié)果進(jìn)展調(diào)整,調(diào)整后,累加器A中的內(nèi)容為52H,CY為1,那么結(jié)果為152,最后放于R5中的內(nèi)容為52H十進(jìn)制數(shù)52。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.3.3 邏輯操作指令邏輯操作指令一邏輯與指令一邏輯與指令A(yù)NLANL A,Rn A A RnANL A,direct A A directANL A,Ri A A RiANL A,#data A A

32、 dataANL direct,A direct direct AANL direct,#data direct direct data二邏輯或指令二邏輯或指令ORLORL A,Rn A A RnORL A,direct A A directORL A,Ri A A RiORL A,#data A A dataORL direct,A direct direct AORL direct,#data direct direct data第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計三邏輯異或指令三邏輯異或指令XRLXRL A,Rn A A RnXRL A,direct A A direct

33、XRL A,Ri A A RiXRL A,#data A A dataXRL direct,A direct direct AXRL direct,#data direct direct data 在運(yùn)用中,邏輯與用于實(shí)現(xiàn)對指定位清在運(yùn)用中,邏輯與用于實(shí)現(xiàn)對指定位清0,其他位不變;邏輯或,其他位不變;邏輯或用于實(shí)現(xiàn)對指定位置用于實(shí)現(xiàn)對指定位置1,其他位不變;邏輯異或用于實(shí)現(xiàn)指定位取反,其他位不變;邏輯異或用于實(shí)現(xiàn)指定位取反,其他位不變。其他位不變?!纠纠?-7】寫出完成以下功能的指令段?!繉懗鐾瓿梢韵鹿δ艿闹噶疃巍?對累加器對累加器A中的中的1、3、5位清位清0,其他位不變,其他位不變ANL

34、 A,#11010101B2對累加器對累加器A中的中的2、4、6位置位置1,其他位不變,其他位不變ORL A,#01010100B3對累加器對累加器A中的中的0、1位取反,其他位不變位取反,其他位不變XRL A,#00000011B第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計四清零和求反指令四清零和求反指令1清零指令:清零指令:CLR A A 02求反指令:求反指令:CPL A A 在在MCS-51系統(tǒng)中,只能對累加器系統(tǒng)中,只能對累加器A中的內(nèi)容進(jìn)展清零和求反,中的內(nèi)容進(jìn)展清零和求反,如要對其它的存放器或存儲單元進(jìn)展清零和求反,那么須放在累加器如要對其它的存放器或存儲單元進(jìn)展清零和求

35、反,那么須放在累加器A進(jìn)展,運(yùn)算后再放回原位置。進(jìn)展,運(yùn)算后再放回原位置。【例【例3-8】寫出對】寫出對R0存放器內(nèi)容求反的程序段。存放器內(nèi)容求反的程序段。程序?yàn)椋撼绦驗(yàn)椋篗OV A,R0CPL AMOV R0,A五循環(huán)移位指令五循環(huán)移位指令 MCS-51系統(tǒng)有四條對累加器系統(tǒng)有四條對累加器A的循環(huán)移位指令,前兩條只在的循環(huán)移位指令,前兩條只在累加器累加器A中進(jìn)展循環(huán)移位,后兩條還要帶進(jìn)位標(biāo)志中進(jìn)展循環(huán)移位,后兩條還要帶進(jìn)位標(biāo)志CY進(jìn)展循環(huán)移位。進(jìn)展循環(huán)移位。每一次移一位。分別如下:每一次移一位。分別如下:1累加器累加器A循環(huán)左移循環(huán)左移RL A2累加器累加器A循環(huán)右移循環(huán)右移RR A第第3

36、3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3帶進(jìn)位的循環(huán)左移RLC A4帶進(jìn)位的循環(huán)右移RRC A【例3-9】假設(shè)累加器A中的內(nèi)容為10001011B,CY=0,那么執(zhí)行RLC A指令后累加器A中的內(nèi)容為00010110,CY=1。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.3.4 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令共有17條,包括無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、子程序調(diào)用及前往指令。一無條件轉(zhuǎn)移指令一無條件轉(zhuǎn)移指令 無條件轉(zhuǎn)移指令是指當(dāng)執(zhí)行該指令后,程序?qū)o條件地轉(zhuǎn)移到無條件轉(zhuǎn)移指令是指當(dāng)執(zhí)行該指令后,程序?qū)o條件地轉(zhuǎn)移到指令指定的地方去。無條件轉(zhuǎn)移指令包括長轉(zhuǎn)移指令、絕對轉(zhuǎn)移指指令指定的

37、地方去。無條件轉(zhuǎn)移指令包括長轉(zhuǎn)移指令、絕對轉(zhuǎn)移指令、相對轉(zhuǎn)移指令和間接轉(zhuǎn)移指令。令、相對轉(zhuǎn)移指令和間接轉(zhuǎn)移指令。1長轉(zhuǎn)移指令長轉(zhuǎn)移指令LJMP 指令格式:指令格式:LJMP addr16 ;PC addr16 指令后面帶目的位置的指令后面帶目的位置的16位地址,執(zhí)行時直接將該位地址,執(zhí)行時直接將該16位地址送位地址送給程序指針給程序指針PC,程序無條件地轉(zhuǎn)到,程序無條件地轉(zhuǎn)到16位目的地址指明的位置去。指位目的地址指明的位置去。指令中提供的是令中提供的是16位目的地址,所以可以轉(zhuǎn)移到位目的地址,所以可以轉(zhuǎn)移到64KB程序存儲器的程序存儲器的恣意位置,故得名為恣意位置,故得名為“長轉(zhuǎn)移。該指令不

38、影響標(biāo)志位,運(yùn)用方便。長轉(zhuǎn)移。該指令不影響標(biāo)志位,運(yùn)用方便。缺陷是:執(zhí)行時間長,字節(jié)數(shù)多。缺陷是:執(zhí)行時間長,字節(jié)數(shù)多。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計2絕對轉(zhuǎn)移指令絕對轉(zhuǎn)移指令指令格式:指令格式:AJMP addr11;PC 100 addr11 AJMP指令后帶的是目的位置的低指令后帶的是目的位置的低11位直接地址,執(zhí)行時,先將位直接地址,執(zhí)行時,先將程序指針程序指針PC的值加的值加2該指令長度為該指令長度為2字節(jié),然后把指令中的字節(jié),然后把指令中的11位地位地址址addr11送給程序指針?biāo)徒o程序指針PC的低的低11位,而程序指針的高位,而程序指針的高5位不變,執(zhí)行位不

39、變,執(zhí)行后轉(zhuǎn)移到后轉(zhuǎn)移到PC指針指向的新位置。指針指向的新位置。 由于由于11位地址位地址addr11的范圍是的范圍是0000000000011111111111,即,即2KB范圍,而目的地址的高范圍,而目的地址的高5位不變,所以程序轉(zhuǎn)移的位置只能是和當(dāng)位不變,所以程序轉(zhuǎn)移的位置只能是和當(dāng)前前PC位置位置AJMP指令地址加指令地址加2在同一在同一2KB范圍內(nèi)。轉(zhuǎn)移可以向前也范圍內(nèi)。轉(zhuǎn)移可以向前也可以向后,指令執(zhí)行后不影響形狀標(biāo)志位。可以向后,指令執(zhí)行后不影響形狀標(biāo)志位?!纠纠?-10】假設(shè)】假設(shè)AJMP指令地址為指令地址為3000H。AJMP后面帶的后面帶的11位地址位地址addr11為為1

40、23H,那么執(zhí)行指令,那么執(zhí)行指令A(yù)JMP addr11后轉(zhuǎn)移的目的位置是多后轉(zhuǎn)移的目的位置是多少?少? AJMP指令的指令的PC值加值加2=3000H+2=3002H=00110 000 00000010B 指令中的指令中的addr11=123H=001 00100011B 轉(zhuǎn)移的目的地址為轉(zhuǎn)移的目的地址為0011 0001 0010 0011B=3123H第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3相對轉(zhuǎn)移指令相對轉(zhuǎn)移指令指令格式:指令格式:SJMP rel ;PC PC + 2 + rel SJMP指令后面的操作數(shù)指令后面的操作數(shù)rel是是8位帶符號補(bǔ)碼數(shù),執(zhí)行時,位帶符號補(bǔ)碼

41、數(shù),執(zhí)行時,先將程序指針先將程序指針PC的值加的值加2該指令長度為該指令長度為2字節(jié),然后再將程序字節(jié),然后再將程序指針指針PC的值與指令中的位移量的值與指令中的位移量rel相加得轉(zhuǎn)移的目的地址。即:相加得轉(zhuǎn)移的目的地址。即:轉(zhuǎn)移的目的地址轉(zhuǎn)移的目的地址= SJMP指令所在地址指令所在地址+2+rel 由于由于8位補(bǔ)碼的取值范圍為位補(bǔ)碼的取值范圍為-128+127,所以該指令的轉(zhuǎn)移范,所以該指令的轉(zhuǎn)移范圍是:相對圍是:相對PC當(dāng)前值向前當(dāng)前值向前128字節(jié),向后字節(jié),向后127字節(jié)。字節(jié)。【例【例3-11】在】在2100H單元有單元有SJMP指令,假設(shè)指令,假設(shè)rel = 5AH正數(shù),正數(shù),那

42、么轉(zhuǎn)移目的地址為那么轉(zhuǎn)移目的地址為215CH向后轉(zhuǎn);假設(shè)向后轉(zhuǎn);假設(shè)rel = F0H負(fù)數(shù),那負(fù)數(shù),那么轉(zhuǎn)移目的地址為么轉(zhuǎn)移目的地址為20F2H向前轉(zhuǎn)。向前轉(zhuǎn)。 用匯編言語編程時,指令中的相對地址用匯編言語編程時,指令中的相對地址rel往往用目的位置的標(biāo)往往用目的位置的標(biāo)號符號地址表示。機(jī)器匯編時,能自動算出相對地址值;但手工號符號地址表示。機(jī)器匯編時,能自動算出相對地址值;但手工匯編時,需本人計算相對地址值匯編時,需本人計算相對地址值rel。rel的計算方法如下:的計算方法如下: rel = 目的地址目的地址SJMP指令地址指令地址 如目的地址等于如目的地址等于2021H,SJMP指令的地址

43、為指令的地址為2000H,那么相對,那么相對地址地址rel為為11H。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計留意:在單片機(jī)程序設(shè)計中,通常用到一條SJMP指令:SJMP $ 該指令的功能是在本人本身上循環(huán),進(jìn)入等待形狀。其中符號 $ 表示轉(zhuǎn)移到本身,它的機(jī)器碼為80 FEH。在程序設(shè)計中,程序的最后一條指令通常用它,使程序不再向后執(zhí)行以防止執(zhí)行后面的內(nèi)容而出錯。 4間接轉(zhuǎn)移指令間接轉(zhuǎn)移指令 指令格式:指令格式:JMP A+DPTR;PC A + DPTR 它它MCS-51系統(tǒng)中獨(dú)一一條間接轉(zhuǎn)移指令,轉(zhuǎn)移的目的地址是系統(tǒng)中獨(dú)一一條間接轉(zhuǎn)移指令,轉(zhuǎn)移的目的地址是由數(shù)據(jù)指針由數(shù)據(jù)指針D

44、PTR的內(nèi)容與累加器的內(nèi)容與累加器A中的內(nèi)容相加得到,指令執(zhí)行后中的內(nèi)容相加得到,指令執(zhí)行后不會改動不會改動DPTR及及A中原來的內(nèi)容。數(shù)據(jù)指針中原來的內(nèi)容。數(shù)據(jù)指針DPTR的內(nèi)容普通為基的內(nèi)容普通為基址,累加器址,累加器A的內(nèi)容為相對偏移量,在的內(nèi)容為相對偏移量,在64 KB范圍內(nèi)無條件轉(zhuǎn)移。范圍內(nèi)無條件轉(zhuǎn)移。 該指令的特點(diǎn)是轉(zhuǎn)移地址可以在程序運(yùn)轉(zhuǎn)中加以改動。該指令的特點(diǎn)是轉(zhuǎn)移地址可以在程序運(yùn)轉(zhuǎn)中加以改動。DPTR普通為確定值,根據(jù)累加器普通為確定值,根據(jù)累加器A的值來實(shí)現(xiàn)轉(zhuǎn)移到不同的分支。在運(yùn)用的值來實(shí)現(xiàn)轉(zhuǎn)移到不同的分支。在運(yùn)用時往往與一個轉(zhuǎn)移指令表一同來實(shí)現(xiàn)多分支轉(zhuǎn)移。時往往與一個轉(zhuǎn)移指

45、令表一同來實(shí)現(xiàn)多分支轉(zhuǎn)移。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計【例【例3-12】下面的程序能根據(jù)累加器】下面的程序能根據(jù)累加器A的值的值0、2、4、6轉(zhuǎn)移到相應(yīng)轉(zhuǎn)移到相應(yīng)的的TAB0TA6分支去執(zhí)行。分支去執(zhí)行。MOV DPTR,#TABLE ;表首地址送;表首地址送DPTRJMP A+DPTR ;根據(jù);根據(jù)A值轉(zhuǎn)移值轉(zhuǎn)移TABLE:AJMP TAB0 ;當(dāng);當(dāng)A=0時轉(zhuǎn)時轉(zhuǎn)TAB0執(zhí)行執(zhí)行AJMP TAB2 ;當(dāng);當(dāng)A=2時轉(zhuǎn)時轉(zhuǎn)TAB2執(zhí)行執(zhí)行AJMP TAB4 ;當(dāng);當(dāng)A=4時轉(zhuǎn)時轉(zhuǎn)TAB4執(zhí)行執(zhí)行AJMP TAB6 ;當(dāng);當(dāng)A=6時轉(zhuǎn)時轉(zhuǎn)TAB6執(zhí)行執(zhí)行二條件轉(zhuǎn)移指令二

46、條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令是指當(dāng)條件滿足時,程序轉(zhuǎn)移到指定位置,條件不條件轉(zhuǎn)移指令是指當(dāng)條件滿足時,程序轉(zhuǎn)移到指定位置,條件不滿足時,程序?qū)⒗^續(xù)依次執(zhí)行。在滿足時,程序?qū)⒗^續(xù)依次執(zhí)行。在MCS-51系統(tǒng)中,條件轉(zhuǎn)移指令有系統(tǒng)中,條件轉(zhuǎn)移指令有三種:累加器三種:累加器A判零條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令、減判零條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令、減1不為零轉(zhuǎn)移指不為零轉(zhuǎn)移指令。令。1累加器累加器A判零條件轉(zhuǎn)移指令判零條件轉(zhuǎn)移指令判判0指令:指令:JZ rel ;假設(shè);假設(shè)A=0,那么,那么PC PC + 2 + rel,否那么,否那么,PC PC + 2判非判非0指令:指令:JNZ rel ;假設(shè);假設(shè)A0

47、,那么,那么PC PC + 2 + rel,否那,否那么,么,PC PC + 2 第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計【例【例3-13】把片外】把片外RAM的的30H單元開場的數(shù)據(jù)塊傳單元開場的數(shù)據(jù)塊傳送到片內(nèi)送到片內(nèi)RAM的的40H開場的位置,直到出現(xiàn)零為止。開場的位置,直到出現(xiàn)零為止。 片內(nèi)、片外數(shù)據(jù)傳送以累加器片內(nèi)、片外數(shù)據(jù)傳送以累加器A過渡。每次傳過渡。每次傳送一個字節(jié),經(jīng)過循環(huán)處置,直四處置到傳送的內(nèi)容為送一個字節(jié),經(jīng)過循環(huán)處置,直四處置到傳送的內(nèi)容為0終了。終了。程序如下:程序如下:MOV R0,#30HMOV R1,#40HLOOP:MOVX A,R0MOV R1

48、,AINC R1INC R0JNZ LOOPSJMP $第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計2比較轉(zhuǎn)移指令比較轉(zhuǎn)移指令比較轉(zhuǎn)移指令用于對兩個數(shù)作比較,并根據(jù)比較情況進(jìn)展轉(zhuǎn)移,比較轉(zhuǎn)移比較轉(zhuǎn)移指令用于對兩個數(shù)作比較,并根據(jù)比較情況進(jìn)展轉(zhuǎn)移,比較轉(zhuǎn)移指令有四條:指令有四條:CJNE A,#data,rel ;假設(shè);假設(shè)A=data,那么,那么PC PC + 3,不轉(zhuǎn)移,繼續(xù),不轉(zhuǎn)移,繼續(xù)執(zhí)行執(zhí)行假設(shè)假設(shè)Adata,那么,那么C=0,PC PC + 3 + rel,轉(zhuǎn)移,轉(zhuǎn)移假設(shè)假設(shè)Adata,那么,那么C=0,PC PC + 3 + rel,轉(zhuǎn)移,轉(zhuǎn)移假設(shè)假設(shè)Rndata,那么,那

49、么C=0,PC PC + 3 + rel,轉(zhuǎn),轉(zhuǎn)移移假設(shè)假設(shè)Ridirect,那么,那么C=0,PC PC + 3 + rel,轉(zhuǎn)移,轉(zhuǎn)移假設(shè)假設(shè)Adirect,那么,那么C=1,PC PC + 3 + rel,轉(zhuǎn)移,轉(zhuǎn)移第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3減減1不為零轉(zhuǎn)移指令不為零轉(zhuǎn)移指令這種指令是先減這種指令是先減1后判別,假設(shè)不為零那么轉(zhuǎn)移。指令有兩條:后判別,假設(shè)不為零那么轉(zhuǎn)移。指令有兩條:DJNZ Rn,rel ;先;先Rn中的內(nèi)容減中的內(nèi)容減1,再判別,再判別Rn中的內(nèi)容能否中的內(nèi)容能否等于零,假設(shè)不為零,那么轉(zhuǎn)移。等于零,假設(shè)不為零,那么轉(zhuǎn)移。DJNZ dire

50、ct,rel ;先;先direct中的內(nèi)容減中的內(nèi)容減1,再判別,再判別direct中的內(nèi)容能否等于零,假設(shè)不為零,那么轉(zhuǎn)移。中的內(nèi)容能否等于零,假設(shè)不為零,那么轉(zhuǎn)移。在在MCS-51系統(tǒng)中,通常用系統(tǒng)中,通常用DJNZ指令來構(gòu)造循環(huán)構(gòu)造,實(shí)現(xiàn)反復(fù)指令來構(gòu)造循環(huán)構(gòu)造,實(shí)現(xiàn)反復(fù)處置。處置。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計【例【例3-14】統(tǒng)計片內(nèi)】統(tǒng)計片內(nèi)RAM中中30H單元開場的單元開場的20個數(shù)據(jù)中個數(shù)據(jù)中0個數(shù),個數(shù),放于放于R7中。中。 用用R2作循環(huán)變量,最開場置初值為作循環(huán)變量,最開場置初值為20;作;作R7作計數(shù)器,最作計數(shù)器,最開場置初值為開場置初值為0;用;

51、用R0作指針訪問片內(nèi)作指針訪問片內(nèi)RAM單元,最開場置初值為單元,最開場置初值為30H;用;用DJNZ指令對指令對R2減減1轉(zhuǎn)移進(jìn)展循環(huán)控制,在循環(huán)體中用指針轉(zhuǎn)移進(jìn)展循環(huán)控制,在循環(huán)體中用指針R0依次取出片內(nèi)依次取出片內(nèi)RAM中的數(shù)據(jù),判別,如為中的數(shù)據(jù),判別,如為0,那么,那么R7中的內(nèi)容加中的內(nèi)容加1。程序:程序:MOV R0,#30HMOV R2,#20MOV R7,#0LOOP:MOV A,R0CJNE A,#0,NEXTINC R7NEXT:INC R0DJNZ R2,LOOP第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計三子程序調(diào)用及前往指令三子程序調(diào)用及前往指令這類指令有四

52、條。兩條子程序調(diào)用指令,兩條前往指令。這類指令有四條。兩條子程序調(diào)用指令,兩條前往指令。1長調(diào)用指令長調(diào)用指令指令格式:指令格式:LCALL addr16執(zhí)行過程:執(zhí)行過程:PCPC+3SPSP+1SPPC70SPSP+1SPPC158PCaddr16 該指令執(zhí)行時,先將當(dāng)前的該指令執(zhí)行時,先將當(dāng)前的PC指令的指令的PC加指令的字節(jié)加指令的字節(jié)數(shù)數(shù)3值壓入堆棧保管,入棧時先低字節(jié),后高字節(jié)。然后轉(zhuǎn)移值壓入堆棧保管,入棧時先低字節(jié),后高字節(jié)。然后轉(zhuǎn)移到指令中到指令中addr16所指定的地方執(zhí)行。由于后面帶所指定的地方執(zhí)行。由于后面帶16位地址,因此位地址,因此可以轉(zhuǎn)移到程序存儲空間的任一位置。可

53、以轉(zhuǎn)移到程序存儲空間的任一位置。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計2絕對調(diào)用指令絕對調(diào)用指令指令格式:指令格式:ACALL addr11執(zhí)行過程:執(zhí)行過程:PCPC+2SPSP+1SPPC70SPSP+1SPPC158PC100addr11 該指令執(zhí)行過程與該指令執(zhí)行過程與LCALL指令類似,只是該指令與指令類似,只是該指令與AJMP一一樣只能實(shí)現(xiàn)樣只能實(shí)現(xiàn)2KB范圍內(nèi)轉(zhuǎn)移,執(zhí)行的最后是將指令中的范圍內(nèi)轉(zhuǎn)移,執(zhí)行的最后是將指令中的addr11送給送給PC指針的低指針的低11位。位。 對于對于LCALL和和ACALL兩條子程序調(diào)用指令,在匯編程序中,兩條子程序調(diào)用指令,在匯編程

54、序中,指令后面通常帶轉(zhuǎn)移位置的標(biāo)號,用指令后面通常帶轉(zhuǎn)移位置的標(biāo)號,用LCALL指令調(diào)用,轉(zhuǎn)移位置可指令調(diào)用,轉(zhuǎn)移位置可以是程序存儲空間的任一位置,用以是程序存儲空間的任一位置,用ACALL指令調(diào)用,轉(zhuǎn)移位置與指令調(diào)用,轉(zhuǎn)移位置與ACALL指令的下一條指令必需在同一個指令的下一條指令必需在同一個2KB內(nèi),即它們的高內(nèi),即它們的高5位地址位地址一樣。一樣。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3子程序前往指令子程序前往指令指令格式:指令格式:RET執(zhí)行過程:執(zhí)行過程:PC158SPSPSP-1PC70SPSPSP-1 執(zhí)行時將子程序調(diào)用指令壓入堆棧的地址出棧,第一次出棧執(zhí)行時將子程

55、序調(diào)用指令壓入堆棧的地址出棧,第一次出棧的內(nèi)容送的內(nèi)容送PC的高的高8位,第二次出棧的內(nèi)容送位,第二次出棧的內(nèi)容送PC的低的低8位。執(zhí)行完后,位。執(zhí)行完后,程序轉(zhuǎn)移到新的程序轉(zhuǎn)移到新的PC位置執(zhí)行指令。由于子程序調(diào)用指令執(zhí)行時壓位置執(zhí)行指令。由于子程序調(diào)用指令執(zhí)行時壓入的內(nèi)容是調(diào)用指令的下一條指令的地址,因此入的內(nèi)容是調(diào)用指令的下一條指令的地址,因此RET指令執(zhí)行后,指令執(zhí)行后,程序?qū)⑶巴秸{(diào)用指令的下一條指令執(zhí)行。程序?qū)⑶巴秸{(diào)用指令的下一條指令執(zhí)行。 該指令通常放于子程序的最后一條指令位置,用于實(shí)現(xiàn)前該指令通常放于子程序的最后一條指令位置,用于實(shí)現(xiàn)前往到主程序。另外,在往到主程序。另外,在

56、MCS-51程序設(shè)計中,也常用程序設(shè)計中,也常用RET指令來實(shí)指令來實(shí)現(xiàn)程序轉(zhuǎn)移,處置時先將轉(zhuǎn)移位置的地址用兩條現(xiàn)程序轉(zhuǎn)移,處置時先將轉(zhuǎn)移位置的地址用兩條PUSH指令入棧,指令入棧,低字節(jié)在前,高字節(jié)在后,然后執(zhí)行低字節(jié)在前,高字節(jié)在后,然后執(zhí)行RET指令,執(zhí)行后程序轉(zhuǎn)移指令,執(zhí)行后程序轉(zhuǎn)移到相應(yīng)的位置去執(zhí)行。到相應(yīng)的位置去執(zhí)行。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計4中斷前往指令中斷前往指令指令格式:指令格式:RETI執(zhí)行過程:執(zhí)行過程:PC158SPSPSP-1PC70SPSPSP-1 該指令的執(zhí)行過程與該指令的執(zhí)行過程與RET根本一樣,只是根本一樣,只是RETI在執(zhí)行后,在

57、轉(zhuǎn)移在執(zhí)行后,在轉(zhuǎn)移之前將先去除中斷的優(yōu)先級觸發(fā)器。該指令用于中斷效力子程序后面,之前將先去除中斷的優(yōu)先級觸發(fā)器。該指令用于中斷效力子程序后面,作為中斷效力子程序的最后一條指令,它的功能是前往主程序中斷的斷作為中斷效力子程序的最后一條指令,它的功能是前往主程序中斷的斷點(diǎn)位置,繼續(xù)執(zhí)行斷點(diǎn)位置后面的指令。點(diǎn)位置,繼續(xù)執(zhí)行斷點(diǎn)位置后面的指令。 在在MCS-51系統(tǒng)中,中斷都是硬件中斷,沒有軟件中斷調(diào)用指令,系統(tǒng)中,中斷都是硬件中斷,沒有軟件中斷調(diào)用指令,硬件中斷時,由一條長轉(zhuǎn)移指令使程序轉(zhuǎn)移到中斷效力程序的入口位置,硬件中斷時,由一條長轉(zhuǎn)移指令使程序轉(zhuǎn)移到中斷效力程序的入口位置,在轉(zhuǎn)移之前,由硬件

58、將當(dāng)前的斷點(diǎn)地址壓入堆棧保管,以便于以后經(jīng)過在轉(zhuǎn)移之前,由硬件將當(dāng)前的斷點(diǎn)地址壓入堆棧保管,以便于以后經(jīng)過中斷前往指令前往到斷點(diǎn)位置后繼續(xù)執(zhí)行。中斷前往指令前往到斷點(diǎn)位置后繼續(xù)執(zhí)行。第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計3.3.5 位操作指令位操作指令 在MCS-51系統(tǒng)中,有17條位處置指令,可以實(shí)現(xiàn)位傳送、位邏輯運(yùn)算、位控制轉(zhuǎn)移等操作。一位傳送指令 位傳送指令有兩條,用于實(shí)現(xiàn)位運(yùn)算器C與普通位之間的相互傳送。MOV C,bit;CbitMOV bit,C;bitC 指令在運(yùn)用時必需有位運(yùn)算器C參與,不能直接實(shí)現(xiàn)兩位之間的傳送。假設(shè)進(jìn)展兩位之間的傳送,可以經(jīng)過位運(yùn)算器C來傳送。

59、【例3-15】把片內(nèi)RAM中位尋址區(qū)的20H位的內(nèi)容傳送到30H位。程序:MOV C,20HMOV 30H,C第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計二位邏輯操作指令二位邏輯操作指令位邏輯操作指令包括位清位邏輯操作指令包括位清0、置、置1、取反、位與和位或,總共、取反、位與和位或,總共10位指令。位指令。1位清位清0CLR C;C0CLR bit;bit02位置位置1SETB C;C1SETB bit;bit13位取反位取反CPL C;C/CCPL bit;bitbit4位與位與ANL C,bit;CCbitANL C,/bit;CC/bit5位或位或ORL C,bit;CCbit

60、ORL C,/bit;CC/bit第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計利用位邏輯運(yùn)算指令可以實(shí)現(xiàn)各種各樣的邏輯功能。【例3-16】利用位邏輯運(yùn)算指令編程實(shí)現(xiàn)下面硬件邏輯電路的功能。與或或與P1.0P1.1P1.2P1.3P1.4P1.5第第3 3章章 單片機(jī)匯編程序設(shè)計單片機(jī)匯編程序設(shè)計程序:MOV C,P1.0ANL C,P1.1CPL CORL C,/P1.2MOV F0,CMOV C,P1.3ORL C,P1.4ANL C,F(xiàn)0CPL CMOV P1.5,C三位轉(zhuǎn)移指令三位轉(zhuǎn)移指令位轉(zhuǎn)移指令有以位轉(zhuǎn)移指令有以C為條件的位轉(zhuǎn)移指令和以為條件的位轉(zhuǎn)移指令和以bit為條件的位轉(zhuǎn)

溫馨提示

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

評論

0/150

提交評論