




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第三章第三章 單片機匯編程序設計單片機匯編程序設計3.1 MCS-51系列單片機匯編指令格式及標識系列單片機匯編指令格式及標識 指令是使計算機完成基本操作的命令。一種計算機能夠執行的全部指令的集合,稱為這種計算機的指令系統。單片機的指令系統與微型計算機的指令系統不同,MCS-51系列單片機指令系統共有111條指令,42種指令助記符,其中有49條單字節指令,45條雙字節指令和17條三字節指令;有64條為單機器周期指令,45條為雙機器周期指令,只有乘、除法兩條指令為四機器周期指令。在存儲空間和運算速度上,效率都比較高。 MCS-51系列單片機指令系統功能強、指令短、執行快。從功能上可分成五大類:數
2、據傳送指令、算術運算指令、邏輯操作指令、控制轉移指令和位操作指令。3.1.1 指令格式指令格式標號:標號: 操作碼助記符操作碼助記符 目的操作數目的操作數,源操作數,源操作數 ;注釋;注釋(1)操作碼助記符表明指令的功能,不同的指令有不同的指令助記符,它一般用說明其功能的英文單詞的縮寫形式表示。 第三章第三章 單片機匯編程序設計單片機匯編程序設計(2)操作數用于給指令的操作提供數據、數據的地址或指令的地址,操作數往往用相應的尋址方式指明。MCS-51單片機指令系統的指令按操作數的多少可分為無操作數、單操作數、雙操作數和三操作數四種情況。 (3)標號是該指令的符號地址,后面須帶冒號。它主要為轉移
3、指令提供轉移的目的地址。(4)注釋是對該指令的解釋,前面須帶分號。它們是編程者根據需要加上去的,用于對指令進行說明,對于指令本身功能而言是可以不要的。3.1.2 指令中用到的標識符指令中用到的標識符為便于后面的學習,在這里先對指令中用到的一些符號的約定意義作以說明:(1)Ri和Rn:表示當前工作寄存器區中的工作寄存器,i取0或1,表示R0或R1。n取07,表示R0R7。(2)#data:表示包含在指令中的8位立即數。(3)#data16:表示包含在指令中的16位立即數。 第三章第三章 單片機匯編程序設計單片機匯編程序設計(4)rel:以補碼形式表示的8位相對偏移量,范圍為-128127,主要用
4、在相對尋址的指令中。(5)addr16和addr11:分別表示16位直接地址和11位直接地址。(6)direct:表示直接尋址的地址。(7)bit:表示可位尋址的直接位地址。(8)(X):表示X單元中的內容。(9)(X):表示以X單元的內容為地址的存儲器單元內容,即(X)作地址,該地址單元的內容用(X)表示。(10)/ 和符號:“/”表示對該位操作數取反,但不影響該位的原值?!啊北硎静僮髁鞒?,將箭尾一方的內容送入箭頭所指一方的單元中去。 第三章第三章 單片機匯編程序設計單片機匯編程序設計3.2 MCS-51系列單片機尋址方式系列單片機尋址方式 MCS-51單片機的尋址方式按操作數的類型,可分為
5、數的尋址和指令尋址,數的尋址有:常數尋址(立即尋址)、寄存器數尋址(寄存器尋址)、存儲器數尋址(直接尋址方式、寄存器間接尋址方式、變址尋址方式)和位尋址,指令的尋址有絕對尋址和相對尋址, 3.2.1 常數尋址(立即尋址)常數尋址(立即尋址) 操作數是常數,使用時直接出現在指令中,緊跟在操作碼的后面,作為指令的一部分。與操作碼一起存放在程序存儲器中,可以立即得到并執行,不需要經過別的途徑去尋找。常數又稱為立即數,故又稱為立即尋址。在匯編指令中,立即數前面以“#”符號作前綴。在程序中通常用于給寄存器或存儲器單元賦初值,例如:MOV A,#20H 其功能是把立即數20H送給累加器A,其中源操作數20
6、H就是立即數。指令執行后累加器A中的內容為20H。 第三章第三章 單片機匯編程序設計單片機匯編程序設計3.2.2 寄存器數尋址(寄存器尋址)寄存器數尋址(寄存器尋址) 操作數在寄存器中,使用時在指令中直接提供寄存器的名稱,這種尋址方式稱為寄存器尋址。在MCS-51系統中,這種尋址方式針對的寄存器只能是R0R7 8個通用寄存器和部分特殊功能寄存器(如累加器A、寄存器B、數據指針DPTR等)中的數據,對于其它的特殊功能寄存器中的內容的尋址方式不屬于它。在匯編指令中,寄存器尋址在指令中直接提供寄存器的名稱,如R0、R1、A、DPTR等。例如:MOV A,R0其功能是把R0寄存器中的數送給累加器A,在
7、指令中,源操作數R0為寄存器尋址,傳送的對象為R0中的數據。如指令執行前R0中的內容為20H,則指令執行后累加器A中的內容為20H。 3.2.3 存儲器數尋址存儲器數尋址 存儲器數尋址針對的數據是存放在存儲器單元中,對于存儲器單元的內容通過提供存儲器單元地址使用。根據存儲器單元地址的提供方式,存儲器數的尋址方式有:直接尋址、寄存器間接尋址、變址尋址。第三章第三章 單片機匯編程序設計單片機匯編程序設計一直接尋址一直接尋址 直接尋址是指數據在存儲器單元中,在指令中直接提供存儲器單元的地址。在MCS-51系統中,這種尋址方式針對的是片內數據存儲器和特殊功能寄存器。在匯編指令中,指令中直接以地址數的形
8、式提供存儲器單元的地址。例如:MOV A,20H 其功能是把片內數據存儲器20H單元的內容送給累加器A。如指令執行前片內數據存儲器20H單元的內容為30H,則指令執行后累加器A的內容為30H。指令中20H是地址數,它是片內數據存儲單元的地址。在MCS-51中,數據前面不加“#”是存儲單元地址而不是常數,常數前面要加符號“#”。 對于特殊功能寄存器,在指令中使用時往往通過特殊功能寄存器的名稱使用,而特殊功能寄存器名稱實際上是特殊功能寄存器單元的符號地址,因此它們是直接尋址。例如:MOV A,P0 其功能是把P0口的內容送給累加器A。P0是特殊功能寄存器P0口的符號地址,該指令在翻譯成機器碼時,P
9、0就轉換成直接地址80H。第三章第三章 單片機匯編程序設計單片機匯編程序設計二寄存器間接尋址二寄存器間接尋址 寄存器間接尋址是指數據存放在存儲單元中,而存儲單元地址存放在寄存器中,在指令中通過提供存放存儲單元地址的寄存器來使用對應的存儲單元。形式為:寄存器名。例如:MOV A,R1 該指令的功能是將以工作寄存器R1中的內容為地址的片內RAM單元的數據傳送到累加器A中去。指令的源操作數是寄存器間接尋址。若R1中的內容為80H,片內RAM地址為80H的單元中的內容為20H,則執行該指令后,累加器A的內容為20H。寄存器間接尋址示意圖如圖所示。80H20H20HA80HR1第三章第三章 單片機匯編程
10、序設計單片機匯編程序設計 在MCS-51單片機中,寄存器間接尋址用到的寄存器只能是通用寄存器R0、R1和數據指針寄存器DPTR,它能訪問的數據是片內數據存儲器和片外數據存儲器。其中,片內數據存儲器只能用R0和R1作指針間接訪問;片外數據存儲器,低端的256字節單元,既可以用兩位十六進制地址以R0或R1作指針間接訪問,也可用四位十六進制地址以DPTR作指針間接訪問,而高端的字節單元則只能以DPTR作指針間接訪問。對于片內RAM和片外RAM的低端256字節都可以用R0和R1作指針訪問,它們之間用指令來區別。片內RAM訪問用MOV指令,片外RAM訪問用MOVX指令。 三變址尋址三變址尋址 變址尋址是
11、指操作數的地址由基址寄存器的地址加上變址寄存器的地址得到。在MCS-51系統中,它是以數據指針寄存器DPTR或程序計數器PC為基址,累加器A為變址,兩者相加得存儲單元的地址,所訪問的存儲器為程序存儲器。 第三章第三章 單片機匯編程序設計單片機匯編程序設計例如:MOVC A,A+DPTR其功能是將數據指針寄存器DPTR的內容和累加器A中的內容相加作為程序存儲器的地址,從對應的單元中取出內容送累加器A中。指令中,源操作數的尋址方式為變址尋址,設指令執行前數據指針寄存器DPTR的值為2000H,累加器A的值為05H,程序存儲器2005H單元的內容為30H,則指令執行后,累加器A中的內容為30H。示意
12、圖如圖所示。2000H30H30HDPTRA2005H05HA+第三章第三章 單片機匯編程序設計單片機匯編程序設計3.2.4 位尋址位尋址位尋址是指操作數是二進制位的尋址方式。在MCS-51單片機中有一個獨立的位處理器,有多條位處理指令,能夠進行各種位運算。在MCS-51系統中,位處理的操作對象是各種可位尋址位。對于它們的訪問是通過提供相應的位地址來處理。在MCS-51系統中,位地址的表示可以用以下幾種方式:1直接位地址(00H0FFH)。例如:20H2字節地址帶位號。例如:20H.3表示20H單元的3位。3特殊功能寄存器名帶位號。例如:P0.1表示P0口的1位。4位符號地址。例如:TR0是定
13、時/計數器T0的啟動位。3.2.5 指令尋址指令尋址一絕對尋址一絕對尋址絕對尋址是在指令的操作數中直接提供目的位置的地址或地址的一部份。在MCS-51系統中,長轉移和長調用提供目的位置的16位地址,絕對轉移和絕對調用提供目的位置的16位地址的低11位,它們都為絕對尋址。第三章第三章 單片機匯編程序設計單片機匯編程序設計二相對尋址二相對尋址 相對尋址是以當前程序計數器PC值加上指令中給出的偏移量rel得到目的位置的地址。在MCS-51系統中,相對轉移指令的操作數屬于相對尋址。在使用相對尋址時要注意以下兩點:(1)當前PC值是指轉移指令執行時的PC值,它等于轉移指令的地址加上轉移指令的字節數。實際
14、上是轉移指令的下一條指令的地址。例如:若轉移指令的地址為2010H,轉移指令的長度為2字節,則轉移指令執行時的PC值為2012H。(2)偏移量rel是8位有符號數,以補碼表示,它的取值范圍為-128+127。當為負值時,向前轉移,當為正數時向后轉移。相對尋址的目的地址為:目的地址=當前PC+rel=轉移指令的地址+轉移指令的字節數+rel第三章第三章 單片機匯編程序設計單片機匯編程序設計3.3 MCS-51系列單片機指令系統系列單片機指令系統3.3.1 數據傳送指令數據傳送指令數據傳送指令有29條,是指令系統中數量最多、使用也最頻繁的一類指令。這類指令可分為三組:普通傳送指令、數據交換指令、堆
15、棧操作指令。一普通傳送指令一普通傳送指令 普通傳送指令以助記符MOV為基礎。分成片內數據存儲器傳送指令、片外數據存儲器傳送指令和程序存儲器傳送指令。1片內數據存儲器傳送指令片內數據存儲器傳送指令MOV指令格式:MOV 目的操作數,源操作數其中:源操作數可以為A、Rn、Ri、direct、#data,目的操作數可以為A、Rn、Ri、direct,組合起來總共16條,按目的操作數的尋址方式劃分為五組:第三章第三章 單片機匯編程序設計單片機匯編程序設計(1)以A為目的操作數MOV A,Rn;A RnMOV A,direct ;A(direct)MOV A,Ri ;A(Ri)MOV A,#data ;
16、A #data(2)以Rn為目的操作數MOV Rn,A;Rn AMOV Rn,direct;Rn (direct)MOV Rn,#data;Rn #data(3)以直接地址direct為目的操作數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為目的操作數MOV Ri,A ;(Ri) AMOV Ri,direct;(Ri) (direct)M
17、OV Ri,#data;(Ri) #data(5)以DPTR為目的操作數MOV DPTR,#data16 ;DPTR #data16第三章第三章 單片機匯編程序設計單片機匯編程序設計注意,源操作數和目的操作數中的Rn和Ri不能相互配對。如不允許有“MOV Rn,Rn”,“MOV Ri,Rn”這樣的指令,在MOV指令中,不允許在一條指令中同時出現工作寄存器,無論它是寄存器尋址還是寄存器間接尋址。 2片外數據存儲器傳送指令片外數據存儲器傳送指令MOVX 在MCS-51系統中只能通過累加器A與片外數據存儲器進行數據傳送,訪問時,只能通過Ri和DPTR以間接尋址方式進行。MOVX指令共有四條:MOVX
18、 A,DPTR;A (DPTR)MOVX DPTR,A;(DPTR) AMOVX A,Ri;A (Ri)MOVX Ri,A;(Ri) A 其中前兩條指令通過DPTR間接尋址,可以對整個64K片外數據存儲器訪問。后兩條指令通過Ri間接尋址,只能對片外數據存儲器的低端的256字節訪問,訪問時將低8位地址放于Ri中。第三章第三章 單片機匯編程序設計單片機匯編程序設計3程序存儲器傳送指令程序存儲器傳送指令MOVC 程序存儲器傳送指令只有兩條,一條用DPTR基址變址尋址。一條用PC基址變址尋址。MOVC A,A+DPTR ;A (A+DPTR)MOVC A,A+PC;A (A+PC)這兩條指令通常用于訪
19、問表格數據,因此以稱為查表指令。 例如:查表指令MOVC A,A+PC所在的地址為2000H,表格的起始單元地址為2035H,表格的第4個元素(位移量為03H)的內容為45H,則查表指令的處理過程如下: MOV A,#03H ;表格元素相對于表首的位移量送累加器A ADD A,34H ;當前程序計數器PC相對于表首的差值加到累加器A中 MOVC A,A+PC ;查表,查得第4個元素內容45H送累加器A 注意:查表指令的長度為1個字節,當前程序計數器PC的值應為查表指令的地址加1。第三章第三章 單片機匯編程序設計單片機匯編程序設計【例【例3-1】寫出完成下列功能的程序段?!繉懗鐾瓿上铝泄δ艿某绦?/p>
20、段。(1)將R0的內容送R6中程序為:MOV A,R0MOV R6,A(2)將片內RAM 30H單元的內容送片外60H單元中程序為:MOV A,30HMOV R0,#60HMOVX R0,A(3)將片處RAM 1000H單元的內容送片內20H單元中程序為:MOV DPTR,#1000HMOV A,DPTRMOV 20H,A(4)將ROM 2000H單元的內容送片內RAM的30H單元中程序為:MOV A,#0MOV DPTR,#1000HMOVC A,A+DPTRMOV 30H,A第三章第三章 單片機匯編程序設計單片機匯編程序設計二數據交換指令二數據交換指令 普通傳送指令實現將源操作數的數據傳送
21、到目的操作數,指令執行后源操作數不變,數據傳送是單向的。數據交換指令數據作雙向傳送,傳送后,前一個操作數原來的內容傳送到后一個操作數中,后一個操作數原來的內容傳送到前一個操作數中。 數據交換指令要求第一個操作數須為累加器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的內容為30H,片內RAM 30H單元的內容為23H,累加器A的內容為45H,則執行XCH A,R0指令后片內RAM 30H單元的內容為45H,累加器A中的內容為23H。若
22、執行SWAP A指令,則累加器A的內容為54H。第三章第三章 單片機匯編程序設計單片機匯編程序設計三堆棧操作指令三堆棧操作指令 堆棧是在片內RAM中按“先進后出,后進先出”原則設置的專用存儲區。數據的進棧和出棧由指針SP統一管理。在MCS-51系統中,堆棧操作指令有兩條:PUSH direct;SP(SP+1),(SP)(direct)POP direct;(direct)(SP),(SP) (SP-1) 其中PUSH指令入棧,POP指令出棧。操作時以字節為單位。入棧時SP指針先加1,再入棧。出棧時內容先出棧,SP指針再減1。用堆棧保存數據時,先入棧的內容后出棧;后入棧的內容先出棧。 【例3-
23、3】若入棧保存時入棧的順序為:PUSH APUSH B則出棧的順序為:POP BPOP A第三章第三章 單片機匯編程序設計單片機匯編程序設計3.3.2 算術運算指令算術運算指令一加法指令一加法指令1一般的加法指令一般的加法指令ADDADD A,Rn ;A A + RnADD A,direct;A A +(direct)ADD A,Ri;A A +(Ri)ADD A,#data;A A + #data2帶進位加指令帶進位加指令ADDCADDC A,Rn;A A + Rn + CADDC A,direct;A A +(direct)+ CADDC A,Ri;A A +(Ri)+ CADDC A,#
24、data;A A + #data + C3加加1指令指令INC A;A A + 1INC Rn;Rn Rn + 1INC direct;(direct) (direct)+ 1INC Ri;(Ri)(Ri)+ 1INC DPTR;DPTR DPTR + 1第三章第三章 單片機匯編程序設計單片機匯編程序設計其中,ADD和ADDC指令在執行時要影響CY、AC、OV和P標志位。而INC指令除了INC A要影響P標志位外,對其它標志位都沒有影響。在MCS-51單片機中,常用ADD和ADDC配合使用實現多字節加法運算?!纠纠?-4】試把存放在R1R2和R3R4中的兩個16位數相加,結果存于R5R6中。
25、 處理時,R2和R4用一般的加法指令ADD,結果放于R6中,R1和R3用帶進位的加法指令ADDC,結果放于R5中,程序如下:MOV A,R2ADD A,R4MOV R6,AMOV A,R1ADDC A,R3MOV R5,A第三章第三章 單片機匯編程序設計單片機匯編程序設計二減法指令二減法指令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 R
26、n - 1DEC direct;direct (direct)- 1DEC Ri;(Ri)(Ri)- 1 在MCS-51單片機中,只提供了一種帶借位的減法指令,沒有提供一般的減法指令,一般的減法操作可以通過先對CY標志清零,然后再執行帶借位的減法來實現。其中,SUBB指令在執行時要影響CY、AC、OV和P標志位。而DEC指令除了DEC A要影響P標志位外,對其它標志位都沒有影響。 第三章第三章 單片機匯編程序設計單片機匯編程序設計【例【例3-5】求R3 R2 - R1。程序為:MOV A,R2CLR CSUBB A,R1MOV R3,A3乘法指令乘法指令MUL 在MCS-51單片機中,乘法指令
27、只有一條:MUL AB 該指令執行時將對存放于累加器A中的無符號被乘數和放于B寄存器中的無符號乘數相乘,積的高字節存于B寄存器中,低字節存于累加器A中。 指令執行后將影響CY和OV標志,CY復位,對于OV:當積大于255時(即B中不為0),OV為1;否則,OV為0。第三章第三章 單片機匯編程序設計單片機匯編程序設計4除法指令除法指令DIV 在MCS-51單片機中,除法指令也只有一條:DIV AB 該指令執行時將用存放在累加器A中的無符號被除數與存放在B寄存器中的無符號除數相除,除得的結果,商的存于累加器A中,余數存于B寄存器中。 指令執行后將影響CY和OV標志,一般情況CY和OV都清0,只有當
28、B寄存器中的除數為0時,CY和OV才被置1。5十進制調整指令十進制調整指令 在MCS-51單片機中,十進制調整指令只有一條:DA A 它只能用在ADD或ADDC指令后面,用來對兩個二位的壓縮的BCD碼數通過用ADD或ADDC指令相加后存于累加器A中的結果進行調整,使得它得到正確的十進制結果。通過該指令可實現兩位十進制BCD碼數的加法運算。第三章第三章 單片機匯編程序設計單片機匯編程序設計它的調整過程為:(1)若累加器A的低四位為十六進制的AF或輔助進位標志AC為1,則累加器A中的內容作加06H調整。(2)若累加器A的高四位為十六進制的AF或進位標志CY為1,則累加器A中的內容作加60H調整?!?/p>
29、例【例3-6】在R3中有十進制數67,在R2中有十進制數85,用十進制運算,運算的結果放于R5中。程序為:MOV A,R3ADD A,R2DA AMOV R5,A 程序中DA指令對ADD指令運算出來的放于累加器A中的結果進行調整,調整后,累加器A中的內容為52H,CY為1,則結果為152,最后放于R5中的內容為52H(十進制數52)。第三章第三章 單片機匯編程序設計單片機匯編程序設計3.3.3 邏輯操作指令邏輯操作指令一邏輯與指令一邏輯與指令ANLANL A,Rn A A RnANL A,direct A A (direct)ANL A,Ri A A (Ri)ANL A,#data A A d
30、ataANL direct,A (direct) (direct) AANL direct,#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第三章第三章 單片機匯編程序設計單片機匯編程序設計三邏輯異或指令三邏輯異或指令XRLXRL A,Rn A A RnXRL A,
31、direct A A (direct)XRL A,Ri A A (Ri)XRL A,#data A A dataXRL direct,A (direct) (direct) AXRL direct,#data (direct) (direct) data 在使用中,邏輯與用于實現對指定位清0,其余位不變;邏輯或用于實現對指定位置1,其余位不變;邏輯異或用于實現指定位取反,其余位不變。【例【例3-7】寫出完成下列功能的指令段。1對累加器A中的1、3、5位清0,其余位不變ANL A,#11010101B2對累加器A中的2、4、6位置1,其余位不變ORL A,#01010100B3對累加器A中的0、
32、1位取反,其余位不變XRL A,#00000011B第三章第三章 單片機匯編程序設計單片機匯編程序設計四清零和求反指令四清零和求反指令1清零指令:CLR A A 02求反指令:CPL A A 在MCS-51系統中,只能對累加器A中的內容進行清零和求反,如要對其它的寄存器或存儲單元進行清零和求反,則須放在累加器A進行,運算后再放回原位置?!纠纠?-8】寫出對R0寄存器內容求反的程序段。程序為:MOV A,R0CPL AMOV R0,A五循環移位指令五循環移位指令 MCS-51系統有四條對累加器A的循環移位指令,前兩條只在累加器A中進行循環移位,后兩條還要帶進位標志CY進行循環移位。每一次移一位
33、。分別如下:1累加器A循環左移RL A2累加器A循環右移RR A第三章第三章 單片機匯編程序設計單片機匯編程序設計3帶進位的循環左移RLC A4帶進位的循環右移RRC A【例【例3-9】若累加器A中的內容為10001011B,CY=0,則執行RLC A指令后累加器A中的內容為00010110,CY=1。第三章第三章 單片機匯編程序設計單片機匯編程序設計3.3.4 控制轉移指令控制轉移指令共有17條,包括無條件轉移指令、條件轉移指令、子程序調用及返回指令。一無條件轉移指令一無條件轉移指令 無條件轉移指令是指當執行該指令后,程序將無條件地轉移到指令指定的地方去。無條件轉移指令包括長轉移指令、絕對轉
34、移指令、相對轉移指令和間接轉移指令。1長轉移指令長轉移指令LJMP 指令格式:LJMP addr16;PC addr16 指令后面帶目的位置的16位地址,執行時直接將該16位地址送給程序指針PC,程序無條件地轉到16位目標地址指明的位置去。指令中提供的是16位目標地址,所以可以轉移到64KB程序存儲器的任意位置,故得名為“長轉移”。該指令不影響標志位,使用方便。缺點是:執行時間長,字節數多。第三章第三章 單片機匯編程序設計單片機匯編程序設計2絕對轉移指令絕對轉移指令指令格式:AJMP addr11;PC100 addr11 AJMP指令后帶的是目的位置的低11位直接地址,執行時,先將程序指針P
35、C的值加2(該指令長度為2字節),然后把指令中的11位地址addr11送給程序指針PC的低11位,而程序指針的高5位不變,執行后轉移到PC指針指向的新位置。 由于11位地址addr11的范圍是0000000000011111111111,即2KB范圍,而目的地址的高5位不變,所以程序轉移的位置只能是和當前PC位置(AJMP指令地址加2)在同一2KB范圍內。轉移可以向前也可以向后,指令執行后不影響狀態標志位?!纠纠?-10】若AJMP指令地址為3000H。AJMP后面帶的11位地址addr11為123H,則執行指令AJMP addr11后轉移的目的位置是多少? AJMP指令的PC值加2=300
36、0H+2=3002H=00110 000 00000010B 指令中的addr11=123H=001 00100011B 轉移的目的地址為00110 001 00100101B=3125H第三章第三章 單片機匯編程序設計單片機匯編程序設計3相對轉移指令相對轉移指令指令格式:SJMP rel ;PC PC + 2 + rel SJMP指令后面的操作數rel是8位帶符號補碼數,執行時,先將程序指針PC的值加2(該指令長度為2字節),然后再將程序指針PC的值與指令中的位移量rel相加得轉移的目的地址。即:轉移的目的地址= SJMP指令所在地址+2+rel 因為8位補碼的取值范圍為-128+127,所
37、以該指令的轉移范圍是:相對PC當前值向前128字節,向后127字節。【例【例3-11】在2100H單元有SJMP指令,若rel = 5AH(正數),則轉移目的地址為215CH(向后轉);若rel = F0H(負數),則轉移目的地址為20F2H(向前轉)。 用匯編語言編程時,指令中的相對地址rel往往用目的位置的標號(符號地址)表示。機器匯編時,能自動算出相對地址值;但手工匯編時,需自己計算相對地址值rel。rel的計算方法如下: rel = 目的地址(SJMP指令地址) 如目的地址等于2013H,SJMP指令的地址為2000H,則相對地址rel為11H。第三章第三章 單片機匯編程序設計單片機匯
38、編程序設計注意:在單片機程序設計中,通常用到一條SJMP指令:SJMP $ 該指令的功能是在自己本身上循環,進入等待狀態。其中符號 $ 表示轉移到本身,它的機器碼為80 FEH。在程序設計中,程序的最后一條指令通常用它,使程序不再向后執行以避免執行后面的內容而出錯。 4間接轉移指令間接轉移指令 指令格式:JMP A+DPTR;PC A + DPTR 它MCS-51系統中唯一一條間接轉移指令,轉移的目的地址是由數據指針DPTR的內容與累加器A中的內容相加得到,指令執行后不會改變DPTR及A中原來的內容。數據指針DPTR的內容一般為基址,累加器A的內容為相對偏移量,在64 KB范圍內無條件轉移。
39、該指令的特點是轉移地址可以在程序運行中加以改變。DPTR一般為確定值,根據累加器A的值來實現轉移到不同的分支。在使用時往往與一個轉移指令表一起來實現多分支轉移。第三章第三章 單片機匯編程序設計單片機匯編程序設計【例【例3-12】下面的程序能根據累加器A的值0、2、4、6轉移到相應的TAB0TA6分支去執行。MOV DPTR,#TABLE ;表首地址送DPTRJMP A+DPTR ;根據A值轉移TABLE:AJMP TAB0 ;當(A)=0時轉TAB0執行AJMP TAB2 ;當(A)=2時轉TAB2執行AJMP TAB4 ;當(A)=4時轉TAB4執行AJMP TAB6 ;當(A)=6時轉TA
40、B6執行二條件轉移指令二條件轉移指令 條件轉移指令是指當條件滿足時,程序轉移到指定位置,條件不滿足時,程序將繼續順次執行。在MCS-51系統中,條件轉移指令有三種:累加器A判零條件轉移指令、比較轉移指令、減1不為零轉移指令。1累加器累加器A判零條件轉移指令判零條件轉移指令判0指令:JZ rel ;若A=0,則PC PC + 2 + rel,否則,PC PC + 2判非0指令:JNZ rel ;若A0,則PC PC + 2 + rel,否則,PC PC + 2 第三章第三章 單片機匯編程序設計單片機匯編程序設計【例【例3-13】把片外RAM的30H單元開始的數據塊傳送到片內RAM的40H開始的位
41、置,直到出現零為止。 片內、片外數據傳送以累加器A過渡。每次傳送一個字節,通過循環處理,直到處理到傳送的內容為0結束。程序如下:MOV R0,#30HMOV R1,#40HLOOP:MOVX A,R0MOV R1,AINC R1INC R0JNZ LOOPSJMP $第三章第三章 單片機匯編程序設計單片機匯編程序設計2比較轉移指令比較轉移指令比較轉移指令用于對兩個數作比較,并根據比較情況進行轉移,比較轉移指令有四條:CJNE A,#data,rel ;若A=data,則PC PC + 3,不轉移,繼續執行若Adata,則C=0,PC PC + 3 + rel,轉移若Adata,則C=0,PC
42、PC + 3 + rel,轉移若(Rn)data,則C=0,PC PC + 3 + rel,轉移若(Ri)direct,則C=0,PC PC + 3 + rel,轉移若Adirect,則C=1,PC PC + 3 + rel,轉移第三章第三章 單片機匯編程序設計單片機匯編程序設計3減減1不為零轉移指令不為零轉移指令這種指令是先減1后判斷,若不為零則轉移。指令有兩條:DJNZ Rn,rel ;先Rn中的內容減1,再判斷Rn中的內容是否等于零,若不為零,則轉移。DJNZ direct,rel ;先(direct)中的內容減1,再判斷(direct)中的內容是否等于零,若不為零,則轉移。在MCS-5
43、1系統中,通常用DJNZ指令來構造循環結構,實現重復處理。第三章第三章 單片機匯編程序設計單片機匯編程序設計【例【例3-14】統計片內RAM中30H單元開始的20個數據中0個數,放于R7中。 用R2作循環變量,最開始置初值為20;作R7作計數器,最開始置初值為0;用R0作指針訪問片內RAM單元,最開始置初值為30H;用DJNZ指令對R2減1轉移進行循環控制,在循環體中用指針R0依次取出片內RAM中的數據,判斷,如為0,則R7中的內容加1。程序:MOV R0,#30HMOV R2,#20MOV R7,#0LOOP:MOV A,R0CJNE A,#0,NEXTINC R7NEXT:INC R0DJ
44、NZ R2,LOOP第三章第三章 單片機匯編程序設計單片機匯編程序設計三子程序調用及返回指令三子程序調用及返回指令這類指令有四條。兩條子程序調用指令,兩條返回指令。1長調用指令長調用指令指令格式:LCALL addr16執行過程:(PC)(PC)+3(SP)(SP)+1(SP)(PC)70(SP)(SP)+1(SP)(PC)158(PC)addr16 該指令執行時,先將當前的PC(指令的PC加指令的字節數3)值壓入堆棧保存,入棧時先低字節,后高字節。然后轉移到指令中addr16所指定的地方執行。由于后面帶16位地址,因而可以轉移到程序存儲空間的任一位置。第三章第三章 單片機匯編程序設計單片機匯
45、編程序設計2絕對調用指令絕對調用指令指令格式:ACALL addr11執行過程:(PC)(PC)+2(SP)(SP)+1(SP)(PC)70(SP)(SP)+1(SP)(PC)158(PC)100addr11 該指令執行過程與LCALL指令類似,只是該指令與AJMP一樣只能實現2KB范圍內轉移,執行的最后是將指令中的addr11送給PC指針的低11位。 對于LCALL和ACALL兩條子程序調用指令,在匯編程序中,指令后面通常帶轉移位置的標號,用LCALL指令調用,轉移位置可以是程序存儲空間的任一位置,用ACALL指令調用,轉移位置與ACALL指令的下一條指令必須在同一個2KB內,即它們的高5位
46、地址相同。第三章第三章 單片機匯編程序設計單片機匯編程序設計3子程序返回指令子程序返回指令指令格式:RET執行過程:(PC)158(SP)(SP)(SP)-1(PC)70(SP)(SP)(SP)-1 執行時將子程序調用指令壓入堆棧的地址出棧,第一次出棧的內容送PC的高8位,第二次出棧的內容送PC的低8位。執行完后,程序轉移到新的PC位置執行指令。由于子程序調用指令執行時壓入的內容是調用指令的下一條指令的地址,因而RET指令執行后,程序將返回到調用指令的下一條指令執行。 該指令通常放于子程序的最后一條指令位置,用于實現返回到主程序。另外,在MCS-51程序設計中,也常用RET指令來實現程序轉移,
47、處理時先將轉移位置的地址用兩條PUSH指令入棧,低字節在前,高字節在后,然后執行RET指令,執行后程序轉移到相應的位置去執行。第三章第三章 單片機匯編程序設計單片機匯編程序設計4中斷返回指令中斷返回指令指令格式:RETI執行過程:(PC)158(SP)(SP)(SP)-1(PC)70(SP)(SP)(SP)-1 該指令的執行過程與RET基本相同,只是RETI在執行后,在轉移之前將先清除中斷的優先級觸發器。該指令用于中斷服務子程序后面,作為中斷服務子程序的最后一條指令,它的功能是返回主程序中斷的斷點位置,繼續執行斷點位置后面的指令。 在MCS-51系統中,中斷都是硬件中斷,沒有軟件中斷調用指令,
48、硬件中斷時,由一條長轉移指令使程序轉移到中斷服務程序的入口位置,在轉移之前,由硬件將當前的斷點地址壓入堆棧保存,以便于以后通過中斷返回指令返回到斷點位置后繼續執行。第三章第三章 單片機匯編程序設計單片機匯編程序設計3.3.5 位操作指令位操作指令 在MCS-51系統中,有17條位處理指令,可以實現位傳送、位邏輯運算、位控制轉移等操作。一位傳送指令一位傳送指令 位傳送指令有兩條,用于實現位運算器C與一般位之間的相互傳送。MOV C,bit;C(bit)MOV bit,C;(bit)C 指令在使用時必須有位運算器C參與,不能直接實現兩位之間的傳送。如果進行兩位之間的傳送,可以通過位運算器C來傳送。
49、【例【例3-15】把片內RAM中位尋址區的20H位的內容傳送到30H位。程序:MOV C,20HMOV 30H,C第三章第三章 單片機匯編程序設計單片機匯編程序設計二位邏輯操作指令二位邏輯操作指令位邏輯操作指令包括位清0、置1、取反、位與和位或,總共10位指令。1位清0CLR C ;C0CLR bit;(bit)02位置1SETB C;C1SETB bit;(bit)13位取反CPL 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)第三章第三章
50、 單片機匯編程序設計單片機匯編程序設計利用位邏輯運算指令可以實現各種各樣的邏輯功能。【例例3-16】利用位邏輯運算指令編程實現下面硬件邏輯電路的功能。與或或與P1.0P1.1P1.2P1.3P1.4P1.5第三章第三章 單片機匯編程序設計單片機匯編程序設計程序:MOV C,P1.0ANL C,P1.1CPL CORL C,/P1.2MOV 0F0H,CMOV C,P1.3ORL C,P1.4ANL C,0F0HMOV P1.5,C三位轉移指令三位轉移指令位轉移指令有以C為條件的位轉移指令和以bit為條件的位轉移指令,共5條。1以以C條件的位轉移指令條件的位轉移指令JC rel; 若C=1,則轉
51、移,PCPC+2+rel;否則程序繼續執行JNC rel; 若C=0,則轉移,PCPC+2+rel;否則程序繼續執行第三章第三章 單片機匯編程序設計單片機匯編程序設計2以以bit為條件的位轉移指令為條件的位轉移指令JB bit,rel; 若(bit)=1,則轉移,PCPC+3+rel;否則程序繼續執行JNB bit,rel ; 若(bit)=0,則轉移,PCPC+3+rel;否則程序繼續執行JBC bit,rel ; 若(bit)=1,則轉移,PCPC+3+rel,且(bit)0;否則程序繼續執行利用位轉移指令可進行各種測試?!纠纠?-17】從片外RAM中30H單元開始有100個數據,統計當
52、中正數、0、和負數的個數,分別放于R5、R6、R7中。 設用R2作計數器,用DJNZ指令對R2減1轉移進行循環控制,在循環體外設置R0指針,指向片外RAM 30H單元,對R5、R6、R7清零,在循環體中用指針R0依次取出片外RAM中的100個數據,判斷,如大于0,則R5中的內容加1;如等于0,則R6中的內容加1;如小于0,則R7中的內容加1。第三章第三章 單片機匯編程序設計單片機匯編程序設計程序:MOV R2,#100MOV R0,#30HMOV R5,#0MOV R6,#0MOV R7,#0LOOP:MOVX A,R0CJNE A,#0,NEXT1INC R6SJMP NEXT3NEXT1:
53、CLR CSUBB A,#0JNC NEXT2INC R5SJMP NEXT3NEXT2:INC R7NEXT3:DJNZ R2,LOOPSJMP $第三章第三章 單片機匯編程序設計單片機匯編程序設計四空操作指令四空操作指令NOP ;PC PC+1 這是一條單字節指令。執行時,不作任何操作(即空操作),僅將程序計數器PC的內容加1,使CPU指向下一條指令繼續執行程序。它要占用一個機器周期,常用來產生時間延遲,構造延時程序。第三章第三章 單片機匯編程序設計單片機匯編程序設計3.4 MCS-51系列單片機匯編程序常用偽指令系列單片機匯編程序常用偽指令 偽指令是放在匯編語言源程序中用于指示匯編程序如
54、何對源程序進行匯編的指令,它不同于指令系統中的指令,指令系統中的指令在匯編程序匯編時能夠產生相應的指令代碼,而偽指令在匯編程序匯編時不會產生代碼,只是對匯編過程進行相應的控制和說明。 偽指令通常在匯編語言源程序中用于定義數據、分配存儲空間、控制程序的輸入輸出等。MCS-51匯編語言源程序相對于一般的微型計算機匯編語言源程序結構簡單,偽指令數目少,常用的偽指令只有幾條。1ORG偽指令偽指令格式:ORG 地址(十六進制表示)這條偽指令放于一段源程序或數據的前面,匯編時用于指明程序或數據從程序存儲空間什么位置開始存放。ORG偽指令后的地址是程序或數據的起始地址?!纠纠?-18】 ORG 1000H
55、START:MOV A,#7FH 指明后面的程序從程序存儲器的1000H單元開始存放。第三章第三章 單片機匯編程序設計單片機匯編程序設計2DB偽指令偽指令格式:標號: DB 項或項表 DB偽指令用于定義字節數據,可以定義一個字節,也可定義多個字節,字義多個字節時,兩兩之間用逗號間隔,定義的多個字節在存儲器中是連續存放的。定義的字節可以是一般常數,也可以為字符,還可以是字符串,字符和字符串以引號括起來,字符數據在存儲器中以ASCII碼形式存放。在定義時前面可以帶標號,定義的標號在程序中是起始單元的地址?!纠纠?-19】 ORG 3000HTAB1: DB 12H,34HDB 5,A,abc匯編
56、后,各個數據在存儲單元中的存放情況如下:12H34H35H41H61H62H63H3000H3001H3002H3003H3004H3005H3006H第三章第三章 單片機匯編程序設計單片機匯編程序設計3DW偽指令偽指令格式:標號: DW 項或項表 這條指令與DB相似,但用于定義字數據。項或項表指所定義的一個字在存儲器中占兩個字節。匯編時,機器自動按低字節在前,高字節在后,即低字節存放在低地址單元,高字節存放在高地址單元?!纠纠?-20】 ORG 3000HTAB2:DW 1234H,5678H匯編后,各個數據在存儲單元中的存放情況如下:34H12H78H56H3000H3001H3002H3003H第三章第三章 單片機匯編程序設計單片機匯編程序設計4DS偽指令偽指令格式:標號: DS 數值表達式 該偽指令用在存儲器中保留一定數量的字節單元。保留存貯空間主要為以后存放數據。保留的字節單元數由表達式的值決定?!纠纠?-21】 ORG 2000HTAB1: DB 12H,34HDS 4HDB 5匯編后,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋪裝材料試驗相關試題及答案
- 信息摘錄三級數據庫考試試題及答案
- 公司行為規范管理制度
- 臺燈廠家儲存管理制度
- 工作職責授權管理制度
- 行政管理與智能化應用的結合試題及答案
- 衛生系統項目管理制度
- 發票系統單據管理制度
- 小區魚塘養護管理制度
- 工程公司公司管理制度
- 2022年湖南省株洲二中自主招生數學試卷
- 《組織簽字儀式》課件
- 教科版(2024)科學一年級下冊期末素養測評(A卷) (含答案)
- 安全駕駛培訓課件
- 2025年人博會貴州出版集團有限公司招聘筆試參考題庫含答案解析
- 駕駛員心理健康教育培訓課件
- 工廠環保知識培訓
- 部編版四年級語文下冊第六單元教學計劃(含課標分析、教材分析、單元教學目標、教學策略、學情分析等)
- 中小學心理健康教育現狀問題與發展趨勢
- 《腦出血護理》課件
- 《神華新疆能源有限責任公司瑪納斯澇壩灣煤礦礦山地質環境保護與土地復墾方案》
評論
0/150
提交評論