在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機匯編基礎

            51單片機匯編基礎

            作者: 時間:2016-11-13 來源:網(wǎng)絡 收藏

            本文引用地址:http://www.biyoush.com/article/201611/316243.htm

            一個單片機所需執(zhí)行指令的集合即為單片機的指令系統(tǒng)。單片機使用的機器語言、匯編語言及高級語言,但不管使用是何種語言,最終還是要“翻譯”成為機器碼,單片機才能執(zhí)行之。現(xiàn)在有很多半導體廠商都推出了自己的單片機,單片機種類繁多,品種數(shù)不勝數(shù),值得注意的是不同的單片機它們的指令系統(tǒng)不一定相同,或不完全相同。但不管是使用機器語言、匯編語言還是高級語言都是使用指令編寫程序的。

              所謂機器語言即指令的二進制編碼,而匯編語言則是指令的表示符號 。在指令的表達式上也不會直接使用二進制機器碼,最常用的是十六進制的形式。但單片機并不能直接執(zhí)行匯編語言和高級語言,都必須通過匯編器“翻譯”成為二進制機器碼方能執(zhí)行,但如果直接使用二進制來編寫程序,那將十分不便,也很難記憶和識別,不易編寫、難于辨讀,極易出錯,同時出錯了也相當難查找。所以現(xiàn)在基本上都不會直接使用機器語言來編寫單片機的程序。最好的辦法就是使用易于閱讀和辨認的指令符號來代替機器碼,我們常稱這些符號為助記符,用助記符的形式表示的單片機指令就是匯編語言,為便于記憶和閱讀,助記符號通常都使用易于理解的英文單詞和拼音字母來表示。

              每種單片機都有自己獨特的指令系統(tǒng),那么指令系統(tǒng)是開發(fā)和生產(chǎn)廠商定義的,如要使用其單片機,用戶就必須理解和遵循這些指令標準,要掌握某種(類)單片機,指令系統(tǒng)的學習是必須的。

              MCS-51共有111條指令,可分為5類:

              [1].數(shù)據(jù)傳送類指令(共29條)

              [2].算數(shù)運算類指令(共24條)

              [3].邏輯運算及移位類指令(共24條)

              [4].控制轉移類指令(共17條)

              [5].布爾變量操作類指令(共17條)

              一些特殊符號的意義

              在介紹指令系統(tǒng)前,我們先了解一些特殊符號的意義,這對今后程序的編寫都是相當有用的。

              Rn——當前選中的寄存器區(qū)的8個工作寄存器R0—R7(n=0-7)。

              Ri——當前選中的寄存器區(qū)中可作為地址寄存器的兩個寄存器R0和R1(i=0,1)

              direct—內部數(shù)據(jù)存儲單元的8位地址。包含0—127(255)內部存儲單元地址和特殊功能寄存地址。

              #data—指令中的8位常數(shù)。

              #data16—指令中的16位常數(shù)。

              addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空間為64kB程序存儲器地址。

              #addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必須放在與下條指令第一個字節(jié)同一個2kB程序存儲器空間之中。

              rel—8位帶符號的偏移字節(jié),用于所有的條件轉移和SJMP等指令中,偏移字節(jié)對于下條指令的第一個字節(jié)開始的-128——+127范圍內。

              @—間接寄存器尋址或基址寄存器的前綴。

              /—為操作的前綴,聲明對該位操作書取反。

              DPTR—數(shù)據(jù)指針。

              bit—內部RAM和特殊功能寄存器的直接尋址位。

              A—累加器。

              B—累加器B。用于乘法和除法指令中。

              C—進位標志位。

              (x)—某地址單元中的內容。

              ((x))—由X尋址單元中的內容。

              MCS-51的尋址方式

              尋址的“地址”即為操作數(shù)所在單元的地址,絕大部分指令執(zhí)行時都需要用到操作數(shù),那么到哪里去取得操作數(shù)呢?最易想到的就是告訴CPU操作數(shù)所在的地址單元,從那里可取得響應的操作數(shù),這便是“尋址”之意。MCS-51的尋址方式很多,使用起來也相當方便,功能也很強大,靈活性強。這便是MCS-51指令系統(tǒng)“好用”的原因之一。下面我們分別討論幾種尋址方式的原理。

              [1].直接尋址

              指令中操作數(shù)直接以單元地址形式出現(xiàn),例如:

              MOV A,68H

              這條指令的意義是把內部RAM中的68H單元中的數(shù)據(jù)內容傳送到累加器A中。值得注意的是直接尋址方式只能使用8位二進制地址,因此這種尋址方式僅限于內部RAM進行尋址。低128位單元在指令中直接以單元地址的形式給出。對于特殊功能寄存器可以使用其直接地址進行訪問,還可以以它們的符號形式給出,只是特殊功能寄存器只能用直接尋址方式訪問,而無其它方法。

              [2].寄存器尋址

              寄存器尋址對選定的8個工作寄存器R0-R7進行操作,也就是操作數(shù)在寄存器中,因此指定了寄存器就得到了操作數(shù),寄存器尋址的指令中以寄存器的符號來表示寄存器,例如:

              MOV A,R1

              這條指令的意義是把所用的工作寄存器組中的R3的內容送到累加器A中。

            值得一提的是工作狀態(tài)寄存器的選擇是通過程序狀態(tài)字寄存器來控制的,在這條指令前,應通過PSW設定當前工作寄存器組。

              [3].寄存器間接尋址

              寄存器尋址方式,寄存器中存放的是操作數(shù),而寄存器間接尋址方式,寄存器中存放的則為操作數(shù)的地址,也即操作數(shù)是通過寄存器指向的地址單元得到的,這便是寄存器間接尋址名稱的由來。

            例如指令:

              MOV A,@R0

              這條指令的意義是R0寄存器指向地址單元中的內容送到累加器A中。假如R0=#56H,那么是將56H單元中的數(shù)據(jù)送到累加器A中。

            寄存器間接尋址方式可用于訪問內部RAM或外部數(shù)據(jù)存儲器。訪問內部RAM或外部數(shù)據(jù)存儲器的低256字節(jié)時,可通過R0和R1作為間接寄存器。然而有必要指出,內部RAM的高128字節(jié)地址與專用積存器的地址是重疊的,所以這種尋址方式不能用于訪問特殊功能寄存器。

              外部數(shù)據(jù)存儲器的空間為64kB,這時可采用DPTR作為間址寄存器進行訪問,指令如下:

              MOVX A,@DPTR

              這條指令的意義是與上述類似,不再贅述。

              [4].立即尋址

              立即尋址就是把操作數(shù)直接在指令中給出,即操作數(shù)包含在指令中,指令操作碼的后面緊跟著操作數(shù),一般把指令中的操作數(shù)稱為立即數(shù),因此而得名。為了與直接尋址方式相區(qū)別,在立即數(shù)前加上“#”符號,例如:

              MOVX A,#0EH

              這條指令的意義是將0EH這個操作數(shù)送到累加器A中。

              [5].變址尋址

              變址尋址是以DPTR或PC作為基址寄存器,以累加器A作為變址寄存器,將兩寄存器的內容相加形成16位地址形成操作數(shù)的實際地址。例如:

              MOV A,@A+DPTR

              MOVX A,@A+PC

              JMP @A+DPTR

              在這三條指令中,A作為偏移量寄存器,DPTR或PC作為變址寄存器,A作為無符號數(shù)與DPTR或PC的內容相加,得到訪問的實際地址。其中前兩條是程序存儲器讀指令,后一條是無條件轉移指令。

              [6].位尋址

              在MCS-51單片機中,RAM中的20H—2FH字節(jié)單元對應的位地址為00H—7FH,特殊功能寄存器中的某些位也可進行為尋址,這些單元既可以采用字節(jié)方式訪問它們,也可采用位尋址的方式訪問它們。

              [7].相對尋址

              相對尋址方式是為了程序的相對轉移而設計的,其夜里是以PC的內容為基址,加上給出的偏移量作為轉移地址,從而實現(xiàn)程序的轉移。轉移的目的地址可參見如下表達式:

              目的地址=轉移指令地址+轉移指令字接數(shù)+偏移量

              值得注意的是,偏移量是有正負號之分的,偏移量的取值范圍是當前PC值的-128—+127之間。

              MCS-51數(shù)據(jù)傳送指令

              數(shù)據(jù)傳送指令共有29條,數(shù)據(jù)傳送指令一般的操作是把源操作數(shù)傳送到目的操作數(shù),指令執(zhí)行完成后,源操作數(shù)不變,目的操作數(shù)等于源操作數(shù)。如果要求在進行數(shù)據(jù)傳送時,目的操作數(shù)不丟失,則不能用直接傳送指令,而采用交換型的數(shù)據(jù)傳送指令,數(shù)據(jù)傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。

              [1]. 以累加器A為目的操作數(shù)類指令(4條)

              這4條指令的作用是把源操作數(shù)指向的內容送到累加器A。有直接、立即數(shù)、寄存器和寄存器間接尋址方式:

              MOV A,data ;(data)→(A) 直接單元地址中的內容送到累加器A

              MOV A,#data ;#data→(A) 立即數(shù)送到累加器A中

              MOV A,Rn ;(Rn)→(A) Rn中的內容送到累加器A中

              MOV A,@Ri ;((Ri))→(A) Ri內容指向的地址單元中的內容送到累加器A

              [2]. 以寄存器Rn為目的操作數(shù)的指令(3條)

            這3條指令的功能是把源操作數(shù)指定的內容送到所選定的工作寄存器Rn中。有直接、立即和寄存器尋址方式:

              MOV Rn,data ;(data)→(Rn) 直接尋址單元中的內容送到寄存器Rn中

              MOV Rn,#data ;#data→(Rn) 立即數(shù)直接送到寄存器Rn中

              MOV Rn,A ;(A)→(Rn) 累加器A中的內容送到寄存器Rn中

              [3]. 以直接地址為目的操作數(shù)的指令(5條)

              這組指令的功能是把源操作數(shù)指定的內容送到由直接地址data所選定的片內RAM中。有直接、立即、寄存器和寄存器間接4種尋址方式:

              MOV data,data ;(data)→(data) 直接地址單元中的內容送到直接地址單元

              MOV data,#data ;#data→(data) 立即數(shù)送到直接地址單元

              MOV data,A ;(A)→(data) 累加器A中的內容送到直接地址單元

              MOV data,Rn ;(Rn)→(data) 寄存器Rn中的內容送到直接地址單元

              MOV data,@Ri ;((Ri))→(data) 寄存器Ri中的內容指定的地址單元中數(shù)據(jù)送到直接地址單元

              [4]. 以間接地址為目的操作數(shù)的指令(3條)

              這組指令的功能是把源操作數(shù)指定的內容送到以Ri中的內容為地址的片內RAM中。有直接、立即和寄存器3種尋址方式:

              MOV @Ri,data ;(data)→((Ri)) 直接地址單元中的內容送到以Ri中的內容為地址的RAM單元

              MOV @Ri,#data ;#data→((Ri)) 立即數(shù)送到以Ri中的內容為地址的RAM單元

              MOV @Ri,A ;(A)→((Ri)) 累加器A中的內容送到以Ri中的內容為地址的RAM單元

              [5]. 查表指令(2條)

              這組指令的功能是對存放于程序存儲器中的數(shù)據(jù)表格進行查找傳送,使用變址尋址方式:

              MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址單元中的內容送到累加器A中

              MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內容送到累加器A中

              [6]. 累加器A與片外數(shù)據(jù)存儲器RAM傳送指令(4條)

              這4條指令的作用是累加器A與片外RAM間的數(shù)據(jù)傳送。使用寄存器尋址方式:

              MOVX @DPTR,A ;(A)→((DPTR)) 累加器中的內容送到數(shù)據(jù)指針指向片外RAM地址中

              MOVX A, @DPTR ;((DPTR))→(A) 數(shù)據(jù)指針指向片外RAM地址中的內容送到累加器A中

              MOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內容送到累加器A中

              MOVX @Ri,A ;(A)→((Ri)) 累加器中的內容送到寄存器Ri指向片外RAM地址中

              [7]. 堆棧操作類指令(2條)

              這4類指令的作用是把直接尋址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接尋址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位后,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數(shù)據(jù)必須存放于SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。

              PUSH data ;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接尋址單元中的數(shù)據(jù)送到堆棧指針SP所指的單元中

              POP data ;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數(shù)據(jù)送到直接尋址單元中,堆棧指針SP再進行減1操作

              [8]. 交換指令(5條)

              這5條指令的功能是把累加器A中的內容與源操作數(shù)所指的數(shù)據(jù)相互交換。

              XCH A,Rn ;(A)←→(Rn)累加器與工作寄存器Rn中的內容互換

              XCH A,@Ri ;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內容互換

              XCH A,data ;(A)←→(data)累加器與直接地址單元中的內容互換

              XCHD A,@Ri ;(A3-0)←→((Ri)3-0)累加器與工作寄存器Ri所指的存儲單元中的內容低半字節(jié)互換

              SWAP A ;(A3-0)←→(A7-4)累加器中的內容高低半字節(jié)互換

              [9]. 16位數(shù)據(jù)傳送指令(1條)

              這條指令的功能是把16位常數(shù)送入數(shù)據(jù)指針寄存器。

              MOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常數(shù)的高8位送到DPH,低8位送到DPL

              MCS-51算術運算指令

              算術運算指令共有24條,算術運算主要是執(zhí)行加、減、乘、除法四則運算。另外MCS-51指令系統(tǒng)中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數(shù)進行運算,但利用進位標志C,則可進行多字節(jié)無符號整數(shù)的運算。同時利用溢出標志,還可以對帶符號數(shù)進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數(shù)都會對PSW(程序狀態(tài)字)有影響。這在使用中應特別注意。

              [1]. 加法指令(4條)

              這4條指令的作用是把立即數(shù),直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。

              ADD A,#data ;(A)+#data→(A) 累加器A中的內容與立即數(shù)#data相加,結果存在A中

              ADD A,data ;(A)+(data)→(A) 累加器A中的內容與直接地址單元中的內容相加,結果存在A中

              ADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中

              ADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中

              [2]. 帶進位加法指令(4條)

              這4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。

              ADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中

              ADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內容與立即數(shù)連同進位位相加,結果存在A中

              ADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中

              ADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A中

              [3]. 帶借位減法指令(4條)

              這組指令包含立即數(shù)、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。

              

              這里我們對借位位C的狀態(tài)作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數(shù)相減時,從一個正數(shù)減去一個負數(shù)結果為負數(shù),或者從一個負數(shù)中減去一個正數(shù)結果為正數(shù)的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態(tài),則應先對CY進行清零操作。

              SUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A中

              SUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內容與立即數(shù)、連同借位位相減,結果存在A中

              SUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A中

              SUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A中

              [4]. 乘法指令(1條)

              這個指令的作用是把累加器A和寄存器B中的8位無符號數(shù)相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大于FFH,否則OV=0,但進位標志位CY總是等于0。

              MUL AB ;(A)×(B)→(A)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B中

              [5]. 除法指令(1條)

              這個指令的作用是把累加器A的8位無符號整數(shù)除以寄存器B中的8位無符號整數(shù),所得到的商存在累加器A,而余數(shù)存在寄存器B中。除法運算總是使OV和進位標志位CY等于0。如果OV=1,表明寄存器B中的內容為00H,那么執(zhí)行結果為不確定值,表示除法有溢出。

              DIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數(shù)存在寄存器B中。

              [6]. 加1指令(5條)

              這5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執(zhí)行加1后,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等尋址方式:

              INC A ;(A)+1→(A) 累加器A中的內容加1,結果存在A中

              INC data ;(data)+1→(data) 直接地址單元中的內容加1,結果送回原地址單元中

              INC @Ri ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中

              INC Rn ;(Rn)+1→(Rn)寄存器Rn的內容加1,結果送回原地址單元中

              INC DPTR ;(DPTR)+1→(DPTR)數(shù)據(jù)指針的內容加1,結果送回數(shù)據(jù)指針中

              在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然后在CPU進行加1操作,再輸出到I/O上,這就是“讀—修改—寫”操作。

              [7]. 減1指令(4條)

              這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1后即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等尋址方式,當直接地址是I/O口鎖存器時,“讀—修改—寫”操作與加1指令類似。

              DEC A ;(A)-1→(A)累加器A中的內容減1,結果送回累加器A中

              DEC data ;(data)-1→(data)直接地址單元中的內容減1,結果送回直接地址單元中

              DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中

              DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內容減1,結果送回寄存器Rn中

              [8]. 十進制調整指令(1條)

              在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之后,其功能是將執(zhí)行加法運算后存于累加器A中的結果進行調整和修正。

              DA A

              MCS-51邏輯運算及移位指令

              邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等尋址方式。這類指令一般不影響程序狀態(tài)字(PSW)標志。

              [1]. 循環(huán)移位指令(4條)

              這4條指令的作用是將累加器中的內容循環(huán)左或右移一位,后兩條指令是連同進位位CY一起移位。

              RL A ;累加器A中的內容左移一位

              RR A ;累加器A中的內容右移一位

              RLC A ;累加器A中的內容連同進位位CY左移一位

              RRC A ;累加器A中的內容連同進位位CY右移一位

              [2]. 累加器半字節(jié)交換指令(1條)

              這條指令是將累加器中的內容高低半字節(jié)互換,這在上一節(jié)中內容已有介紹。

              SWAP A ; 累加器中的內容高低半字節(jié)互換

              [3]. 求反指令(1條)

              這條指令將累加器中的內容按位取反。

              CPL A ; 累加器中的內容按位取反

              [4]. 清零指令(1條)

              這條指令將累加器中的內容清0。

              CLR A ; 0→(A),累加器中的內容清0

              [5]. 邏輯與操作指令(6條)

              這組指令的作用是將兩個單元中的內容執(zhí)行邏輯與操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

              ANL A,data ;累加器A中的內容和直接地址單元中的內容執(zhí)行與邏輯操作。結果存在寄存器A中。

              ANL data,#data ;直接地址單元中的內容和立即數(shù)執(zhí)行與邏輯操作。結果存在直接地址單元中。

              ANL A,#data ;累加器A的內容和立即數(shù)執(zhí)行與邏輯操作。結果存在累加器A中。

              ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執(zhí)行與邏輯操作。結果存在累加器A中。

              ANL data,A ;直接地址單元中的內容和累加器A的內容執(zhí)行與邏輯操作。結果存在直接地址單元中。

              ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執(zhí)行與邏輯操作。結果存在累加器A中。

              [6]. 邏輯或操作指令(6條)

              這組指令的作用是將兩個單元中的內容執(zhí)行邏輯或操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

              ORL A,data ;累加器A中的內容和直接地址單元中的內容執(zhí)行邏輯或操作。結果存在寄存器A中。

              ORL data,#data ;直接地址單元中的內容和立即數(shù)執(zhí)行邏輯或操作。結果存在直接地址單元中。

              ORL A,#data ;累加器A的內容和立即數(shù)執(zhí)行邏輯或操作。結果存在累加器A中。

              ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執(zhí)行邏輯或操作。結果存在累加器A中。

              ORL data,A ;直接地址單元中的內容和累加器A的內容執(zhí)行邏輯或操作。結果存在直接地址單元中。

              ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執(zhí)行邏輯或操作。結果存在累加器A中。

              [7]. 邏輯異或操作指令(6條)

              這組指令的作用是將兩個單元中的內容執(zhí)行邏輯異或操作。如果直接地址是I/O地址,則為“讀—修改—寫”操作。

              XRL A,data ;累加器A中的內容和直接地址單元中的內容執(zhí)行邏輯異或操作。結果存在寄存器A中。

              XRL data,#data ;直接地址單元中的內容和立即數(shù)執(zhí)行邏輯異或操作。結果存在直接地址單元中。

              XRL A,#data ;累加器A的內容和立即數(shù)執(zhí)行邏輯異或操作。結果存在累加器A中。

              XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執(zhí)行邏輯異或操作。結果存在累加器A中。

              XRL data,A ;直接地址單元中的內容和累加器A的內容執(zhí)行邏輯異或操作。結果存在直接地址單元中。

              XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執(zhí)行邏輯異或操作。結果存在累加器A中。

              MCS-51控制轉移指令

             

              控制轉移指令用于控制程序的流向,所控制的范圍即為程序存儲器區(qū)間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB字節(jié)進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執(zhí)行一般都不會對標志位有影響。

              [1]. 無條件轉移指令(4條)

              這組指令執(zhí)行完后,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。

              LJMP addr16 ;addr16→(PC),給程序計數(shù)器賦予新值(16位地址)

              AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序計數(shù)器賦予新值(11位地址),(PC15-11)不改變

              SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數(shù)器先加上2再加上偏移量給程序計數(shù)器賦予新值

              JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數(shù)據(jù)指針的值給程序計數(shù)器賦予新值

              [2]. 條件轉移指令(8條)

              程序可利用這組豐富的指令根據(jù)當前的條件進行判斷,看是否滿足某種特定的條件,從而控制程序的轉向。

              JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執(zhí)行

              JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執(zhí)行

              CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等于直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執(zhí)行

              CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等于立即數(shù),則轉移到偏移量所指向的地址,否則程序往下執(zhí)行

              CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等于立即數(shù),則轉移到偏移量所指向的地址,否則程序往下執(zhí)行

              CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等于立即數(shù),則轉移到偏移量所指向的地址,否則程序往下執(zhí)行

              DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等于0,則轉移到偏移量所指向的地址,否則程序往下執(zhí)行

              DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內容減1不等于0,則轉移到偏移量所指向的地址,否則程序往下執(zhí)行

              [3]. 子程序調用指令(1條)

              子程序是為了便于程序編寫,減少那些需反復執(zhí)行的程序占用多余的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執(zhí)行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調用命令使程序按調用的地址去執(zhí)行,這就需要子程序的調用指令和返回指令。

              LCALL addr16 ; 長調用指令,可在64kB空間調用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即分別從堆棧中彈出調用子程序時壓入的返回地址

              ACALL addr11 ; 絕對調用指令,可在2kB空間調用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0)

              RET ; 子程序返回指令。此時(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP)

              RETI ; 中斷返回指令,除具有RET功能外,還具有恢復中斷邏輯的功能,需注意的是,RETI指令不能用RET代替

              [4]. 空操作指令(1條)

            這條指令將累加器中的內容清0。

              NOP ; 這條指令除了使PC加1,消耗一個機器周期外,沒有執(zhí)行任何操作??捎糜诙虝r間的延時

              MCS-51布爾變量操作指令

              布爾處理功能是MCS-51系列單片機的一個重要特征,這是出于實際應用需要而設置的。布爾變量也即開關變量,它是以位(bit)為單位進行操作的。

              在物理結構上,MCS-51單片機有一個布爾處理機,它以進位標志做為累加位,以內部RAM可尋址的128個為存儲位。

              既然有布爾處理機功能,所以也就有相應的布爾操作指令集,下面我們分別談論。

              [1]. 位傳送指令(2條)

              位傳送指令就是可尋址位與累加位CY之間的傳送,指令有兩條。

              MOV C,bit ;bit→CY,某位數(shù)據(jù)送CY

              MOV bit,C ;CY→bit,CY數(shù)據(jù)送某位

              [2]. 位置位復位指令(4條)

            這些指令對CY及可尋址位進行置位或復位操作,共有四條指令。

              CLR C ; 0→CY,清CY

              CLR bit ; 0→bit,清某一位

              SETB C ; 1→CY,置位CY

              SETB bit ; 1→bit,置位某一位

              [3]. 位運算指令(6條)

              位運算都是邏輯運算,有與、或、非三種指令,共六條。

              ANL C,bit ;(CY)∧(bit)→CY

              ANL C,/bit ;(CY)∧()→CY

              ORL C,bit ;(CY)∨(bit)→CY

              ORL C,/bit ;(CY)∧()→CY

              CPL C ;()→CY

              CPL bit ;()→bir

              [4]. 位控制轉移指令(5)

              位控制轉移指令是以位的狀態(tài)作為實現(xiàn)程序轉移的判斷條件,介紹如下:

              JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執(zhí)行,(PC)+2→PC。

             

              JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執(zhí)行,(PC)+2→PC。

              JB bit, rel ; 位狀態(tài)為1轉移。

              JNB bit, rel ; 位狀態(tài)為0轉移。

              JBC bit, rel ; 位狀態(tài)為1轉移,并使該位清“0”。

              后三條指令都是三字節(jié)指令,如果條件滿足,(PC)+3+rel→PC,否則程序往下執(zhí)行,(PC)+3→PC。




            關鍵詞: 51單片機匯編基

            評論


            技術專區(qū)

            關閉