




免費(fèi)預(yù)覽已結(jié)束,剩余6頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
mcs-51指令系統(tǒng)概述深圳市凌雁電子有限公司一個單片機(jī)所需執(zhí)行指令的集合即為單片機(jī)的指令系統(tǒng)。單片機(jī)使用的機(jī)器語言、匯編語言及高級語言,但不管使用是何種語言,最終還是要“翻譯”成為機(jī)器碼,單片機(jī)才能執(zhí)行之。現(xiàn)在有很多半導(dǎo)體廠商都推出了自己的單片機(jī),單片機(jī)種類繁多,品種數(shù)不勝數(shù),值得注意的是不同的單片機(jī)它們的指令系統(tǒng)不一定相同,或不完全相同。但不管是使用機(jī)器語言、匯編語言還是高級語言都是使用指令編寫程序的。所謂機(jī)器語言即指令的二進(jìn)制編碼,而匯編語言則是指令的表示符號 。在指令的表達(dá)式上也不會直接使用二進(jìn)制機(jī)器碼,最常用的是十六進(jìn)制的形式。但單片機(jī)并不能直接執(zhí)行匯編語言和高級語言,都必須通過匯編器“翻譯”成為二進(jìn)制機(jī)器碼方能執(zhí)行,但如果直接使用二進(jìn)制來編寫程序,那將十分不便,也很難記憶和識別,不易編寫、難于辨讀,極易出錯,同時出錯了也相當(dāng)難查找。所以現(xiàn)在基本上都不會直接使用機(jī)器語言來編寫單片機(jī)的程序。最好的辦法就是使用易于閱讀和辨認(rèn)的指令符號來代替機(jī)器碼,我們常稱這些符號為助記符,用助記符的形式表示的單片機(jī)指令就是匯編語言,為便于記憶和閱讀,助記符號通常都使用易于理解的英文單詞和拼音字母來表示。每種單片機(jī)都有自己獨(dú)特的指令系統(tǒng),那么指令系統(tǒng)是開發(fā)和生產(chǎn)廠商定義的,如要使用其單片機(jī),用戶就必須理解和遵循這些指令標(biāo)準(zhǔn),要掌握某種(類)單片機(jī),指令系統(tǒng)的學(xué)習(xí)是必須的。mcs-51共有111條指令,可分為5類:1.數(shù)據(jù)傳送類指令(共29條)2.算數(shù)運(yùn)算類指令(共24條)3.邏輯運(yùn)算及移位類指令(共24條)4.控制轉(zhuǎn)移類指令(共17條)5.布爾變量操作類指令(共17條)一些特殊符號的意義在介紹指令系統(tǒng)前,我們先了解一些特殊符號的意義,這對今后程序的編寫都是相當(dāng)有用的。rn當(dāng)前選中的寄存器區(qū)的8個工作寄存器r0r7(n=0-7)。ri當(dāng)前選中的寄存器區(qū)中可作為地址寄存器的兩個寄存器r0和r1(i=0,1)direct內(nèi)部數(shù)據(jù)存儲單元的8位地址。包含0127(255)內(nèi)部存儲單元地址和特殊功能寄存地址。#data指令中的8位常數(shù)。#data16指令中的16位常數(shù)。addr16用于lcall和ljmp指令中的16目的地地址,目的地址的空間為64kb程序存儲器地址。#addr11用于acall和ajmp指令中的11目的地地址,目的地址必須放在與下條指令第一個字節(jié)同一個2kb程序存儲器空間之中。rel8位帶符號的偏移字節(jié),用于所有的條件轉(zhuǎn)移和sjmp等指令中,偏移字節(jié)對于下條指令的第一個字節(jié)開始的-128+127范圍內(nèi)。間接寄存器尋址或基址寄存器的前綴。/為操作的前綴,聲明對該位操作數(shù)取反。dptr數(shù)據(jù)指針。bit內(nèi)部ram和特殊功能寄存器的直接尋址位。a累加器。b累加器b。用于乘法和除法指令中。c進(jìn)位標(biāo)志位。(x)某地址單元中的內(nèi)容。(x)由x尋址單元中的內(nèi)容。mcs-51的尋址方式尋址的“地址”即為操作數(shù)所在單元的地址,絕大部分指令執(zhí)行時都需要用到操作數(shù),那么到哪里去取得操作數(shù)呢?最易想到的就是告訴cpu操作數(shù)所在的地址單元,從那里可取得響應(yīng)的操作數(shù),這便是“尋址”之意。mcs-51的尋址方式很多,使用起來也相當(dāng)方便,功能也很強(qiáng)大,靈活性強(qiáng)。這便是mcs-51指令系統(tǒng)“好用”的原因之一。下面我們分別討論幾種尋址方式的原理。1.直接尋址指令中操作數(shù)直接以單元地址形式出現(xiàn),例如:mova,68h這條指令的意義是把內(nèi)部ram中的68h單元中的數(shù)據(jù)內(nèi)容傳送到累加器a中。值得注意的是直接尋址方式只能使用8位二進(jìn)制地址,因此這種尋址方式僅限于內(nèi)部ram進(jìn)行尋址。低128位單元在指令中直接以單元地址的形式給出。對于特殊功能寄存器可以使用其直接地址進(jìn)行訪問,還可以以它們的符號形式給出,只是特殊功能寄存器只能用直接尋址方式訪問,而無其它方法。2.寄存器尋址寄存器尋址對選定的8個工作寄存器r0-r7進(jìn)行操作,也就是操作數(shù)在寄存器中,因此指定了寄存器就得到了操作數(shù),寄存器尋址的指令中以寄存器的符號來表示寄存器,例如:mova,r1這條指令的意義是把所用的工作寄存器組中的r3的內(nèi)容送到累加器a中。值得一提的是工作狀態(tài)寄存器的選擇是通過程序狀態(tài)字寄存器來控制的,在這條指令前,應(yīng)通過psw設(shè)定當(dāng)前工作寄存器組。3.寄存器間接尋址寄存器尋址方式,寄存器中存放的是操作數(shù),而寄存器間接尋址方式,寄存器中存放的則為操作數(shù)的地址,也即操作數(shù)是通過寄存器指向的地址單元得到的,這便是寄存器間接尋址名稱的由來。例如指令:mova,r0這條指令的意義是r0寄存器指向地址單元中的內(nèi)容送到累加器a中。假如r0=#56h,那么是將56h單元中的數(shù)據(jù)送到累加器a中。寄存器間接尋址方式可用于訪問內(nèi)部ram或外部數(shù)據(jù)存儲器。訪問內(nèi)部ram或外部數(shù)據(jù)存儲器的低256字節(jié)時,可通過r0和r1作為間接寄存器。然而有必要指出,內(nèi)部ram的高128字節(jié)地址與專用積存器的地址是重疊的,所以這種尋址方式不能用于訪問特殊功能寄存器。外部數(shù)據(jù)存儲器的空間為64kb,這時可采用dptr作為間址寄存器進(jìn)行訪問,指令如下:movxa,dptr這條指令的意義是與上述類似,不再贅述。4.立即尋址立即尋址就是把操作數(shù)直接在指令中給出,即操作數(shù)包含在指令中,指令操作碼的后面緊跟著操作數(shù),一般把指令中的操作數(shù)稱為立即數(shù),因此而得名。為了與直接尋址方式相區(qū)別,在立即數(shù)前加上“#”符號,例如:movxa,#0eh這條指令的意義是將0eh這個操作數(shù)送到累加器a中。5.變址尋址變址尋址是以dptr或pc作為基址寄存器,以累加器a作為變址寄存器,將兩寄存器的內(nèi)容相加形成16位地址形成操作數(shù)的實際地址。例如:mova,a+dptrmovxa,a+pcjmpa+dptr在這三條指令中,a作為偏移量寄存器,dptr或pc作為變址寄存器,a作為無符號數(shù)與dptr或pc的內(nèi)容相加,得到訪問的實際地址。其中前兩條是程序存儲器讀指令,后一條是無條件轉(zhuǎn)移指令。6.位尋址在mcs-51單片機(jī)中,ram中的20h2fh字節(jié)單元對應(yīng)的位地址為00h7fh,特殊功能寄存器中的某些位也可進(jìn)行為尋址,這些單元既可以采用字節(jié)方式訪問它們,也可采用位尋址的方式訪問它們。7.相對尋址相對尋址方式是為了程序的相對轉(zhuǎn)移而設(shè)計的,其夜里是以pc的內(nèi)容為基址,加上給出的偏移量作為轉(zhuǎn)移地址,從而實現(xiàn)程序的轉(zhuǎn)移。轉(zhuǎn)移的目的地址可參見如下表達(dá)式:目的地址=轉(zhuǎn)移指令地址+轉(zhuǎn)移指令字接數(shù)+偏移量值得注意的是,偏移量是有正負(fù)號之分的,偏移量的取值范圍是當(dāng)前pc值的-128+127之間。數(shù)據(jù)傳送指令共有29條,數(shù)據(jù)傳送指令一般的操作是把源操作數(shù)傳送到目的操作數(shù),指令執(zhí)行完成后,源操作數(shù)不變,目的操作數(shù)等于源操作數(shù)。如果要求在進(jìn)行數(shù)據(jù)傳送時,目的操作數(shù)不丟失,則不能用直接傳送指令,而采用交換型的數(shù)據(jù)傳送指令,數(shù)據(jù)傳送指令不影響標(biāo)志c,ac和ov,但可能會對奇偶標(biāo)志p有影響。1.以累加器a為目的操作數(shù)類指令(4條)這4條指令的作用是把源操作數(shù)指向的內(nèi)容送到累加器a。有直接、立即數(shù)、寄存器和寄存器間接尋址方式:mov a,data ;(data)(a) 直接單元地址中的內(nèi)容送到累加器amov a,#data ;#data(a) 立即數(shù)送到累加器a中mov a,rn;(rn)(a) rn中的內(nèi)容送到累加器a中mov a,ri ;(ri)(a) ri內(nèi)容指向的地址單元中的內(nèi)容送到累加器a2.以寄存器rn為目的操作數(shù)的指令(3條) 這3條指令的功能是把源操作數(shù)指定的內(nèi)容送到所選定的工作寄存器rn中。有直接、立即和寄存器尋址方式:mov rn,data ;(data)(rn) 直接尋址單元中的內(nèi)容送到寄存器rn中mov rn,#data ;#data(rn) 立即數(shù)直接送到寄存器rn中mov rn,a ;(a)(rn) 累加器a中的內(nèi)容送到寄存器rn中3.以直接地址為目的操作數(shù)的指令(5條) 這組指令的功能是把源操作數(shù)指定的內(nèi)容送到由直接地址data所選定的片內(nèi)ram中。有直接、立即、寄存器和寄存器間接4種尋址方式:mov data,data ;(data)(data) 直接地址單元中的內(nèi)容送到直接地址單元mov data,#data ;#data(data) 立即數(shù)送到直接地址單元mov data,a ;(a)(data) 累加器a中的內(nèi)容送到直接地址單元mov data,rn ;(rn)(data) 寄存器rn中的內(nèi)容送到直接地址單元mov data,ri ;(ri)(data) 寄存器ri中的內(nèi)容指定的地址單元中數(shù)據(jù)送到直接地址單元4.以間接地址為目的操作數(shù)的指令(3條) 這組指令的功能是把源操作數(shù)指定的內(nèi)容送到以ri中的內(nèi)容為地址的片內(nèi)ram中。有直接、立即和寄存器3種尋址方式:mov ri,data ;(data)(ri) 直接地址單元中的內(nèi)容送到以ri中的內(nèi)容為地址的ram單元mov ri,#data ;#data(ri) 立即數(shù)送到以ri中的內(nèi)容為地址的ram單元mov ri,a ;(a)(ri) 累加器a中的內(nèi)容送到以ri中的內(nèi)容為地址的ram單元5.查表指令(2條) 這組指令的功能是對存放于程序存儲器中的數(shù)據(jù)表格進(jìn)行查找傳送,使用變址尋址方式:movc a,a+dptr ;(a)+(dptr)(a) 表格地址單元中的內(nèi)容送到累加器a中movc a,a+pc ;(pc)+1(a),(a)+(pc)(a) 表格地址單元中的內(nèi)容送到累加器a中6.累加器a與片外數(shù)據(jù)存儲器ram傳送指令(4條) 這4條指令的作用是累加器a與片外ram間的數(shù)據(jù)傳送。使用寄存器尋址方式:movx dptr,a ;(a)(dptr) 累加器中的內(nèi)容送到數(shù)據(jù)指針指向片外ram地址中movx a, dptr;(dptr)(a) 數(shù)據(jù)指針指向片外ram地址中的內(nèi)容送到累加器a中movx a, ri;(ri)(a) 寄存器ri指向片外ram地址中的內(nèi)容送到累加器a中movx ri,a ;(a)(ri) 累加器中的內(nèi)容送到寄存器ri指向片外ram地址中7.堆棧操作類指令(2條) 這4類指令的作用是把直接尋址單元的內(nèi)容傳送到堆棧指針sp所指的單元中,以及把sp所指單元的內(nèi)容送到直接尋址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機(jī)開機(jī)復(fù)位后,(sp)默認(rèn)為07h,但一般都需要重新賦值,設(shè)置新的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再進(jìn)行減1操作8.交換指令(5條) 這5條指令的功能是把累加器a中的內(nèi)容與源操作數(shù)所指的數(shù)據(jù)相互交換。xch a,rn;(a)(rn)累加器與工作寄存器rn中的內(nèi)容互換xch a,ri;(a)(ri)累加器與工作寄存器ri所指的存儲單元中的內(nèi)容互換xch a,data;(a)(data)累加器與直接地址單元中的內(nèi)容互換xchd a,ri;(a3-0)(ri)3-0)累加器與工作寄存器ri所指的存儲單元中的內(nèi)容低半字節(jié)互換swap a;(a3-0)(a7-4)累加器中的內(nèi)容高低半字節(jié)互換9.16位數(shù)據(jù)傳送指令(1條) 這條指令的功能是把16位常數(shù)送入數(shù)據(jù)指針寄存器。mov dptr,#data16;#datah(dph),#datal(dpl)16位常數(shù)的高8位送到dph,低8位送到dpl 算術(shù)運(yùn)算指令共有24條,算術(shù)運(yùn)算主要是執(zhí)行加、減、乘、除法四則運(yùn)算。另外mcs-51指令系統(tǒng)中有相當(dāng)一部分是進(jìn)行加、減1操作,bcd碼的運(yùn)算和調(diào)整,我們都?xì)w類為運(yùn)算指令。雖然mcs-51單片機(jī)的算術(shù)邏輯單元alu僅能對8位無符號整數(shù)進(jìn)行運(yùn)算,但利用進(jìn)位標(biāo)志c,則可進(jìn)行多字節(jié)無符號整數(shù)的運(yùn)算。同時利用溢出標(biāo)志,還可以對帶符號數(shù)進(jìn)行補(bǔ)碼運(yùn)算。需要指出的是,除加、減1指令外,這類指令大多數(shù)都會對psw(程序狀態(tài)字)有影響。這在使用中應(yīng)特別注意。1.加法指令(4條) 這4條指令的作用是把立即數(shù),直接地址、工作寄存器及間接地址內(nèi)容與累加器a的內(nèi)容相加,運(yùn)算結(jié)果存在a中。add a,#data ;(a)+#data(a) 累加器a中的內(nèi)容與立即數(shù)#data相加,結(jié)果存在a中add a,data ;(a)+(data)(a) 累加器a中的內(nèi)容與直接地址單元中的內(nèi)容相加,結(jié)果存在a中add a,rn ;(a)+(rn)(a) 累加器a中的內(nèi)容與工作寄存器rn中的內(nèi)容相加,結(jié)果存在a中add a,ri ;(a)+(ri)(a) 累加器a中的內(nèi)容與工作寄存器ri所指向地址單元中的內(nèi)容相加,結(jié)果存在a中2.帶進(jìn)位加法指令(4條) 這4條指令除與1功能相同外,在進(jìn)行加法運(yùn)算時還需考慮進(jìn)位問題。addc a,data ;(a)+(data)+(c)(a) 累加器a中的內(nèi)容與直接地址單元的內(nèi)容連同進(jìn)位位相加,結(jié)果存在a中addc a,#data ;(a)+#data +(c)(a) 累加器a中的內(nèi)容與立即數(shù)連同進(jìn)位位相加,結(jié)果存在a中addc a,rn;(a)+rn+(c)(a) 累加器a中的內(nèi)容與工作寄存器rn中的內(nèi)容、連同進(jìn)位位相加,結(jié)果存在a中addc a,ri;(a)+(ri)+(c)(a) 累加器a中的內(nèi)容與工作寄存器ri指向地址單元中的內(nèi)容、連同進(jìn)位位相加,結(jié)果存在a中3.帶借位減法指令(4條) 這組指令包含立即數(shù)、直接地址、間接地址及工作寄存器與累加器a連同借位位c內(nèi)容相減,結(jié)果送回累加器a中。 這里我們對借位位c的狀態(tài)作出說明,在進(jìn)行減法運(yùn)算中,cy=1表示有借位,cy=0則無借位。ov=1聲明帶符號數(shù)相減時,從一個正數(shù)減去一個負(fù)數(shù)結(jié)果為負(fù)數(shù),或者從一個負(fù)數(shù)中減去一個正數(shù)結(jié)果為正數(shù)的錯誤情況。在進(jìn)行減法運(yùn)算前,如果不知道借位標(biāo)志位c的狀態(tài),則應(yīng)先對cy進(jìn)行清零操作。subb a,data;(a)-(data) - (c)(a) 累加器a中的內(nèi)容與直接地址單元中的內(nèi)容、連同借位位相減,結(jié)果存在a中subb a,#data;(a)-#data -(c)(a) 累加器a中的內(nèi)容與立即數(shù)、連同借位位相減,結(jié)果存在a中subb a,rn;(a)-(rn) -(c)(a) 累加器a中的內(nèi)容與工作寄存器中的內(nèi)容、連同借位位相減,結(jié)果存在a中subb a,ri;(a)-(ri) -(c)(a) 累加器a中的內(nèi)容與工作寄存器ri指向的地址單元中的內(nèi)容、連同借位位相減,結(jié)果存在a中4.乘法指令(1條) 這個指令的作用是把累加器a和寄存器b中的8位無符號數(shù)相乘,所得到的是16位乘積,這個結(jié)果低8位存在累加器a,而高8位存在寄存器b中。如果ov=1,說明乘積大于ffh,否則ov=0,但進(jìn)位標(biāo)志位cy總是等于0。mul ab;(a)(b)(a)和(b) 累加器a中的內(nèi)容與寄存器b中的內(nèi)容相乘,結(jié)果存在a、b中5. 除法指令(1條) 這個指令的作用是把累加器a的8位無符號整數(shù)除以寄存器b中的8位無符號整數(shù),所得到的商存在累加器a,而余數(shù)存在寄存器b中。除法運(yùn)算總是使ov和進(jìn)位標(biāo)志位cy等于0。如果ov=1,表明寄存器b中的內(nèi)容為00h,那么執(zhí)行結(jié)果為不確定值,表示除法有溢出。div ab;(a)(b)(a)和(b) 累加器a中的內(nèi)容除以寄存器b中的內(nèi)容,所得到的商存在累加器a,而余數(shù)存在寄存器b中。6.加1指令(5條) 這5條指令的的功能均為原寄存器的內(nèi)容加1,結(jié)果送回原寄存器。上述提到,加1指令不會對任何標(biāo)志有影響,如果原寄存器的內(nèi)容為ffh,執(zhí)行加1后,結(jié)果就會是00h。這組指令共有直接、寄存器、寄存器減間址等尋址方式:inc a;(a)+1(a) 累加器a中的內(nèi)容加1,結(jié)果存在a中inc data;(data)+1(data) 直接地址單元中的內(nèi)容加1,結(jié)果送回原地址單元中inc ri;(ri)+1(ri) 寄存器的內(nèi)容指向的地址單元中的內(nèi)容加1,結(jié)果送回原地址單元中inc rn;(rn)+1(rn)寄存器rn的內(nèi)容加1,結(jié)果送回原地址單元中inc dptr;(dptr)+1(dptr)數(shù)據(jù)指針的內(nèi)容加1,結(jié)果送回數(shù)據(jù)指針中在inc data這條指令中,如果直接地址是i/o,其功能是先讀入i/o鎖存器的內(nèi)容,然后在cpu進(jìn)行加1操作,再輸出到i/o上,這就是“讀修改寫”操作。7. 減1指令(4條) 這組指令的作用是把所指的寄存器內(nèi)容減1,結(jié)果送回原寄存器,若原寄存器的內(nèi)容為00h,減1后即為ffh,運(yùn)算結(jié)果不影響任何標(biāo)志位,這組指令共有直接、寄存器、寄存器間址等尋址方式,當(dāng)直接地址是i/o口鎖存器時,“讀修改寫”操作與加1指令類似。dec a;(a)-1(a)累加器a中的內(nèi)容減1,結(jié)果送回累加器a中dec data;(data)-1(data)直接地址單元中的內(nèi)容減1,結(jié)果送回直接地址單元中dec ri;(ri)-1(ri)寄存器ri指向的地址單元中的內(nèi)容減1,結(jié)果送回原地址單元中dec rn;(rn)-1(rn)寄存器rn中的內(nèi)容減1,結(jié)果送回寄存器rn中8.十進(jìn)制調(diào)整指令(1條) 在進(jìn)行bcd碼運(yùn)算時,這條指令總是跟在add或addc指令之后,其功能是將執(zhí)行加法運(yùn)算后存于累加器a中的結(jié)果進(jìn)行調(diào)整和修正。da a邏輯運(yùn)算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等尋址方式。這類指令一般不影響程序狀態(tài)字(psw)標(biāo)志。1.循環(huán)移位指令(4條) 這4條指令的作用是將累加器中的內(nèi)容循環(huán)左或右移一位,后兩條指令是連同進(jìn)位位cy一起移位。rl a ;累加器a中的內(nèi)容左移一位rr a ;累加器a中的內(nèi)容右移一位rlc a ;累加器a中的內(nèi)容連同進(jìn)位位cy左移一位rrc a ;累加器a中的內(nèi)容連同進(jìn)位位cy右移一位2.累加器半字節(jié)交換指令(1條) 這條指令是將累加器中的內(nèi)容高低半字節(jié)互換,這在上一節(jié)中內(nèi)容已有介紹。swap a; 累加器中的內(nèi)容高低半字節(jié)互換3.求反指令(1條) 這條指令將累加器中的內(nèi)容按位取反。cpl a; 累加器中的內(nèi)容按位取反4.清零指令(1條) 這條指令將累加器中的內(nèi)容清0。clr a; 0(a),累加器中的內(nèi)容清05. 邏輯與操作指令(6條) 這組指令的作用是將兩個單元中的內(nèi)容執(zhí)行邏輯與操作。如果直接地址是i/o地址,則為“讀修改寫”操作。anl a,data;累加器a中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在寄存器a中。anl data,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。anl a,#data;累加器a的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在累加器a中。anl a,rn;累加器a的內(nèi)容和寄存器rn中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器a中。anl data,a;直接地址單元中的內(nèi)容和累加器a的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。anl a,ri;累加器a的內(nèi)容和工作寄存器ri指向的地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器a中。6. 邏輯或操作指令(6條) 這組指令的作用是將兩個單元中的內(nèi)容執(zhí)行邏輯或操作。如果直接地址是i/o地址,則為“讀修改寫”操作。orl a,data;累加器a中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在寄存器a中。orl data,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。orl a,#data;累加器a的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在累加器a中。orl a,rn;累加器a的內(nèi)容和寄存器rn中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器a中。orl data,a;直接地址單元中的內(nèi)容和累加器a的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在直接地址單元中。orl a,ri;累加器a的內(nèi)容和工作寄存器ri指向的地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器a中。7. 邏輯異或操作指令(6條) 這組指令的作用是將兩個單元中的內(nèi)容執(zhí)行邏輯異或操作。如果直接地址是i/o地址,則為“讀修改寫”操作。xrl a,data;累加器a中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在寄存器a中。xrl data,#data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。xrl a,#data;累加器a的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在累加器a中。xrl a,rn;累加器a的內(nèi)容和寄存器rn中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器a中。xrl data,a;直接地址單元中的內(nèi)容和累加器a的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。xrl a,ri;累加器a的內(nèi)容和工作寄存器ri指向的地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器a中。控制轉(zhuǎn)移指令用于控制程序的流向,所控制的范圍即為程序存儲器區(qū)間,mcs-51系列單片機(jī)的控制轉(zhuǎn)移指令相對豐富,有可對64kb程序空間地址單元進(jìn)行訪問的長調(diào)用、長轉(zhuǎn)移指令,也有可對2kb字節(jié)進(jìn)行訪問的絕對調(diào)用和絕對轉(zhuǎn)移指令,還有在一頁范圍內(nèi)短相對轉(zhuǎn)移及其它無條件轉(zhuǎn)移指令,這些指令的執(zhí)行一般都不會對標(biāo)志位有影響。1.無條件轉(zhuǎn)移指令(4條) 這組指令執(zhí)行完后,程序就會無條件轉(zhuǎn)移到指令所指向的地址上去。長轉(zhuǎn)移指令訪問的程序存儲器空間為16地址64kb,絕對轉(zhuǎn)移指令訪問的程序存儲器空間為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)當(dāng)前程序計數(shù)器先加上2再加上偏移量給程序計數(shù)器賦予新值jmp a+dptr ;(a)+ (dptr)(pc),累加器所指向地址單元的值加上數(shù)據(jù)指針的值給程序計數(shù)器賦予新值2.條件轉(zhuǎn)移指令(8條) 程序可利用這組豐富的指令根據(jù)當(dāng)前的條件進(jìn)行判斷,看是否滿足某種特定的條件,從而控制程序的轉(zhuǎn)向。jz rel; a=0,(pc)+ 2 + rel(pc),累加器中的內(nèi)容為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行jnz rel; a0,(pc)+ 2 + rel(pc),累加器中的內(nèi)容不為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行cjne a, data, rel; a(data),(pc)+ 3 + rel(pc),累加器中的內(nèi)容不等于直接地址單元的內(nèi)容,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行cjne a, #data, rel; a#data,(pc)+ 3 + rel(pc),累加器中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行cjne rn, #data, rel; a#data,(pc)+ 3 + rel(pc),工作寄存器rn中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行cjne ri, #data, rel; a#data,(pc)+ 3 + rel(pc),工作寄存器ri指向地址單元中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行djnz rn, rel; (rn)-1(rn),(rn)0,(pc)+ 2 + rel(pc)工作寄存器rn減1不等于0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行djnz data, rel; (rn)-1(rn),(rn)0,(pc)+ 2 + rel(pc)直接地址單元中的內(nèi)容減1不等于0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行3.子程序調(diào)用指令(1條) 子程序是為了便于程序編寫,減少那些需反復(fù)執(zhí)行的程序占用多余的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復(fù)執(zhí)行的一些程序,我們在編程時一般都把它們編寫成子程序,當(dāng)需要用它們時,就用一個調(diào)用命令使程序按調(diào)用的地址去執(zhí)行,這就需要子程序的調(diào)用指令和返回指令。lcall addr16; 長調(diào)用指令,可在64kb空間調(diào)用子程序。此時(pc)+ 3(pc),(sp)+ 1(sp),(pc7-0)(sp),(sp)+ 1(sp),(pc15-8)(sp),addr16(pc),即分別從堆棧中彈出調(diào)用子程序時壓入的返回地址acall addr11; 絕對調(diào)用指令,可在2kb空間調(diào)用子程序,此時(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功能外,還具有恢復(fù)中斷邏輯的功能,需注意的是,reti指令不能用ret代替4.空操作指令(1條) 這條指令將累加器中的內(nèi)容清0。nop ; 這條指令除了使pc加1,消耗一個機(jī)器周期外,沒有執(zhí)行任何操作??捎糜诙虝r間的延時布爾處理功能是mcs-51系列單片機(jī)的一個重要特征,這是出于實際應(yīng)用需要而設(shè)置的。布爾變量也即開關(guān)變量,它是以位(bit)為單位進(jìn)行操作的。在物理結(jié)構(gòu)上,mcs-51單片機(jī)有一個布爾處理機(jī),它以進(jìn)位標(biāo)志做為累加位,以內(nèi)部ram可尋址的128個為存儲位。既然有布爾處理機(jī)功能,所以也就有相應(yīng)的布爾操作指令集,下面我們分別談?wù)摗?.位傳送指令(2條) 位傳送指令就是可尋址位與累加位cy之間的傳送,指令有兩條。mov c,bit ;bitcy,某位數(shù)據(jù)送cymov bit,c ;cybit,cy數(shù)據(jù)送某位2.位置位復(fù)位指令(4條) 這些指令對cy及可尋址位進(jìn)行置位或復(fù)位操作,共有四條指令。clr c; 0cy,清cyclr bit; 0bit,清某一位setb c; 1cy,置位cysetb bit; 1bit,置位某一位3.位運(yùn)算指令(6條) 位運(yùn)算都是邏輯運(yùn)算,有與、或、非三種指令,共六條。anl c,bit;(cy)(bit)cyanl c,/bit;(cy)()cyorl c,bit;(cy)(bit)cyorl c,/bit;(cy)()cycpl c;()cycpl bit;()bir4.位控制轉(zhuǎn)移指令(5) 位控制轉(zhuǎn)移指令是以位的狀態(tài)作為實現(xiàn)程序轉(zhuǎn)移的判斷條件,介紹如下:jc rel; (cy)=1轉(zhuǎn)移,(pc)+2+relpc,否則程序往下執(zhí)行,(pc)+2pc。jnc rel; (cy)=0轉(zhuǎn)移,(pc)+2+relpc,否則程序往下執(zhí)行,(pc)+2pc。jb bit, rel; 位狀態(tài)為1轉(zhuǎn)移。jnb bit, rel; 位狀態(tài)為0轉(zhuǎn)移。jbc bit, rel; 位狀態(tài)為1轉(zhuǎn)移,并使該位清“0”。后三條指令都是三字節(jié)指令,如果條件滿足,(pc)+3+relpc,否則程序往下執(zhí)行,(pc)+3pc。匯編語言:偽指令詳解at89s51的偽匯編指令匯編語言除了定義了匯編指令外,還定義了一些匯編偽指令,以支持匯編的運(yùn)行。偽指令是匯編時不產(chǎn)生機(jī)器語言代碼的指令,是cpu不能執(zhí)行的指令,僅提供匯編用的某些控制信息。at89s51匯編語言常用的偽指令有如下幾條。(1)org定位偽指令格式:org mm一般是16位二進(jìn)制數(shù),m指出在該指令后的(偽)指令的匯編地址,即生成的機(jī)器指令的起始存儲器地址。它必須放在每段源程序或數(shù)據(jù)段的開始行,在一個匯編語言的源程序中允許存在多條定位偽指令,但其中每一個m值都應(yīng)和前面生成的機(jī)器指令存放地址不重疊。例如下面的代碼。org1000hstart:mova,#10horg2000hsecond:clra第1條定位偽指令指定了標(biāo)號start的地址為1000h,“mov a,#10h”指令及其后面的指令匯編成的機(jī)器碼放在從1000h開始的存儲單元中。第2條定位偽指令指定了標(biāo)號second的地址為2000h。從start開始的程序段所占用的存儲地址最多為1fffh,否則與從second開始的程序段地址重疊,程序在編譯時不會發(fā)生錯誤,但在運(yùn)行時就會發(fā)生錯誤。(2)db定義字節(jié)偽指令格式:標(biāo)號:dbx1,x2,xn標(biāo)號可有可無
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)管理人員七項安全職責(zé)
- 安全生產(chǎn)工作方案4
- 報送新員工培訓(xùn)課件
- 2025至2030骨架模型行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030擠乳機(jī)行業(yè)項目調(diào)研及市場前景預(yù)測評估報告
- 2025至2030黃銅箔行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030自動防凍行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030蘋果深加工行業(yè)發(fā)展分析及有效策略與實施路徑評估報告
- 2025至2030中國大米行業(yè)項目調(diào)研及市場前景預(yù)測評估報告
- 2025至2030工裝產(chǎn)業(yè)園區(qū)定位規(guī)劃及招商策略咨詢報告
- 現(xiàn)場外傷急救技術(shù)
- 汽車電泳工藝培訓(xùn)
- 兗礦招聘考試試題及答案
- 外貿(mào)知識培訓(xùn)課件
- 2025年實驗室生物安全風(fēng)險評估報告總結(jié)
- 貴州省黔東南苗族侗族自治州(2024年-2025年小學(xué)六年級語文)部編版期末考試(下學(xué)期)試卷及答案
- 煤礦應(yīng)急醫(yī)療救護(hù)常識課件
- IT項目外包人員管理制度
- 《醫(yī)藥數(shù)理統(tǒng)計》期末考試復(fù)習(xí)題庫(含答案)
- 《上坡下坡山路駕駛》課件
- 《電信ICT產(chǎn)品介紹》課件
評論
0/150
提交評論