Ⅰ 單片機的基本指令有哪些
不知道你是問的哪種單片機下面給你的是MCS-51的,希望對你有幫助,如有,麻煩採納,謝謝 數據傳送指令共有29條,數據傳送指令一般的操作是把源操作數傳送到目的操作數,指令執行完成後,源操作數不變,目的操作數等於源操作數。如果要求在進行數據傳送時,目的操作數不丟失,則不能用直接傳送指令,而採用交換型的數據傳送指令,數據傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。 x0dx0ax0dx0a[1]. 以累加器A為目的操作數類指令(4條) x0dx0a這4條指令的作用是把源操作數指向的內容送到累加器A。有直接、立即數、寄存器和寄存器間接定址方式: x0dx0ax0dx0aMOV A,data ;(data)→(A) 直接單元地址中的內容送到累加器A x0dx0aMOV A,#data ;#data→(A) 立即數送到累加器A中 x0dx0aMOV A,Rn ;(Rn)→(A) Rn中的內容送到累加器A中 x0dx0aMOV A,@Ri ;((Ri))→(A) Ri內容指向的地址單元中的內容送到累加器A x0dx0ax0dx0a[2]. 以寄存器Rn為目的操作數的指令(3條) x0dx0a這3條指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。有直接、立即和寄存器定址方式: x0dx0ax0dx0aMOV Rn,data ;(data)→(Rn) 直接定址單元中的內容送到寄存器Rn中 x0dx0aMOV Rn,#data ;#data→(Rn) 立即數直接送到寄存器Rn中 x0dx0aMOV Rn,A ;(A)→(Rn) 累加器A中的內容送到寄存器Rn中 x0dx0ax0dx0a[3]. 以直接地址為目的操作數的指令(5條) x0dx0a這組指令的功能是把源操作數指定的內容送到由直接地址data所選定的片內RAM中。有直接、立即、寄存器和寄存器間接4種定址方式: x0dx0ax0dx0aMOV data,data ;(data)→(data) 直接地址單元中的內容送到直接地址單元 x0dx0aMOV data,#data ;#data→(data) 立即數送到直接地址單元 x0dx0aMOV data,A ;(A)→(data) 累加器A中的內容送到直接地址單元 x0dx0aMOV data,Rn ;(Rn)→(data) 寄存器Rn中的內容送到直接地址單元 x0dx0aMOV data,@Ri ;((Ri))→(data) 寄存器Ri中的內容指定的地址單元中數據送到直接地址單元 x0dx0ax0dx0a[4]. 以間接地址為目的操作數的指令(3條) x0dx0a這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。有直接、立即和寄存器3種定址方式: x0dx0ax0dx0aMOV @Ri,data ;(data)→((Ri)) 直接地址單元中的內容送到以Ri中的內容為地址的RAM單元 x0dx0aMOV @Ri,#data ;#data→((Ri)) 立即數送到以Ri中的內容為地址的RAM單元 x0dx0aMOV @Ri,A ;(A)→((Ri)) 累加器A中的內容送到以Ri中的內容為地址的RAM單元 x0dx0ax0dx0a[5]. 查表指令(2條) x0dx0a這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送,使用變址定址方式: x0dx0ax0dx0aMOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址單元中的內容送到累加器A中 x0dx0aMOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內容送到累加器A中 x0dx0ax0dx0a[6]. 累加器A與片外數據存儲器RAM傳送指令(4條) x0dx0a這4條指令的作用是累加器A與片外RAM間的數據傳送。使用寄存器定址方式: x0dx0ax0dx0aMOVX @DPTR,A ;(A)→((DPTR)) 累加器中的內容送到數據指針指向片外RAM地址中 x0dx0aMOVX A, @DPTR ;((DPTR))→(A) 數據指針指向片外RAM地址中的內容送到累加器A中 x0dx0aMOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內容送到累加器A中 x0dx0aMOVX @Ri,A ;(A)→((Ri)) 累加器中的內容送到寄存器Ri指向片外RAM地址中 x0dx0ax0dx0a[7]. 堆棧操作類指令(2條) x0dx0a這4類指令的作用是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位後,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數據必須存放於SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。 x0dx0ax0dx0aPUSH data ;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接定址單元中的數據送到堆棧指針SP所指的單元中 x0dx0aPOP data ;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數據送到直接定址單元中,堆棧指針SP再進行減1操作 x0dx0ax0dx0a[8]. 交換指令(5條) x0dx0a這5條指令的功能是把累加器A中的內容與源操作數所指的數據相互交換。 x0dx0ax0dx0aXCH A,Rn ;(A)←→(Rn)累加器與工作寄存器Rn中的內容互換 x0dx0aXCH A,@Ri ;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內容互換 x0dx0aXCH A,data ;(A)←→(data)累加器與直接地址單元中的內容互換 x0dx0aXCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器與工作寄存器Ri所指的存儲單元中的內容低半位元組互換 x0dx0aSWAP A ;(A 3-0 )←→(A 7-4 )累加器中的內容高低半位元組互換 x0dx0ax0dx0a[9]. 16位數據傳送指令(1條) x0dx0a這條指令的功能是把16位常數送入數據指針寄存器。 x0dx0ax0dx0aMOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常數的高8位送到DPH,低8位送到DPL x0dx0ax0dx0aMCS-51算術運算指令 x0dx0ax0dx0a算術運算指令共有24條,算術運算主要是執行加、減、乘、除法四則運算。另外MCS-51指令系統中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數進行運算,但利用進位標志C,則可進行多位元組無符號整數的運算。同時利用溢出標志,還可以對帶符號數進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數都會對PSW(程序狀態字)有影響。這在使用中應特別注意。 x0dx0ax0dx0a[1]. 加法指令(4條) x0dx0a這4條指令的作用是把立即數,直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。 x0dx0ax0dx0aADD A,#data ;(A)+#data→(A) 累加器A中的內容與立即數#data相加,結果存在A中 x0dx0aADD A,data ;(A)+(data)→(A) 累加器A中的內容與直接地址單元中的內容相加,結果存在A中 x0dx0aADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中 x0dx0aADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中 x0dx0ax0dx0a[2]. 帶進位加法指令(4條) x0dx0a這4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。 x0dx0ax0dx0aADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中 x0dx0aADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內容與立即數連同進位位相加,結果存在A中 x0dx0aADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中 x0dx0aADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A中 x0dx0ax0dx0a[3]. 帶借位減法指令(4條) x0dx0a這組指令包含立即數、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。 x0dx0a這里我們對借位位C的狀態作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數相減時,從一個正數減去一個負數結果為負數,或者從一個負數中減去一個正數結果為正數的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態,則應先對CY進行清零操作。 x0dx0ax0dx0aSUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A中 x0dx0aSUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內容與立即數、連同借位位相減,結果存在A中 x0dx0aSUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A中 x0dx0aSUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A中 x0dx0ax0dx0a[4]. 乘法指令(1條) x0dx0a這個指令的作用是把累加器A和寄存器B中的8位無符號數相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大於FFH,否則OV=0,但進位標志位CY總是等於0。 x0dx0ax0dx0aMUL AB ;(A)×(B)→(A)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B中 x0dx0ax0dx0a[5]. 除法指令(1條) x0dx0a這個指令的作用是把累加器A的8位無符號整數除以寄存器B中的8位無符號整數,所得到的商存在累加器A,而余數存在寄存器B中。除法運算總是使OV和進位標志位CY等於0。如果OV=1,表明寄存器B中的內容為00H,那麼執行結果為不確定值,表示除法有溢出。 x0dx0ax0dx0aDIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數存在寄存器B中。 x0dx0ax0dx0a[6]. 加1指令(5條) x0dx0a這5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執行加1後,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等定址方式: x0dx0ax0dx0aINC A ;(A)+1→(A) 累加器A中的內容加1,結果存在A中 x0dx0aINC data ;(data)+1→(data) 直接地址單元中的內容加1,結果送回原地址單元中 x0dx0aINC @Ri ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中 x0dx0aINC Rn ;(Rn)+1→(Rn)寄存器Rn的內容加1,結果送回原地址單元中 x0dx0aINC DPTR ;(DPTR)+1→(DPTR)數據指針的內容加1,結果送回數據指針中 x0dx0ax0dx0a在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然後在CPU進行加1操作,再輸出到I/O上,這就是「讀—修改—寫」操作。 x0dx0ax0dx0a[7]. 減1指令(4條) x0dx0a這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1後即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等定址方式,當直接地址是I/O口鎖存器時,「讀—修改—寫」操作與加1指令類似。 x0dx0ax0dx0aDEC A ;(A)-1→(A)累加器A中的內容減1,結果送回累加器A中 x0dx0aDEC data ;(data)-1→(data)直接地址單元中的內容減1,結果送回直接地址單元中 x0dx0aDEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中 x0dx0ax0dx0aDEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內容減1,結果送回寄存器Rn中 x0dx0ax0dx0a[8]. 十進制調整指令(1條) x0dx0a在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之後,其功能是將執行加法運算後存於累加器A中的結果進行調整和修正。 x0dx0ax0dx0aDA A x0dx0ax0dx0aMCS-51邏輯運算及移位指令 x0dx0ax0dx0a邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等定址方式。這類指令一般不影響程序狀態字(PSW)標志。 x0dx0ax0dx0a[1]. 循環移位指令(4條) x0dx0a這4條指令的作用是將累加器中的內容循環左或右移一位,後兩條指令是連同進位位CY一起移位。 x0dx0ax0dx0aRL A ;累加器A中的內容左移一位 x0dx0aRR A ;累加器A中的內容右移一位 x0dx0aRLC A ;累加器A中的內容連同進位位CY左移一位 x0dx0aRRC A ;累加器A中的內容連同進位位CY右移一位 x0dx0ax0dx0a[2]. 累加器半位元組交換指令(1條) x0dx0a這條指令是將累加器中的內容高低半位元組互換,這在上一節中內容已有介紹。 x0dx0ax0dx0aSWAP A ; 累加器中的內容高低半位元組互換 x0dx0ax0dx0a[3]. 求反指令(1條) x0dx0a這條指令將累加器中的內容按位取反。 x0dx0ax0dx0aCPL A ; 累加器中的內容按位取反 x0dx0ax0dx0a[4]. 清零指令(1條) x0dx0a這條指令將累加器中的內容清0。 x0dx0ax0dx0aCLR A ; 0→(A),累加器中的內容清0 x0dx0ax0dx0a[5]. 邏輯與操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯與操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。 x0dx0aANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。 x0dx0aANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。 x0dx0aANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。 x0dx0aANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。 x0dx0aANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。 x0dx0ax0dx0a[6]. 邏輯或操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。 x0dx0aORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。 x0dx0aORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。 x0dx0aORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。 x0dx0aORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。 x0dx0aORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。 x0dx0ax0dx0a[7]. 邏輯異或操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯異或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aXRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。 x0dx0aXRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。 x0dx0aXRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。 x0dx0aXRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。 x0dx0aXRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。 x0dx0aXRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中。 x0dx0ax0dx0aMCS-51控制轉移指令 x0dx0ax0dx0a控制轉移指令用於控製程序的流向,所控制的范圍即為程序存儲器區間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB位元組進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執行一般都不會對標志位有影響。 x0dx0ax0dx0a[1]. 無條件轉移指令(4條) x0dx0a這組指令執行完後,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。 x0dx0ax0dx0aLJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址) x0dx0ax0dx0aAJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序計數器賦予新值(11位地址),(PC 15-11 )不改變 x0dx0ax0dx0aSJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值 x0dx0ax0dx0aJMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值 x0dx0ax0dx0a[2]. 條件轉移指令(8條) x0dx0a程序可利用這組豐富的指令根據當前的條件進行判斷,看是否滿足某種特定的條件,從而控製程序的轉向。 x0dx0ax0dx0aJZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aJNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aDJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aDJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內容減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0a[3]. 子程序調用指令(1條) x0dx0a子程序是為了便於程序編寫,減少那些需反復執行的程序佔用多餘的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調用命令使程序按調用的地址去執行,這就需要子程序的調用指令和返回指令。 x0dx0ax0dx0aLCALL addr16 ; 長調用指令,可在64kB空間調用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分別從堆棧中彈出調用子程序時壓入的返回地址 x0dx0ax0dx0aACALL addr11 ; 絕對調用指令,可在2kB空間調用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 ) x0dx0ax0dx0aRET ; 子程序返回指令。此時(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP) x0dx0ax0dx
Ⅱ 單片機若(A)=5AH,執行指令「XRL A,#0FH」後,A中的數據為 ( D )
XRL指異或,當相應位上兩個相同(都是0或都是1)時結果為0,不同(一個0一個1)時結果為1。
01011010B=5AH
00001111B=0FH
-------------
01010101B=55H
答案選C
Ⅲ 有關單片機的指令系統,專業的來
不讓發那麼多 所有分兩次 這里接上面的4.循環移位指令(4條)
循環移位指令的功能是將累加器A中內容循環位移或者和進位位一起移位。
例 A=01H, Cy=1
若執行一次 RRC A後,結果為:A=10000000B Cy=1
若執行一次 RLC A後,結果為:A=00000011B Cy=0
5.取反、清0指令
CPL A ;累加器內容按位取反。如果1就變0,如果0就變1
CLR A ;累加器A清0 控制轉移類指令計算機運行過程中,有時因為操作的需要,程序不能按順序逐條執行指令,需要改變程序運行方向,即將程序跳轉到某個指定的地址再順序執行下去。
控制轉移類指令的功能就是根據要求修改程序計數器PC的內容,以改變程序運行方向,實現轉移。
控制轉移類指令可分為:無條件轉移、條件轉移、絕對轉移、相對轉移和調用、返回指令。下面我們將分類介紹。
1.無條件轉移指令(4條)
LJMP add16 ;add16→PC,無條件跳轉到add16地址,可在64KB范圍內
轉移,稱為長轉移指令
AJMP add11 ;add11→PC,無條件轉向add11地址,在2KB范圍內轉移
SJMP rel ;PC+2+rel→PC,相對轉移,rel是偏移量,8 位有符號
數,范圍-128~127,即可向後跳轉128,向前可跳轉127
JMP @A+DPTR ;A+DPTR→PC ,屬散轉指令,無條件轉向A與DPTR內容相
加後形成的新地址
例1 執行指令
LJMP 9100H
不管這條指令存放在哪裡,執行時將使程序轉移到9100H,和AJMP,SJMP指令是有差別的。
例2 程序
2000H MOV R0 , #10H ;10H→PC
2002H SJMP 03H ;PC+2+rel=2002H+2+03H=2007H→PC
┇ ┇
2006H ┇
2007H ┇
從說明中可見,執行SJMP 03H 指令後,馬上跳轉到2007H地址執行程序。
2.條件轉移指令(8條)
條件轉移指令是根據某種特定條件轉移的指令。條件滿足時轉移,條件不滿足時則順序
執行下面的指令。
JZ rel ;A=0轉向PC+2+rel→PC,A≠0順序執行
JNZ rel ;A≠轉向PC+2+rel→PC ,A=0順序執行
CJNE A, direct, rel ;A≠ (direct)轉向PC+3+rel→PC且當A>(direct),Cy=0
;當A<(direct),Cy=1
;否則A=(direct),PC+3→PC即順序執行
CJNE A, #data, rel ;A data P轉向PC+3+rel→PC且當A >data,Cy=0
;當A <data,Cy=1,
;A=data,PC+3→PC順序執行
CJNZ Rn, #data, rel ;Rn≠data轉向PC+3+rel→PC
;且當Rn>data,Cy=0,當Rn<data,Cy=1
;Rn=data,PC+3→PC順序執行
CJNE @Ri,#data, rel ;(Ri) ≠data ,PC+3+rel→PC
;且當(Ri)>data ,Cy=0,當(Ri)<data,Cy=1
;(Ri)=data, PC+3→PC順序執行
DJNZ Rn, rel ;Rn-1→Rn ,Rn ≠0轉向PC+2+rel→PC
;Rn=0,PC+2→PC順序執行
DJNZ direct, rel ;(direct)-1→(direct),(direct) ≠0轉向 PC+2+rel
→PC
;(direct)=0 ,PC+2→PC順序執行
注意:
1)CJNE類指令借用進位標志Cy作為比較結果的標志位。從指令中可知,目的操作數內容小於原操作數內容Cy置1,反之Cy清0,該類指令多用於分支程序。
2) DJNZ指令執行時Rn或direct先減1,然後再判斷Rn或direct內容是否等於0。不為0則轉,為0順序執行。DJNZ用在循環程序中,控制循環次數很方便。
3) JZ和JNZ的操作數只有一個,是對A的內容的進行判斷的指令。
例1 以下程序的循環次數是多少,最後(R0)=?
MOV R0 , #0
LL: ┇
DJNZ R0 , LL
分析:由於DJNZ是減1再判斷大小的,因為R0=0,所以第一次執行DJNZ R0 , LL後R0=FFH=255,則程序要執行的次數為256次,R0最後的值為0。
解:程序要循環的次數為256次,最後R0=0
3.調用、返回、控操作指令
在程序設計中,常常要把具有一定功能的公用程序編製成子程序。當主程序轉至子
程序時用調用指令,而在子程序的最後安排一條返回指令,使執行完子程序後再返回到主程序。
(1) LCALL addr16 ;調用入口地址為addr16的子程序
這是一條長調指令,可調用64KB范圍內的子程序,因此,可放在程序的任何位置。
指令的執行過程分兩步:第一步把斷點(當前執行指令的下一條指令地址)壓入堆棧。第二步將調用的子程序的入口地址裝入PC。即addr16(16位地址)→PC,轉向執行子程序。
(2) ACALL addr11 ;子程序入口地址為addr11的子程序
這是一條短調指令,只能實現2KB范圍內的子程序的調用。其指令執行過程與LCALL
指令一樣。但是需要注意的是:ACALL中addr11隻佔用PC的PC.0~PC.10位。
(3) RET ;放在子程序最後,使程序准確返回到主程序斷點處
執行過程為:(SP)→PC.8~PC.15斷點地址高位元組送入PC
SP-1→SP,(SP) →PC.0~PC.7斷點低位元組送入PC,
這時PC中為主程序斷點地址,程序准確返回到調用指令的下一條。
例 設SP=62H,(62H)=07H,(61H)=30H,執行指令RET
結果:SP=60H,(PC)=0730H,CPU從0730H開始執行程序。
(4) RETI ;中斷返回指令
該指令用於中斷服務程序,使中斷程序結束後准確返回到主程序斷點處,執行過程同RET,它還能清除優先順序狀態。
(5) NOP ;空操作
執行該指令時,CPU只進行取指令、解碼,而不進行任何操作,故稱為控操作。常用於產生一個機器周期延時。位操作指令MCS-51單片機的特色之一是具有很強的位處理功能。位操作指令又稱為布爾指令,其功能是對內部RAM中可進行位操作的區域進行位操作。
在進行位操作時,位累加器C即進位標志Cy,位地址是片內RAM位元組地址20H~2FH單元中連續的128個位(位地址00H~7FH)和部分功能寄存器。凡SFR中字元等地址能被8整除的特殊功能寄存器都具有可定址的位地址,其中ACC(位地址E0H~E7H),B(位地址F0H~F7H)和片內RAM中128個位都可作軟體標志或存儲位變數。
1. 位數據傳送類指令(2條)
MOV C , bit ;(bit) →C,定址位的狀態送入C
MOV bit , C ;C→(bit),C的狀態送入位地址中
2. 位修正指令(6條)
CLR C ;0→C, 清0累加器
CLR bit ;0→(bit);清0定址位
CPL C ;/C→C,取反
CPL bit ;(/bit) →(bit),定址位取反
SETB C ;1→C,C置1
SETB bit ;1→ (bit),定址位置1
3. 位邏輯運算指令(4條)
ANL C , bit ;C∩(bit) →C,定址位和C「與」,結果放在C
ANL C , /bit ;C∩(/bit) →C,定址位的非和C「與」,結果放在C
ORL C , bit ;C∪(bit) →C,定址位和C「或」,結果放在C
ORL C , /bit ;C∪(bit) →C,定址位和C的非「或」,結果放在C
4. 位條件轉移指令(5條)
JC rel ;C=1轉向PC+2+rel→PC
C=0順序執行PC+2→PC
JNC rel ;C=0轉向PC+2+rel→PC
C=1順序執行PC+2→PC
JB bit , rel ;(bit) =1轉向PC+3+rel→PC
(bit) =0順序執行PC+3→PC
JNB bit , rel ;(bit) =0轉向PC+3+rel→PC
(bit) =1順序執行PC+3→PC
JBC bit , rel ;(bit) =1轉向PC+3+rel→PC;同時0→(bit)
(bit) =0順序執行PC+3→PC
注意:JBC與JB指令區別,前者轉移後並把定址位清0,後者只轉移不清0定址位。
例1 設P1為輸入口,P3.0作輸出線,執行下列指令:
MOV C , P1.0 ;(P1.0) →C
ANL C , P1.1 ;(C)∩(P1.1) →C
ANL C , /P1.32 ;(C)∩(/P1.2) →C
MOV P3.0 , C ;C→P3.0
結果是:P3.0=(P1.0) ∩(P1.1) ∩(/P1.2)
例2 用位操作指令編程計算邏輯方程
P1.5=ACC.0 ∩ (B.0∪P1.2) ∪P1.3
解: MOV C , B.0 ;B.0→C
ORL C , P1.2 ;C∪P1.2→C 即B.0+P1.2→C
ANL C , ACC.0 ;C∩ACC.0→C 即ACC.0∩(B.0∪P1.2)→C
ORL C , P1.3 ;C∪P1.3→C 即 ACC.0∩(B.0∪P1.2)∪P1.3→C
MOV P1.5 , C ;C→P1.5
Ⅳ XRL單片機匯編語句啥意思
為解決某些特定的問題代碼中必須嵌入匯編語言以代替C語言完成的單片機的編程,匯編語言對於程序調試是不可或缺的。它包括:算術操作類指令,布爾變數操作類指令,邏輯操作數指令,控制轉移類指令。
邏輯異或指令,即相對應的二進制位不同該位異或後的結果是1,相同則為0。
XRL A,#data;累加器A中的容容和立即數執行邏輯異或操作。結果存放在累加器A中,如A中的內容為10010101B,data為10110110B,則運算的結果為00100011。
(4)單片機xrl指令擴展閱讀:
對於程序調試匯編語言更是不可或缺。
直接使用匯編指令編寫單片機程序,對硬體的控制更加直接,可以直接操作物理地址,寄存器,埠等;其它更高級的語言(如:C語言)對硬體的控制是依賴於類庫來實現的。並且,對於一些對程序大小和運行速度有非常嚴苛要求的項目而言,都必須使用匯編指令。
C語言只是為了方便編寫,與機器打交道的其實都是2進製得代碼,匯編語言就是這些代碼好記憶的名稱和規則,只是比C語言難理解些。
Ⅳ 51單片機的指令英文全名
MOV(英文為Move):對內部數據寄存器RAM和特殊功能寄存器SFR的數據進行傳送;
MOVC(Move Code)讀取程序存儲器數據表格的數據傳送;
MOVX (Move External RAM) 對外部RAM的數據傳送;
XCH (Exchange) 位元組交換;
XCHD (Exchange low-order Digit) 低半位元組交換;
PUSH (Push onto Stack) 入棧;
POP (Pop from Stack) 出棧;
(2)算術運算類指令(8種助記符)
ADD(Addition) 加法;
ADDC(Add with Carry) 帶進位加法;
SUBB(Subtract with Borrow) 帶借位減法;
DA(Decimal Adjust) 十進制調整;
INC(Increment) 加1;
DEC(Decrement) 減1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;
(3)邏輯運算類指令(10種助記符)
ANL(AND Logic) 邏輯與;
ORL(OR Logic) 邏輯或;
XRL(Exclusive-OR Logic) 邏輯異或;
CLR(Clear) 清零;
CPL(Complement) 取反;
RL(Rotate left) 循環左移;
RLC(Rotate Left throught the Carry flag) 帶進位循環左移;
RR(Rotate Right) 循環右移;
RRC (Rotate Right throught the Carry flag) 帶進位循環右移;
SWAP (Swap) 低4位與高4位交換;
(4)控制轉移類指令(17種助記符)
ACALL(Absolute subroutine Call)子程序絕對調用;
LCALL(Long subroutine Call)子程序長調用;
RET(Return from subroutine)子程序返回;
RETI(Return from Interruption)中斷返回;
SJMP(Short Jump)短轉移;
AJMP(Absolute Jump)絕對轉移;
LJMP(Long Jump)長轉移;
CJNE (Compare Jump if Not Equal)比較不相等則轉移;
DJNZ (Decrement Jump if Not Zero)減1後不為0則轉移;
JZ (Jump if Zero)結果為0則轉移;
JNZ (Jump if Not Zero) 結果不為0則轉移;
JC (Jump if the Carry flag is set)有進位則轉移;
JNC (Jump if Not Carry)無進位則轉移;
JB (Jump if the Bit is set)位為1則轉移;
JNB (Jump if the Bit is Not set) 位為0則轉移;
JBC(Jump if the Bit is set and Clear the bit) 位為1則轉移,並清除該位;
NOP (No Operation) 空操作;
(5)位操作指令(1種助記符)
SETB(Set Bit) 位 置1
基本是全的,個別有的沒有找到。雖說用到的機會很小,但是對於理解指令功能很有幫住