![第3章 單片機(jī)匯編程序設(shè)計(jì)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/8/d42c2576-4270-473c-9f40-c8d2ac1abc5e/d42c2576-4270-473c-9f40-c8d2ac1abc5e1.gif)
![第3章 單片機(jī)匯編程序設(shè)計(jì)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/8/d42c2576-4270-473c-9f40-c8d2ac1abc5e/d42c2576-4270-473c-9f40-c8d2ac1abc5e2.gif)
![第3章 單片機(jī)匯編程序設(shè)計(jì)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/8/d42c2576-4270-473c-9f40-c8d2ac1abc5e/d42c2576-4270-473c-9f40-c8d2ac1abc5e3.gif)
![第3章 單片機(jī)匯編程序設(shè)計(jì)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/8/d42c2576-4270-473c-9f40-c8d2ac1abc5e/d42c2576-4270-473c-9f40-c8d2ac1abc5e4.gif)
![第3章 單片機(jī)匯編程序設(shè)計(jì)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/8/d42c2576-4270-473c-9f40-c8d2ac1abc5e/d42c2576-4270-473c-9f40-c8d2ac1abc5e5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.1 MCS-51系列單片機(jī)匯編指令格式及標(biāo)識(shí)系列單片機(jī)匯編指令格式及標(biāo)識(shí) MCS-51系列單片機(jī)指令系統(tǒng)功能強(qiáng)、指令短、執(zhí)行快。從功能上可分成五大類:數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、邏輯操作指令、控制轉(zhuǎn)移指令和位操作指令。3.1.1 指令格式指令格式標(biāo)號(hào):標(biāo)號(hào): 操作碼助記符操作碼助記符 目的操作數(shù)目的操作數(shù),源操作數(shù),源操作數(shù) ;注釋;注釋(1)操作碼助記符表明指令的功能,不同的指令有不同的指令助記符,它一般用說(shuō)明其功能的英文單詞的縮寫(xiě)形式表示。 (2)操作數(shù)用于給指令的操作提供數(shù)據(jù)、數(shù)據(jù)的地址或指令的地址,操作數(shù)往往用相應(yīng)的尋址方式指明。
2、(3)標(biāo)號(hào)是該指令的符號(hào)地址,后面須帶冒號(hào)。(4)注釋是對(duì)該指令的解釋,前面須帶分號(hào)。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.1.2 指令中用到的標(biāo)識(shí)符指令中用到的標(biāo)識(shí)符為便于后面的學(xué)習(xí),在這里先對(duì)指令中用到的一些符號(hào)的約定意義作以說(shuō)明:(1)Ri和Rn:表示當(dāng)前工作寄存器區(qū)中的工作寄存器,i取0或1,表示R0或R1。n取07,表示R0R7。(2)#data:表示包含在指令中的8位立即數(shù)。(3)#data16:表示包含在指令中的16位立即數(shù)。 (4)rel:以補(bǔ)碼形式表示的8位相對(duì)偏移量,范圍為-128127,主要用在相對(duì)尋址的指令中。(5)addr16和addr11:分別表示
3、16位直接地址和11位直接地址。(6)direct:表示直接尋址的地址。(7)bit:表示可位尋址的直接位地址。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)(8)(X):表示X單元中的內(nèi)容。(9)(X):表示以X單元的內(nèi)容為地址的存儲(chǔ)器單元內(nèi)容,即(X)作地址,該地址單元的內(nèi)容用(X)表示。(10)/ 和符號(hào):“/”表示對(duì)該位操作數(shù)取反,但不影響該位的原值?!啊北硎静僮髁鞒?,將箭尾一方的內(nèi)容送入箭頭所指一方的單元中去。 第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.2 MCS-51系列單片機(jī)尋址方式系列單片機(jī)尋址方式 MCS-51單片機(jī)的尋址方式按操作數(shù)的類型,可分為數(shù)的尋址
4、和指令尋址,數(shù)的尋址有:常數(shù)尋址(立即尋址)、寄存器數(shù)尋址(寄存器尋址)、存儲(chǔ)器數(shù)尋址(直接尋址方式、寄存器間接尋址方式、變址尋址方式)和位尋址,指令的尋址有絕對(duì)尋址和相對(duì)尋址, 3.2.1 常數(shù)尋址(立即尋址)常數(shù)尋址(立即尋址)操作數(shù)是常數(shù),常數(shù)又稱為立即數(shù),使用時(shí)直接出現(xiàn)在指令中,緊跟在操作碼的后面,作為指令的一部分。在匯編指令中,立即數(shù)前面以“#”符號(hào)作前綴。在程序中通常用于給寄存器或存儲(chǔ)器單元賦初值,例如:MOV A,#20H其功能是把立即數(shù)20H送給累加器A,其中源操作數(shù)20H就是立即數(shù)。指令執(zhí)行后累加器A中的內(nèi)容為20H。 第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.
5、2.2 寄存器數(shù)尋址(寄存器尋址)寄存器數(shù)尋址(寄存器尋址)操作數(shù)在寄存器中,使用時(shí)在指令中直接提供寄存器的名稱,這種尋址方式稱為寄存器尋址。在MCS-51系統(tǒng)中,這種尋址方式針對(duì)的寄存器只能是R0R7 8個(gè)通用寄存器和部分特殊功能寄存器(如累加器A、寄存器B、數(shù)據(jù)指針DPTR等)中的數(shù)據(jù),對(duì)于其它的特殊功能寄存器中的內(nèi)容的尋址方式不屬于它。在匯編指令中,寄存器尋址在指令中直接提供寄存器的名稱,如R0、R1、A、DPTR等。例如:MOV A,R0其功能是把R0寄存器中的數(shù)送給累加器A,在指令中,源操作數(shù)R0為寄存器尋址,傳送的對(duì)象為R0中的數(shù)據(jù)。如指令執(zhí)行前R0中的內(nèi)容為20H,則指令執(zhí)行后累
6、加器A中的內(nèi)容為20H。 3.2.3 存儲(chǔ)器數(shù)尋址存儲(chǔ)器數(shù)尋址 存儲(chǔ)器數(shù)尋址針對(duì)的數(shù)據(jù)是存放在存儲(chǔ)器單元中,對(duì)于存儲(chǔ)器單元的內(nèi)容通過(guò)提供存儲(chǔ)器單元地址使用。根據(jù)存儲(chǔ)器單元地址的提供方式,存儲(chǔ)器數(shù)的尋址方式有:直接尋址、寄存器間接尋址、變址尋址。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)一直接尋址一直接尋址直接尋址是指數(shù)據(jù)在存儲(chǔ)器單元中,在指令中直接提供存儲(chǔ)器單元的地址。在MCS-51系統(tǒng)中,這種尋址方式針對(duì)的是片內(nèi)數(shù)據(jù)存儲(chǔ)器和特殊功能寄存器。在匯編指令中,指令中直接以地址數(shù)的形式提供存儲(chǔ)器單元的地址。例如:MOV A,20H其功能是把片內(nèi)數(shù)據(jù)存儲(chǔ)器20H單元的內(nèi)容送給累加器A。如指令
7、執(zhí)行前片內(nèi)數(shù)據(jù)存儲(chǔ)器20H單元的內(nèi)容為30H,則指令執(zhí)行后累加器A的內(nèi)容為30H。指令中20H是地址數(shù),它是片內(nèi)數(shù)據(jù)存儲(chǔ)單元的地址。在MCS-51中,數(shù)據(jù)前面不加“#”是存儲(chǔ)單元地址而不是常數(shù),常數(shù)前面要加符號(hào)“#”。對(duì)于特殊功能寄存器,在指令中使用時(shí)往往通過(guò)特殊功能寄存器的名稱使用,而特殊功能寄存器名稱實(shí)際上是特殊功能寄存器單元的符號(hào)地址,因此它們是直接尋址。例如:MOV A,P0其功能是把P0口的內(nèi)容送給累加器A。P0是特殊功能寄存器P0口的符號(hào)地址,該指令在翻譯成機(jī)器碼時(shí),P0就轉(zhuǎn)換成直接地址80H。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)二寄存器間接尋址二寄存器間接尋址寄存
8、器間接尋址是指數(shù)據(jù)存放在存儲(chǔ)單元中,而存儲(chǔ)單元地址存放在寄存器中,在指令中通過(guò)提供存放存儲(chǔ)單元地址的寄存器來(lái)使用對(duì)應(yīng)的存儲(chǔ)單元。形式為:寄存器名。例如:MOV A,R1該指令的功能是將以工作寄存器R1中的內(nèi)容為地址的片內(nèi)RAM單元的數(shù)據(jù)傳送到累加器A中去。指令的源操作數(shù)是寄存器間接尋址。若R1中的內(nèi)容為80H,片內(nèi)RAM地址為80H的單元中的內(nèi)容為20H,則執(zhí)行該指令后,累加器A的內(nèi)容為20H。寄存器間接尋址示意圖如圖所示。80H20H20HA80HR1第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì) 在MCS-51單片機(jī)中,寄存器間接尋址用到的寄存器只能是通用寄存器R0、R1和數(shù)據(jù)指針寄
9、存器DPTR,它能訪問(wèn)的數(shù)據(jù)是片內(nèi)數(shù)據(jù)存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器。其中,片內(nèi)數(shù)據(jù)存儲(chǔ)器只能用R0和R1作指針間接訪問(wèn);片外數(shù)據(jù)存儲(chǔ)器,低端的256字節(jié)單元,既可以用兩位十六進(jìn)制地址以R0或R1作指針間接訪問(wèn),也可用四位十六進(jìn)制地址以DPTR作指針間接訪問(wèn),而高端的字節(jié)單元?jiǎng)t只能以DPTR作指針間接訪問(wèn)。對(duì)于片內(nèi)RAM和片外RAM的低端256字節(jié)都可以用R0和R1作指針訪問(wèn),它們之間用指令來(lái)區(qū)別。片內(nèi)RAM訪問(wèn)用MOV指令,片外RAM訪問(wèn)用MOVX指令。 三變址尋址三變址尋址 變址尋址是指操作數(shù)的地址由基址寄存器的地址加上變址寄存器的地址得到。在MCS-51系統(tǒng)中,它是以數(shù)據(jù)指針寄存器DPTR或程序
10、計(jì)數(shù)器PC為基址,累加器A為變址,兩者相加得存儲(chǔ)單元的地址,所訪問(wèn)的存儲(chǔ)器為程序存儲(chǔ)器。 第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)例如:MOVC A,A+DPTR其功能是將數(shù)據(jù)指針寄存器DPTR的內(nèi)容和累加器A中的內(nèi)容相加作為程序存儲(chǔ)器的地址,從對(duì)應(yīng)的單元中取出內(nèi)容送累加器A中。指令中,源操作數(shù)的尋址方式為變址尋址,設(shè)指令執(zhí)行前數(shù)據(jù)指針寄存器DPTR的值為2000H,累加器A的值為05H,程序存儲(chǔ)器2005H單元的內(nèi)容為30H,則指令執(zhí)行后,累加器A中的內(nèi)容為30H。示意圖如圖所示。2000H30H30HDPTRA2005H05HA+第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序
11、設(shè)計(jì)3.2.4 位尋址位尋址位尋址是指操作數(shù)是二進(jìn)制位的尋址方式。在MCS-51單片機(jī)中有一個(gè)獨(dú)立的位處理器,有多條位處理指令,能夠進(jìn)行各種位運(yùn)算。在MCS-51系統(tǒng)中,位處理的操作對(duì)象是各種可位尋址位。對(duì)于它們的訪問(wèn)是通過(guò)提供相應(yīng)的位地址來(lái)處理。在MCS-51系統(tǒng)中,位地址的表示可以用以下幾種方式:1直接位地址(00H0FFH)。例如:20H2字節(jié)地址帶位號(hào)。例如:20H.3表示20H單元的3位。3特殊功能寄存器名帶位號(hào)。例如:P0.1表示P0口的1位。4位符號(hào)地址。例如:TR0是定時(shí)/計(jì)數(shù)器T0的啟動(dòng)位。3.2.5 指令尋址指令尋址一絕對(duì)尋址一絕對(duì)尋址絕對(duì)尋址是在指令的操作數(shù)中直接提供目的
12、位置的地址或地址的一部份。在MCS-51系統(tǒng)中,長(zhǎng)轉(zhuǎn)移和長(zhǎng)調(diào)用提供目的位置的16位地址,絕對(duì)轉(zhuǎn)移和絕對(duì)調(diào)用提供目的位置的16位地址的低11位,它們都為絕對(duì)尋址。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)二相對(duì)尋址二相對(duì)尋址相對(duì)尋址是以當(dāng)前程序計(jì)數(shù)器PC值加上指令中給出的偏移量rel得到目的位置的地址。在MCS-51系統(tǒng)中,相對(duì)轉(zhuǎn)移指令的操作數(shù)屬于相對(duì)尋址。在使用相對(duì)尋址時(shí)要注意以下兩點(diǎn):(1)當(dāng)前PC值是指轉(zhuǎn)移指令執(zhí)行時(shí)的PC值,它等于轉(zhuǎn)移指令的地址加上轉(zhuǎn)移指令的字節(jié)數(shù)。實(shí)際上是轉(zhuǎn)移指令的下一條指令的地址。例如:若轉(zhuǎn)移指令的地址為2010H,轉(zhuǎn)移指令的長(zhǎng)度為2字節(jié),則轉(zhuǎn)移指令執(zhí)行時(shí)的
13、PC值為2012H。(2)偏移量rel是8位有符號(hào)數(shù),以補(bǔ)碼表示,它的取值范圍為-128+127。當(dāng)為負(fù)值時(shí),向前轉(zhuǎn)移,當(dāng)為正數(shù)時(shí)向后轉(zhuǎn)移。相對(duì)尋址的目的地址為:目的地址=當(dāng)前PC+rel=轉(zhuǎn)移指令的地址+轉(zhuǎn)移指令的字節(jié)數(shù)+rel第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.3 MCS-51系列單片機(jī)指令系統(tǒng)系列單片機(jī)指令系統(tǒng)3.3.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令有29條,是指令系統(tǒng)中數(shù)量最多、使用也最頻繁的一類指令。這類指令可分為三組:普通傳送指令、數(shù)據(jù)交換指令、堆棧操作指令。一普通傳送指令一普通傳送指令 普通傳送指令以助記符MOV為基礎(chǔ)。分成片內(nèi)數(shù)據(jù)存儲(chǔ)器傳送指令、片外
14、數(shù)據(jù)存儲(chǔ)器傳送指令和程序存儲(chǔ)器傳送指令。1片內(nèi)數(shù)據(jù)存儲(chǔ)器傳送指令片內(nèi)數(shù)據(jù)存儲(chǔ)器傳送指令MOV指令格式:MOV 目的操作數(shù),源操作數(shù)其中:源操作數(shù)可以為A、Rn、Ri、direct、#data,目的操作數(shù)可以為A、Rn、Ri、direct,組合起來(lái)總共16條,按目的操作數(shù)的尋址方式劃分為五組:第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)(1)以A為目的操作數(shù)MOV A,Rn;A RnMOV A,direct ;A(direct)MOV A,Ri ;A(Ri)MOV A,#data ;A #data(2)以Rn為目的操作數(shù)MOV Rn,A;Rn AMOV Rn,direct;Rn (dir
15、ect)MOV Rn,#data;Rn #data(3)以直接地址direct為目的操作數(shù)MOV direct,A ;(direct) AMOV direct,Rn;(direct) RnMOV direct,direct;(direct) (direct)MOV direct,Ri;(direct) (Ri)MOV direct,#data;(direct) #data(4)以間接地址Ri為目的操作數(shù)MOV Ri,A ;(Ri) AMOV Ri,direct;(Ri) (direct)MOV Ri,#data;(Ri) #data(5)以DPTR為目的操作數(shù)MOV DPTR,#data16
16、;DPTR #data16第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)注意,源操作數(shù)和目的操作數(shù)中的Rn和Ri不能相互配對(duì)。如不允許有“MOV Rn,Rn”,“MOV Ri,Rn”這樣的指令,在MOV指令中,不允許在一條指令中同時(shí)出現(xiàn)工作寄存器,無(wú)論它是寄存器尋址還是寄存器間接尋址。 2片外數(shù)據(jù)存儲(chǔ)器傳送指令片外數(shù)據(jù)存儲(chǔ)器傳送指令MOVX 在MCS-51系統(tǒng)中只能通過(guò)累加器A與片外數(shù)據(jù)存儲(chǔ)器進(jìn)行數(shù)據(jù)傳送,訪問(wèn)時(shí),只能通過(guò)Ri和DPTR以間接尋址方式進(jìn)行。MOVX指令共有四條:MOVX A,DPTR;A (DPTR)MOVX DPTR,A;(DPTR) AMOVX A,Ri;A (Ri)
17、MOVX Ri,A;(Ri) A 其中前兩條指令通過(guò)DPTR間接尋址,可以對(duì)整個(gè)64K片外數(shù)據(jù)存儲(chǔ)器訪問(wèn)。后兩條指令通過(guò)Ri間接尋址,只能對(duì)片外數(shù)據(jù)存儲(chǔ)器的低端的256字節(jié)訪問(wèn),訪問(wèn)時(shí)將低8位地址放于Ri中。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3程序存儲(chǔ)器傳送指令程序存儲(chǔ)器傳送指令MOVC 程序存儲(chǔ)器傳送指令只有兩條,一條用DPTR基址變址尋址。一條用PC基址變址尋址。MOVC A,A+DPTR ;A (A+DPTR)MOVC A,A+PC;A (A+PC)這兩條指令通常用于訪問(wèn)表格數(shù)據(jù),因此以稱為查表指令。 例如:查表指令MOVC A,A+PC所在的地址為2000H,表格的起
18、始單元地址為2035H,表格的第4個(gè)元素(位移量為03H)的內(nèi)容為45H,則查表指令的處理過(guò)程如下: MOV A,#03H ;表格元素相對(duì)于表首的位移量送累加器A ADD A,#34H ;當(dāng)前程序計(jì)數(shù)器PC相對(duì)于表首的差值加到累加器A中 MOVC A,A+PC ;查表,查得第4個(gè)元素內(nèi)容45H送累加器A 注意:查表指令的長(zhǎng)度為1個(gè)字節(jié),當(dāng)前程序計(jì)數(shù)器PC的值應(yīng)為查表指令的地址加1。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)【例【例3-1】寫(xiě)出完成下列功能的程序段?!繉?xiě)出完成下列功能的程序段。(1)將R0的內(nèi)容送R6中程序?yàn)椋篗OV A,R0MOV R6,A(2)將片內(nèi)RAM 30H單
19、元的內(nèi)容送片外60H單元中程序?yàn)椋篗OV A,30HMOV R0,#60HMOVX R0,A(3)將片處RAM 1000H單元的內(nèi)容送片內(nèi)20H單元中程序?yàn)椋篗OV DPTR,#1000HMOV A,DPTRMOV 20H,A(4)將ROM 2000H單元的內(nèi)容送片內(nèi)RAM的30H單元中程序?yàn)椋篗OV A,#0MOV DPTR,#2000HMOVC A,A+DPTRMOV 30H,A第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)二數(shù)據(jù)交換指令二數(shù)據(jù)交換指令 普通傳送指令實(shí)現(xiàn)將源操作數(shù)的數(shù)據(jù)傳送到目的操作數(shù),指令執(zhí)行后源操作數(shù)不變,數(shù)據(jù)傳送是單向的。數(shù)據(jù)交換指令數(shù)據(jù)作雙向傳送,傳送后,前一
20、個(gè)操作數(shù)原來(lái)的內(nèi)容傳送到后一個(gè)操作數(shù)中,后一個(gè)操作數(shù)原來(lái)的內(nèi)容傳送到前一個(gè)操作數(shù)中。 數(shù)據(jù)交換指令要求第一個(gè)操作數(shù)須為累加器A,共有5條。XCH A,Rn;A RnXCH A ,direct ;A(direct)XCH A,Ri;A(Ri)XCHD A,Ri ;A03(Ri)03SWAP A;A03A47【例【例3-2】若】若R0的內(nèi)容為30H,片內(nèi)RAM 30H單元的內(nèi)容為23H,累加器A的內(nèi)容為45H,則執(zhí)行XCH A,R0指令后片內(nèi)RAM 30H單元的內(nèi)容為45H,累加器A中的內(nèi)容為23H。若執(zhí)行SWAP A指令,則累加器A的內(nèi)容為54H。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序
21、設(shè)計(jì)三堆棧操作指令三堆棧操作指令 堆棧是在片內(nèi)RAM中按“先進(jìn)后出,后進(jìn)先出”原則設(shè)置的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧和出棧由指針SP統(tǒng)一管理。在MCS-51系統(tǒng)中,堆棧操作指令有兩條:PUSH direct;SP(SP+1),(SP)(direct)POP direct;(direct)(SP),(SP) (SP-1) 其中PUSH指令入棧,POP指令出棧。操作時(shí)以字節(jié)為單位。入棧時(shí)SP指針先加1,再入棧。出棧時(shí)內(nèi)容先出棧,SP指針再減1。用堆棧保存數(shù)據(jù)時(shí),先入棧的內(nèi)容后出棧;后入棧的內(nèi)容先出棧。 【例3-3】若入棧保存時(shí)入棧的順序?yàn)椋篜USH APUSH B則出棧的順序?yàn)椋篜OP BPOP A第第
22、3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.3.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令一加法指令一加法指令1一般的加法指令一般的加法指令A(yù)DDADD A,Rn ;A A + RnADD A,direct;A A +(direct)ADD A,Ri;A A +(Ri)ADD 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 R
23、n;Rn Rn + 1INC direct;(direct) (direct)+ 1INC Ri;(Ri)(Ri)+ 1INC DPTR;DPTR DPTR + 1第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)其中,ADD和ADDC指令在執(zhí)行時(shí)要影響CY、AC、OV和P標(biāo)志位。而INC指令除了INC A要影響P標(biāo)志位外,對(duì)其它標(biāo)志位都沒(méi)有影響。在MCS-51單片機(jī)中,常用ADD和ADDC配合使用實(shí)現(xiàn)多字節(jié)加法運(yùn)算?!纠纠?-4】試把存放在R1R2和R3R4中的兩個(gè)16位數(shù)相加,結(jié)果存于R5R6中。 處理時(shí),R2和R4用一般的加法指令A(yù)DD,結(jié)果放于R6中,R1和R3用帶進(jìn)位的加法指令A(yù)
24、DDC,結(jié)果放于R5中,程序如下:MOV A,R2ADD A,R4MOV R6,AMOV A,R1ADDC A,R3MOV R5,A第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)二減法指令二減法指令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;direct (direct)- 1DEC Ri;(Ri
25、)(Ri)- 1 在MCS-51單片機(jī)中,只提供了一種帶借位的減法指令,沒(méi)有提供一般的減法指令,一般的減法操作可以通過(guò)先對(duì)CY標(biāo)志清零,然后再執(zhí)行帶借位的減法來(lái)實(shí)現(xiàn)。其中,SUBB指令在執(zhí)行時(shí)要影響CY、AC、OV和P標(biāo)志位。而DEC指令除了DEC A要影響P標(biāo)志位外,對(duì)其它標(biāo)志位都沒(méi)有影響。 第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)【例【例3-5】求R3 R2 - R1。程序?yàn)椋篗OV A,R2CLR CSUBB A,R1MOV R3,A3乘法指令乘法指令MUL 在MCS-51單片機(jī)中,乘法指令只有一條:MUL AB 該指令執(zhí)行時(shí)將對(duì)存放于累加器A中的無(wú)符號(hào)被乘數(shù)和放于B寄存器中
26、的無(wú)符號(hào)乘數(shù)相乘,積的高字節(jié)存于B寄存器中,低字節(jié)存于累加器A中。 指令執(zhí)行后將影響CY和OV標(biāo)志,CY復(fù)位,對(duì)于OV:當(dāng)積大于255時(shí)(即B中不為0),OV為1;否則,OV為0。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)4除法指令除法指令DIV 在MCS-51單片機(jī)中,除法指令也只有一條:DIV AB 該指令執(zhí)行時(shí)將用存放在累加器A中的無(wú)符號(hào)被除數(shù)與存放在B寄存器中的無(wú)符號(hào)除數(shù)相除,除得的結(jié)果,商的存于累加器A中,余數(shù)存于B寄存器中。 指令執(zhí)行后將影響CY和OV標(biāo)志,一般情況CY和OV都清0,只有當(dāng)B寄存器中的除數(shù)為0時(shí),CY和OV才被置1。5十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 在MCS
27、-51單片機(jī)中,十進(jìn)制調(diào)整指令只有一條:DA A 它只能用在ADD或ADDC指令后面,用來(lái)對(duì)兩個(gè)二位的壓縮的BCD碼數(shù)通過(guò)用ADD或ADDC指令相加后存于累加器A中的結(jié)果進(jìn)行調(diào)整,使得它得到正確的十進(jìn)制結(jié)果。通過(guò)該指令可實(shí)現(xiàn)兩位十進(jìn)制BCD碼數(shù)的加法運(yùn)算。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)它的調(diào)整過(guò)程為:(1)若累加器A的低四位為十六進(jìn)制的AF或輔助進(jìn)位標(biāo)志AC為1,則累加器A中的內(nèi)容作加06H調(diào)整。(2)若累加器A的高四位為十六進(jìn)制的AF或進(jìn)位標(biāo)志CY為1,則累加器A中的內(nèi)容作加60H調(diào)整?!纠纠?-6】在R3中有十進(jìn)制數(shù)67,在R2中有十進(jìn)制數(shù)85,用十進(jìn)制運(yùn)算,運(yùn)算的
28、結(jié)果放于R5中。程序?yàn)椋篗OV A,R3ADD A,R2DA AMOV R5,A 程序中DA指令對(duì)ADD指令運(yùn)算出來(lái)的放于累加器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ì)單片機(jī)匯編程序設(shè)計(jì)3.3.3 邏輯操作指令邏輯操作指令一邏輯與指令一邏輯與指令A(yù)NLANL A,Rn A A RnANL A,direct A A (direct)ANL A,Ri A A (Ri)ANL A,#data A A dataANL direct,A (direct) (direct) AANL d
29、irect,#data (direct) (direct) data二邏輯或指令二邏輯或指令ORLORL A,Rn A A RnORL A,direct A A (direct)ORL A,Ri A A (Ri)ORL A,#data A A dataORL direct,A (direct) (direct) AORL direct,#data (direct) (direct) data第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)三邏輯異或指令三邏輯異或指令XRLXRL A,Rn A A RnXRL A,direct A A (direct)XRL A,Ri A A (Ri)XRL
30、 A,#data A A dataXRL direct,A (direct) (direct) AXRL direct,#data (direct) (direct) data 在使用中,邏輯與用于實(shí)現(xiàn)對(duì)指定位清0,其余位不變;邏輯或用于實(shí)現(xiàn)對(duì)指定位置1,其余位不變;邏輯異或用于實(shí)現(xiàn)指定位取反,其余位不變?!纠纠?-7】寫(xiě)出完成下列功能的指令段。1對(duì)累加器A中的1、3、5位清0,其余位不變ANL A,#11010101B2對(duì)累加器A中的2、4、6位置1,其余位不變ORL A,#01010100B3對(duì)累加器A中的0、1位取反,其余位不變XRL A,#00000011B第第3 3章章 單片機(jī)匯編
31、程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)四清零和求反指令四清零和求反指令1清零指令:CLR A A 02求反指令:CPL A A 在MCS-51系統(tǒng)中,只能對(duì)累加器A中的內(nèi)容進(jìn)行清零和求反,如要對(duì)其它的寄存器或存儲(chǔ)單元進(jìn)行清零和求反,則須放在累加器A進(jìn)行,運(yùn)算后再放回原位置?!纠纠?-8】寫(xiě)出對(duì)R0寄存器內(nèi)容求反的程序段。程序?yàn)椋篗OV A,R0CPL AMOV R0,A五循環(huán)移位指令五循環(huán)移位指令 MCS-51系統(tǒng)有四條對(duì)累加器A的循環(huán)移位指令,前兩條只在累加器A中進(jìn)行循環(huán)移位,后兩條還要帶進(jìn)位標(biāo)志CY進(jìn)行循環(huán)移位。每一次移一位。分別如下:1累加器A循環(huán)左移RL A2累加器A循環(huán)右移RR A第第3 3章
32、章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3帶進(jìn)位的循環(huán)左移RLC A4帶進(jìn)位的循環(huán)右移RRC A【例【例3-9】若累加器A中的內(nèi)容為10001011B,CY=0,則執(zhí)行RLC A指令后累加器A中的內(nèi)容為00010110,CY=1。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.3.4 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令共有17條,包括無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、子程序調(diào)用及返回指令。一無(wú)條件轉(zhuǎn)移指令一無(wú)條件轉(zhuǎn)移指令 無(wú)條件轉(zhuǎn)移指令是指當(dāng)執(zhí)行該指令后,程序?qū)o(wú)條件地轉(zhuǎn)移到指令指定的地方去。無(wú)條件轉(zhuǎn)移指令包括長(zhǎng)轉(zhuǎn)移指令、絕對(duì)轉(zhuǎn)移指令、相對(duì)轉(zhuǎn)移指令和間接轉(zhuǎn)移指令。1長(zhǎng)轉(zhuǎn)移指令長(zhǎng)轉(zhuǎn)移指令LJMP 指令
33、格式:LJMP addr16;PC addr16 指令后面帶目的位置的16位地址,執(zhí)行時(shí)直接將該16位地址送給程序指針PC,程序無(wú)條件地轉(zhuǎn)到16位目標(biāo)地址指明的位置去。指令中提供的是16位目標(biāo)地址,所以可以轉(zhuǎn)移到64KB程序存儲(chǔ)器的任意位置,故得名為“長(zhǎng)轉(zhuǎn)移”。該指令不影響標(biāo)志位,使用方便。缺點(diǎn)是:執(zhí)行時(shí)間長(zhǎng),字節(jié)數(shù)多。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)2絕對(duì)轉(zhuǎn)移指令絕對(duì)轉(zhuǎn)移指令指令格式:AJMP addr11;PC 100 addr11 AJMP指令后帶的是目的位置的低11位直接地址,執(zhí)行時(shí),先將程序指針PC的值加2(該指令長(zhǎng)度為2字節(jié)),然后把指令中的11位地址addr1
34、1送給程序指針PC的低11位,而程序指針的高5位不變,執(zhí)行后轉(zhuǎn)移到PC指針指向的新位置。 由于11位地址addr11的范圍是0000000000011111111111,即2KB范圍,而目的地址的高5位不變,所以程序轉(zhuǎn)移的位置只能是和當(dāng)前PC位置(AJMP指令地址加2)在同一2KB范圍內(nèi)。轉(zhuǎn)移可以向前也可以向后,指令執(zhí)行后不影響狀態(tài)標(biāo)志位。【例【例3-10】若AJMP指令地址為3000H。AJMP后面帶的11位地址addr11為123H,則執(zhí)行指令A(yù)JMP addr11后轉(zhuǎn)移的目的位置是多少? AJMP指令的PC值加2=3000H+2=3002H=00110 000 00000010B 指令中
35、的addr11=123H=001 00100011B 轉(zhuǎn)移的目的地址為0011 0001 0010 0011B=3123H第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3相對(duì)轉(zhuǎn)移指令相對(duì)轉(zhuǎn)移指令指令格式:SJMP rel ;PC PC + 2 + rel SJMP指令后面的操作數(shù)rel是8位帶符號(hào)補(bǔ)碼數(shù),執(zhí)行時(shí),先將程序指針PC的值加2(該指令長(zhǎng)度為2字節(jié)),然后再將程序指針PC的值與指令中的位移量rel相加得轉(zhuǎn)移的目的地址。即:轉(zhuǎn)移的目的地址= SJMP指令所在地址+2+rel 因?yàn)?位補(bǔ)碼的取值范圍為-128+127,所以該指令的轉(zhuǎn)移范圍是:相對(duì)PC當(dāng)前值向前128字節(jié),向后127字
36、節(jié)。【例【例3-11】在2100H單元有SJMP指令,若rel = 5AH(正數(shù)),則轉(zhuǎn)移目的地址為215CH(向后轉(zhuǎn));若rel = F0H(負(fù)數(shù)),則轉(zhuǎn)移目的地址為20F2H(向前轉(zhuǎn))。 用匯編語(yǔ)言編程時(shí),指令中的相對(duì)地址rel往往用目的位置的標(biāo)號(hào)(符號(hào)地址)表示。機(jī)器匯編時(shí),能自動(dòng)算出相對(duì)地址值;但手工匯編時(shí),需自己計(jì)算相對(duì)地址值rel。rel的計(jì)算方法如下: rel = 目的地址(SJMP指令地址) 如目的地址等于2013H,SJMP指令的地址為2000H,則相對(duì)地址rel為11H。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)注意:在單片機(jī)程序設(shè)計(jì)中,通常用到一條SJMP指令:
37、SJMP $ 該指令的功能是在自己本身上循環(huán),進(jìn)入等待狀態(tài)。其中符號(hào) $ 表示轉(zhuǎn)移到本身,它的機(jī)器碼為80 FEH。在程序設(shè)計(jì)中,程序的最后一條指令通常用它,使程序不再向后執(zhí)行以避免執(zhí)行后面的內(nèi)容而出錯(cuò)。 4間接轉(zhuǎn)移指令間接轉(zhuǎn)移指令 指令格式:JMP A+DPTR;PC A + DPTR 它MCS-51系統(tǒng)中唯一一條間接轉(zhuǎn)移指令,轉(zhuǎn)移的目的地址是由數(shù)據(jù)指針DPTR的內(nèi)容與累加器A中的內(nèi)容相加得到,指令執(zhí)行后不會(huì)改變DPTR及A中原來(lái)的內(nèi)容。數(shù)據(jù)指針DPTR的內(nèi)容一般為基址,累加器A的內(nèi)容為相對(duì)偏移量,在64 KB范圍內(nèi)無(wú)條件轉(zhuǎn)移。 該指令的特點(diǎn)是轉(zhuǎn)移地址可以在程序運(yùn)行中加以改變。DPTR一般為
38、確定值,根據(jù)累加器A的值來(lái)實(shí)現(xiàn)轉(zhuǎn)移到不同的分支。在使用時(shí)往往與一個(gè)轉(zhuǎn)移指令表一起來(lái)實(shí)現(xiàn)多分支轉(zhuǎn)移。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)【例【例3-12】下面的程序能根據(jù)累加器A的值0、2、4、6轉(zhuǎn)移到相應(yīng)的TAB0TA6分支去執(zhí)行。MOV DPTR,#TABLE ;表首地址送DPTRJMP A+DPTR ;根據(jù)A值轉(zhuǎn)移TABLE:AJMP TAB0 ;當(dāng)(A)=0時(shí)轉(zhuǎn)TAB0執(zhí)行AJMP TAB2 ;當(dāng)(A)=2時(shí)轉(zhuǎn)TAB2執(zhí)行AJMP TAB4 ;當(dāng)(A)=4時(shí)轉(zhuǎn)TAB4執(zhí)行AJMP TAB6 ;當(dāng)(A)=6時(shí)轉(zhuǎn)TAB6執(zhí)行二條件轉(zhuǎn)移指令二條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令是指當(dāng)條件
39、滿足時(shí),程序轉(zhuǎn)移到指定位置,條件不滿足時(shí),程序?qū)⒗^續(xù)順次執(zhí)行。在MCS-51系統(tǒng)中,條件轉(zhuǎn)移指令有三種:累加器A判零條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令、減1不為零轉(zhuǎn)移指令。1累加器累加器A判零條件轉(zhuǎn)移指令判零條件轉(zhuǎn)移指令判0指令:JZ rel ;若A=0,則PC PC + 2 + rel,否則,PC PC + 2判非0指令:JNZ rel ;若A0,則PC PC + 2 + rel,否則,PC PC + 2 第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)【例【例3-13】把片外RAM的30H單元開(kāi)始的數(shù)據(jù)塊傳送到片內(nèi)RAM的40H開(kāi)始的位置,直到出現(xiàn)零為止。 片內(nèi)、片外數(shù)據(jù)傳送以累加器A過(guò)渡。每
40、次傳送一個(gè)字節(jié),通過(guò)循環(huán)處理,直到處理到傳送的內(nèi)容為0結(jié)束。程序如下:MOV R0,#30HMOV R1,#40HLOOP:MOVX A,R0MOV R1,AINC R1INC R0JNZ LOOPSJMP $第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)2比較轉(zhuǎn)移指令比較轉(zhuǎn)移指令比較轉(zhuǎn)移指令用于對(duì)兩個(gè)數(shù)作比較,并根據(jù)比較情況進(jìn)行轉(zhuǎn)移,比較轉(zhuǎn)移指令有四條:CJNE A,#data,rel ;若A=data,則PC PC + 3,不轉(zhuǎn)移,繼續(xù)執(zhí)行若Adata,則C=0,PC PC + 3 + rel,轉(zhuǎn)移若Adata,則C=0,PC PC + 3 + rel,轉(zhuǎn)移若(Rn)data,則C=
41、0,PC PC + 3 + rel,轉(zhuǎn)移若(Ri)direct,則C=0,PC PC + 3 + rel,轉(zhuǎn)移若Adirect,則C=1,PC PC + 3 + rel,轉(zhuǎn)移第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3減減1不為零轉(zhuǎn)移指令不為零轉(zhuǎn)移指令這種指令是先減1后判斷,若不為零則轉(zhuǎn)移。指令有兩條:DJNZ Rn,rel ;先Rn中的內(nèi)容減1,再判斷Rn中的內(nèi)容是否等于零,若不為零,則轉(zhuǎn)移。DJNZ direct,rel ;先(direct)中的內(nèi)容減1,再判斷(direct)中的內(nèi)容是否等于零,若不為零,則轉(zhuǎn)移。在MCS-51系統(tǒng)中,通常用DJNZ指令來(lái)構(gòu)造循環(huán)結(jié)構(gòu),實(shí)現(xiàn)重復(fù)處
42、理。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)【例【例3-14】統(tǒng)計(jì)片內(nèi)RAM中30H單元開(kāi)始的20個(gè)數(shù)據(jù)中0個(gè)數(shù),放于R7中。 用R2作循環(huán)變量,最開(kāi)始置初值為20;作R7作計(jì)數(shù)器,最開(kāi)始置初值為0;用R0作指針訪問(wèn)片內(nèi)RAM單元,最開(kāi)始置初值為30H;用DJNZ指令對(duì)R2減1轉(zhuǎn)移進(jìn)行循環(huán)控制,在循環(huán)體中用指針R0依次取出片內(nèi)RAM中的數(shù)據(jù),判斷,如為0,則R7中的內(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è)
43、計(jì)單片機(jī)匯編程序設(shè)計(jì)三子程序調(diào)用及返回指令三子程序調(diào)用及返回指令這類指令有四條。兩條子程序調(diào)用指令,兩條返回指令。1長(zhǎng)調(diào)用指令長(zhǎng)調(diào)用指令指令格式:LCALL addr16執(zhí)行過(guò)程:(PC)(PC)+3(SP)(SP)+1(SP)(PC)70(SP)(SP)+1(SP)(PC)158(PC)addr16 該指令執(zhí)行時(shí),先將當(dāng)前的PC(指令的PC加指令的字節(jié)數(shù)3)值壓入堆棧保存,入棧時(shí)先低字節(jié),后高字節(jié)。然后轉(zhuǎn)移到指令中addr16所指定的地方執(zhí)行。由于后面帶16位地址,因而可以轉(zhuǎn)移到程序存儲(chǔ)空間的任一位置。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)2絕對(duì)調(diào)用指令絕對(duì)調(diào)用指令指令格式:A
44、CALL addr11執(zhí)行過(guò)程:(PC)(PC)+2(SP)(SP)+1(SP)(PC)70(SP)(SP)+1(SP)(PC)158(PC)100addr11 該指令執(zhí)行過(guò)程與LCALL指令類似,只是該指令與AJMP一樣只能實(shí)現(xiàn)2KB范圍內(nèi)轉(zhuǎn)移,執(zhí)行的最后是將指令中的addr11送給PC指針的低11位。 對(duì)于LCALL和ACALL兩條子程序調(diào)用指令,在匯編程序中,指令后面通常帶轉(zhuǎn)移位置的標(biāo)號(hào),用LCALL指令調(diào)用,轉(zhuǎn)移位置可以是程序存儲(chǔ)空間的任一位置,用ACALL指令調(diào)用,轉(zhuǎn)移位置與ACALL指令的下一條指令必須在同一個(gè)2KB內(nèi),即它們的高5位地址相同。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片
45、機(jī)匯編程序設(shè)計(jì)3子程序返回指令子程序返回指令指令格式:RET執(zhí)行過(guò)程:(PC)158(SP)(SP)(SP)-1(PC)70(SP)(SP)(SP)-1 執(zhí)行時(shí)將子程序調(diào)用指令壓入堆棧的地址出棧,第一次出棧的內(nèi)容送PC的高8位,第二次出棧的內(nèi)容送PC的低8位。執(zhí)行完后,程序轉(zhuǎn)移到新的PC位置執(zhí)行指令。由于子程序調(diào)用指令執(zhí)行時(shí)壓入的內(nèi)容是調(diào)用指令的下一條指令的地址,因而RET指令執(zhí)行后,程序?qū)⒎祷氐秸{(diào)用指令的下一條指令執(zhí)行。 該指令通常放于子程序的最后一條指令位置,用于實(shí)現(xiàn)返回到主程序。另外,在MCS-51程序設(shè)計(jì)中,也常用RET指令來(lái)實(shí)現(xiàn)程序轉(zhuǎn)移,處理時(shí)先將轉(zhuǎn)移位置的地址用兩條PUSH指令入棧
46、,低字節(jié)在前,高字節(jié)在后,然后執(zhí)行RET指令,執(zhí)行后程序轉(zhuǎn)移到相應(yīng)的位置去執(zhí)行。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)4中斷返回指令中斷返回指令指令格式:RETI執(zhí)行過(guò)程:(PC)158(SP)(SP)(SP)-1(PC)70(SP)(SP)(SP)-1 該指令的執(zhí)行過(guò)程與RET基本相同,只是RETI在執(zhí)行后,在轉(zhuǎn)移之前將先清除中斷的優(yōu)先級(jí)觸發(fā)器。該指令用于中斷服務(wù)子程序后面,作為中斷服務(wù)子程序的最后一條指令,它的功能是返回主程序中斷的斷點(diǎn)位置,繼續(xù)執(zhí)行斷點(diǎn)位置后面的指令。 在MCS-51系統(tǒng)中,中斷都是硬件中斷,沒(méi)有軟件中斷調(diào)用指令,硬件中斷時(shí),由一條長(zhǎng)轉(zhuǎn)移指令使程序轉(zhuǎn)移到中斷
47、服務(wù)程序的入口位置,在轉(zhuǎn)移之前,由硬件將當(dāng)前的斷點(diǎn)地址壓入堆棧保存,以便于以后通過(guò)中斷返回指令返回到斷點(diǎn)位置后繼續(xù)執(zhí)行。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.3.5 位操作指令位操作指令 在MCS-51系統(tǒng)中,有17條位處理指令,可以實(shí)現(xiàn)位傳送、位邏輯運(yùn)算、位控制轉(zhuǎn)移等操作。一位傳送指令一位傳送指令 位傳送指令有兩條,用于實(shí)現(xiàn)位運(yùn)算器C與一般位之間的相互傳送。MOV C,bit;C(bit)MOV bit,C;(bit)C 指令在使用時(shí)必須有位運(yùn)算器C參與,不能直接實(shí)現(xiàn)兩位之間的傳送。如果進(jìn)行兩位之間的傳送,可以通過(guò)位運(yùn)算器C來(lái)傳送?!纠纠?-15】把片內(nèi)RAM中位尋址區(qū)的
48、20H位的內(nèi)容傳送到30H位。程序:MOV C,20HMOV 30H,C第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)二位邏輯操作指令二位邏輯操作指令位邏輯操作指令包括位清0、置1、取反、位與和位或,總共10位指令。1位清0CLR C;C0CLR bit;(bit)02位置1SETB C;C1SETB bit;(bit)13位取反CPL C;C/CCPL bit;(bit)(bit)4位與ANL C,bit;CC(bit)ANL C,/bit;CC(/bit)5位或ORL C,bit;CC(bit)ORL C,/bit;CC(/bit)第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)
49、利用位邏輯運(yùn)算指令可以實(shí)現(xiàn)各種各樣的邏輯功能。【例例3-16】利用位邏輯運(yùn)算指令編程實(shí)現(xiàn)下面硬件邏輯電路的功能。與或或與P1.0P1.1P1.2P1.3P1.4P1.5第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)程序: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)移指令有以C為條件的位轉(zhuǎn)移指令和以bit為條件的位轉(zhuǎn)移指令,共5條。1以以C條件的位轉(zhuǎn)移指令條件的位轉(zhuǎn)移指令JC rel; 若C=1,則轉(zhuǎn)移,PCPC+2+rel;否則程序
50、繼續(xù)執(zhí)行JNC rel; 若C=0,則轉(zhuǎn)移,PCPC+2+rel;否則程序繼續(xù)執(zhí)行第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)2以以bit為條件的位轉(zhuǎn)移指令為條件的位轉(zhuǎn)移指令JB bit,rel; 若(bit)=1,則轉(zhuǎn)移,PCPC+3+rel;否則程序繼續(xù)執(zhí)行JNB bit,rel ; 若(bit)=0,則轉(zhuǎn)移,PCPC+3+rel;否則程序繼續(xù)執(zhí)行JBC bit,rel ; 若(bit)=1,則轉(zhuǎn)移,PCPC+3+rel,且(bit)0;否則程序繼續(xù)執(zhí)行利用位轉(zhuǎn)移指令可進(jìn)行各種測(cè)試?!纠纠?-17】從片外RAM中30H單元開(kāi)始有100個(gè)數(shù)據(jù),統(tǒng)計(jì)當(dāng)中正數(shù)、0、和負(fù)數(shù)的個(gè)數(shù),分別放
51、于R5、R6、R7中。 設(shè)用R2作計(jì)數(shù)器,用DJNZ指令對(duì)R2減1轉(zhuǎn)移進(jìn)行循環(huán)控制,在循環(huán)體外設(shè)置R0指針,指向片外RAM 30H單元,對(duì)R5、R6、R7清零,在循環(huán)體中用指針R0依次取出片外RAM中的100個(gè)數(shù)據(jù),判斷,如大于0,則R5中的內(nèi)容加1;如等于0,則R6中的內(nèi)容加1;如小于0,則R7中的內(nèi)容加1。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)程序:MOV R2,#100MOV R0,#30HMOV R5,#0MOV R6,#0MOV R7,#0LOOP:MOVX A,R0CJNE A,#0,NEXT1INC R6SJMP NEXT3NEXT1:CLR CSUBB A,#0J
52、NC NEXT2INC R5SJMP NEXT3NEXT2:INC R7NEXT3:INC R0DJNZ R2,LOOPSJMP $第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)四空操作指令四空操作指令NOP ;PC PC+1 這是一條單字節(jié)指令。執(zhí)行時(shí),不作任何操作(即空操作),僅將程序計(jì)數(shù)器PC的內(nèi)容加1,使CPU指向下一條指令繼續(xù)執(zhí)行程序。它要占用一個(gè)機(jī)器周期,常用來(lái)產(chǎn)生時(shí)間延遲,構(gòu)造延時(shí)程序。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.4 MCS-51系列單片機(jī)匯編程序常用偽指令系列單片機(jī)匯編程序常用偽指令1ORG偽指令偽指令格式:ORG 地址(十六進(jìn)制表示)這條偽指
53、令放于一段源程序或數(shù)據(jù)的前面,匯編時(shí)用于指明程序或數(shù)據(jù)從程序存儲(chǔ)空間什么位置開(kāi)始存放。ORG偽指令后的地址是程序或數(shù)據(jù)的起始地址?!纠纠?-18】 ORG 1000HSTART:MOV A,#7FH 指明后面的程序從程序存儲(chǔ)器的1000H單元開(kāi)始存放。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)2DB偽指令偽指令格式:標(biāo)號(hào): DB 項(xiàng)或項(xiàng)表 DB偽指令用于定義字節(jié)數(shù)據(jù),可以定義一個(gè)字節(jié),也可定義多個(gè)字節(jié),字義多個(gè)字節(jié)時(shí),兩兩之間用逗號(hào)間隔,定義的多個(gè)字節(jié)在存儲(chǔ)器中是連續(xù)存放的。定義的字節(jié)可以是一般常數(shù),也可以為字符,還可以是字符串,字符和字符串以引號(hào)括起來(lái),字符數(shù)據(jù)在存儲(chǔ)器中以ASC
54、II碼形式存放。在定義時(shí)前面可以帶標(biāo)號(hào),定義的標(biāo)號(hào)在程序中是起始單元的地址。【例【例3-19】 ORG 3000HTAB1: DB 12H,34HDB 5,A,abc匯編后,各個(gè)數(shù)據(jù)在存儲(chǔ)單元中的存放情況如下:12H34H35H41H61H62H63H3000H3001H3002H3003H3004H3005H3006H第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3DW偽指令偽指令格式:標(biāo)號(hào): DW 項(xiàng)或項(xiàng)表 這條指令與DB相似,但用于定義字?jǐn)?shù)據(jù)。項(xiàng)或項(xiàng)表指所定義的一個(gè)字在存儲(chǔ)器中占兩個(gè)字節(jié)。匯編時(shí),機(jī)器自動(dòng)按高字節(jié)在前低字節(jié)在后存放。【例【例3-20】 ORG 3000HTAB2:D
55、W 1234H,5678H匯編后,各個(gè)數(shù)據(jù)在存儲(chǔ)單元中的存放情況如下:1 2 H 34H56H78H3000H3001H3002H3003H第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)4DS偽指令偽指令格式:標(biāo)號(hào): DS 數(shù)值表達(dá)式 該偽指令用在存儲(chǔ)器中保留一定數(shù)量的字節(jié)單元。保留存貯空間主要為以后存放數(shù)據(jù)。保留的字節(jié)單元數(shù)由表達(dá)式的值決定?!纠纠?-21】 ORG 2000HTAB1: DB 12H,34HDS 4HDB 5匯編后,存儲(chǔ)單元中的分配情況如下:12H34H-35H3000H3001H3002H3003H3004H3005H3006H第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單
56、片機(jī)匯編程序設(shè)計(jì)5EQU偽指令偽指令格式:符號(hào) EQU 項(xiàng) 該偽指令的功能是將指令中的項(xiàng)的值賦予EQU前面的符號(hào)。項(xiàng)可以是常數(shù)、地址標(biāo)號(hào)或表達(dá)式。以后可以通過(guò)使用該符號(hào)使用相應(yīng)的項(xiàng)。【例【例3-22】 TAB1 EQU 1000HTAB2 EQU 2000H匯編后TAB1、TAB2分別等于1000H、2000H。程序后面使用1000H、2000H的地方就可以用符號(hào)TAB1、TAB2替換。用EQU偽指令對(duì)某標(biāo)號(hào)賦值后,該符號(hào)的值在整個(gè)程序中不能再改變。6bit偽指令偽指令格式:符號(hào) bit 位地址bit該偽指令用于給位地址賦予符號(hào),經(jīng)賦值后可用該符號(hào)代替bit后面的位地址。【例【例3-23】 P
57、LG bit F0AI bitP1.0定義后,在程序中位地址F0、P1.0就可以通過(guò)FLG和AI來(lái)使用。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)7. DATA偽指令格式:符號(hào)格式:符號(hào) DATA 直接字節(jié)地址該偽指令用于給片內(nèi)RAM字節(jié)單元地址賦予DATA前面的符號(hào),賦值后可用該符號(hào)代替DATA后面的片內(nèi)RAM字節(jié)單元地址?!纠纠?-23】 RESULT DATA 60H MOV RESULT,A匯編后,RESULT就表示片內(nèi)RAM的60H單元,程序后面用片內(nèi)RAM的60H單元的地方就可以用RESULT。8. XDATA偽指令格式:符號(hào)格式:符號(hào) XDATA 直接字節(jié)地址該偽指令
58、與DATA偽指令基本相同,只是它針對(duì)的是片外RAM字節(jié)單元。【例【例3-24】 PORT1 XDATA 2000H MOV DPTR,PORT1MOVX DPTR,A匯編后,符號(hào)PORT1就表示片外RAM的2000H單元地址,程序后面可通過(guò)符號(hào)PORT1表示片外RAM的2000H單元地址。第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)9END偽指令偽指令格式:END 該指令放于程序最后位置,用于指明匯編語(yǔ)言源程序的結(jié)束位置,當(dāng)匯編程序匯編到END偽指令時(shí),匯編結(jié)束。END后面的指令,匯編程序都不予處理。一個(gè)源程序只能有一個(gè)END命令,否則就有一部分指令不能被匯編。第第3 3章章 單片機(jī)匯
59、編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)3.5 MCS-51系列單片機(jī)匯編程序設(shè)計(jì)系列單片機(jī)匯編程序設(shè)計(jì)3.5.1 運(yùn)算程序【例【例3-24】多字節(jié)無(wú)符號(hào)數(shù)加法】多字節(jié)無(wú)符號(hào)數(shù)加法 設(shè)從片內(nèi)RAM30H單元和40H單元有兩個(gè)16字節(jié)數(shù),把它們相加,結(jié)果放于30H單元開(kāi)始的位置處(設(shè)結(jié)果不溢出)。 處理過(guò)程: 用R0作指針指向30H單元,用R1作指針指向40H單元,用R2為循環(huán)變量,初值為16,在循環(huán)體中用ADDC指令把R0指針指向的單元與R1指針指向的單元相加,加得的結(jié)果放回R0指向的單元,改變R0、R1指針指向下一個(gè)單元,循環(huán)16次,在第一次循環(huán)前應(yīng)先將CY清零。程序流程圖和程序如下:第第3 3章章 單
60、片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)程序:ORG 1000HMOV R0,#30HMOV R1,#40HMOV R2,#16CLR CLOOP:MOV A,R0ADDC A,R1MOV R0,AINC R0INC R1DJNZ R2,LOOPEND開(kāi)始#30HR0#40HR1#16R20 CR0+R1R0R0+1R0R1+1R1R2-1R2R2=0?結(jié)束否是第第3 3章章 單片機(jī)匯編程序設(shè)計(jì)單片機(jī)匯編程序設(shè)計(jì)【例【例3-26】?jī)勺止?jié)無(wú)符號(hào)數(shù)乘法】?jī)勺止?jié)無(wú)符號(hào)數(shù)乘法設(shè)被乘數(shù)的高字節(jié)放在R7中,低字節(jié)放于R6中;乘數(shù)的高字節(jié)放于R5中,低字節(jié)放于R4中。乘得的積有4個(gè)字節(jié),按由低字節(jié)到高字節(jié)的次序存
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高三數(shù)學(xué)(理)一輪總復(fù)習(xí):第九篇 統(tǒng)計(jì)與算法 含解析
- 離婚合同小說(shuō)全文在線閱讀下載
- 個(gè)人汽車租賃簡(jiǎn)單合同
- 路燈承包合同
- 軟件開(kāi)發(fā)簽約合同
- pso算法讀書(shū)筆記
- 屋頂翻修安全合同模板
- 醫(yī)療行業(yè)的市場(chǎng)拓展經(jīng)驗(yàn)總結(jié)
- 2025年人教五四新版選修歷史下冊(cè)月考試卷含答案
- 2025年新世紀(jì)版九年級(jí)生物下冊(cè)月考試卷含答案
- 地震應(yīng)急救援培訓(xùn)課件
- 初中物理光學(xué)難題難度含解析答案
- 《霍爾效應(yīng)測(cè)量磁場(chǎng)》課件
- 《瘋狂動(dòng)物城》全本臺(tái)詞中英文對(duì)照
- 中專數(shù)學(xué)(基礎(chǔ)模塊)上冊(cè)課件
- 高考作文復(fù)習(xí)任務(wù)驅(qū)動(dòng)型作文的審題立意課件73張
- 品質(zhì)部經(jīng)理KRA KPI考核表
- 《馬克思主義與社會(huì)科學(xué)方法論》授課教案
- 一個(gè)28歲的漂亮小媳婦在某公司打工-被老板看上之后
- 馬工程教育哲學(xué)課件第十章 教育哲學(xué)與教師發(fā)展
- GB/T 11376-2020金屬及其他無(wú)機(jī)覆蓋層金屬的磷化膜
評(píng)論
0/150
提交評(píng)論