單片機技術及應用第三章MCS51指令系_第1頁
單片機技術及應用第三章MCS51指令系_第2頁
單片機技術及應用第三章MCS51指令系_第3頁
單片機技術及應用第三章MCS51指令系_第4頁
單片機技術及應用第三章MCS51指令系_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單片機技術及應用第三章MCS51指令系教學提示本章重、難點在于理解單片機MCS-51指令系統(tǒng)的尋址方式,以及數(shù)據(jù)傳送類指令、算術運算類指令、邏輯操作類指令、位操作指令和控制轉移類指令操作的含義和具體使用方法。教學目標掌握指令系統(tǒng)的尋址方式。掌握匯編語言指令的格式。掌握匯編語言指令的功能及應用。掌握偽指令的格式及應用。3.1指令格式單片機指令包含兩個基本部分:操作碼和操作數(shù)。操作碼用來指定指令的功能,而操作數(shù)則是指令操作的對象。比如做加法運算:ADDA,R0,就表示將寄存器A和R0中的數(shù)據(jù)相加后將結果存放到A寄存器中。在這里,ADD即為操作碼,A和R0即為操作數(shù)。指令有定長和不定長之分,定長指令其操作碼的位數(shù)為一定值,不定長指令其操作碼為變動的,一般使用頻率最高的采用最短的操作碼。單片機一般采用的是不定長指令格式,MCS-51機器語言根據(jù)指令的長短又將指令分為一字節(jié)指令、二字節(jié)指令、三字節(jié)指令3種格式。一字節(jié)指令即在程序存儲器中需要一個字節(jié)的單元來存儲;二字節(jié)指令即在程序存儲器中需要兩個字節(jié)的單元來存儲;三字節(jié)指令即在程序存儲器中需要三個字節(jié)的單元來存儲。3.1.1單字節(jié)指令單字節(jié)指令格式由8位二進制編碼表示。有兩種形式:(1) 8位全表示操作碼。例如,空操作指令NOP,其機器碼為

00000000(2) 8位編碼中包含操作碼和寄存器編碼。例如:MOVA,Rn這條指令的功能是把寄存器Rn(n=0,1,2,3,4,5,6,7)中的內容送到累加器A中去。其機器碼為

假設n=0,則寄存器編碼為Rn=000(參見指令表),指令MOVA,R0的機器碼為E8H,其中操作碼11101表示執(zhí)行把寄存器中的數(shù)據(jù)傳送到A中去的操作。000為R0寄存器編碼。11101←Rn→3.1.2雙字節(jié)指令雙字節(jié)指令格式中,指令的編碼由兩個字節(jié)組成,該指令存放在存儲器時需占用兩個存儲器單元。例如:MOVA,#DATA這條指令的功能是將立即數(shù)DATA送到累加器A中去。假設立即數(shù)DATA=85H,則其機器碼為第一字節(jié)操作碼

第二字節(jié)操作數(shù)(立即數(shù)85H)01110100100001013.1.3三字節(jié)指令三字節(jié)指令格式中第一個字節(jié)為操作碼,其后兩個字節(jié)為操作數(shù)。例如:MOVdirect,#DATA這條指令是指立即數(shù)DATA送到地址為direct的單元中去。假設direct=78H,DATA=80H,則MOV78H,#80H指令的機器碼為第一字節(jié)操作碼

第二字節(jié)第一操作數(shù)(目的地址)

第三字節(jié)第二操作數(shù)(立即數(shù))011101010111100010000000用二進制編碼表示的機器語言指令由于不便閱讀理解和記憶,因此在微機控制系統(tǒng)中采用匯編語言(用助記符和專門的語言規(guī)則表示指令的功能和特征)指令來編寫程序。一條匯編語言指令中最多包含4個區(qū)段,如下所示:

[標號:]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]例如,把立即數(shù)F1送A的指令為START:MOVA,#0F1H;立即數(shù)0F1H→A3.2尋址方式所謂的尋址就是指尋找操作數(shù)的地址。由于大多數(shù)指令都需要操作數(shù),因此在使用操作數(shù)的過程中就存在一個尋找存儲單元的問題。MCS-51指令系統(tǒng)的尋址方式有下列幾種:① 直接尋址。② 立即數(shù)尋址。③ 寄存器尋址。④ 寄存器間接尋址。⑤ 變址尋址。⑥ 位尋址。⑦ 相對尋址。3.2.1直接尋址在指令中含有操作數(shù)的直接地址,該地址指出了參與操作的數(shù)據(jù)所在的字節(jié)地址或位地址。直接尋址方式中操作數(shù)存儲的空間有以下3種:(1) 內部數(shù)據(jù)存儲器的低128B單元(00H~7FH)。例如:MOVA,70H;(70H)→A指令功能是把內部RAM80H單元中的內容送入累加器A。(2) 位地址空間。例如:MOVC,00H;直接位00H內容→進位位(3) 功能寄存器。特殊功能寄存器只能用直接尋址方式進行訪問。例如:MOVIE,#76H;立即數(shù)76H→中斷允許寄存器IE立即數(shù)尋址方式是操作數(shù)包含在指令字節(jié)中,指令操作碼后面字節(jié)的內容就是操作數(shù)本身。匯編指令中,在一個數(shù)的前面冠以“#”符號作前綴,就表示該數(shù)為立即數(shù)尋址。例如:機器碼助記符 注釋745FMOVA,#5FH ;5FH→A該指令功能是將立即數(shù)5FH送入累加器A。這條指令為雙字節(jié)指令,操作數(shù)本身5FH跟在操作碼74H后面,以指令形式存放在程序存儲器內。在MCS-51指令系統(tǒng)中還有一條立即數(shù)為雙字節(jié)指令:機器碼助記符 注釋905678MOVDPTR,#5678H;56H→DPH,78H→DPL這條指令存放在程序存儲器中,占3個存儲單元。3.2.3寄存器尋址由指令指出某一個寄存器中的內容作為操作數(shù),這種尋址方式稱為寄存器尋址。寄存器尋址按所選定的工作寄存器R0~R7進行操作,指令機器碼的低3位的8種組合000、001、…、110、111,分別指明所用的工作寄存器R0、R1、…、R6、R7。例如:MOVA,Rn(n=0~7)這8條指令對應的機器碼分別為E8H~EFH。又如:INCR0;(R0)+1→R03.2.4寄存器間接尋址由指令指出某一個寄存器的內容作為操作數(shù)的地址,這種尋址方式稱為寄存器間接尋址。這里要注意,在寄存器間接尋址方式中,存放在寄存器中的內容不是操作數(shù),而是操作數(shù)所在的存儲器單元地址,寄存器起地址指針的作用,寄存器間接尋址用符號“@”表示。寄存器間接尋址只能使用寄存器R0或R1作為地址指針,來尋址內部RAM(00H~FFH)中的數(shù)據(jù)。寄存器間接尋址也適用于訪問外部RAM,此時可使用R0、R1或DPTR作為地址指針。例如:MOVA,@R0;((R0))→AMOVA,@R0;((R0))→A指令功能是把R0所指出的內部RAM單元中的內容送累加器A。若R0內容為60H,而內部RAM60H單元中的內容是3BH,則指令MOVA,@R0的功能是將3BH這個數(shù)送到累加器A,如圖3-1所示。3.2.5變址尋址這種尋址方式用于訪問程序存儲器中的數(shù)據(jù)表格,它把基址寄存器(DPTR或PC)和變址寄存器A的內容作為無符號數(shù)相加形成16位的地址,訪問程序存儲器中的數(shù)據(jù)表格。操作時是以某個寄存器的內容為基礎,然后在這個基礎上再加上地址偏移量,形成真正的操作數(shù)地址。需要特別指出的是,用來作為基礎的寄存器可以是PC或是DPTR,地址偏移量存儲在累加器A中。例如:MOVCA,@A+DPTR ;((DPTR)+(A))→AMOVCA,@A+PC ;((PC)+(A))→A3.2.6位尋址位尋址方式是指將要訪問的數(shù)據(jù)是一個單獨的位,位地址表示一個可作位尋址的單元,它或者在內部RAM中(字節(jié)20H~2FH)或者是一個硬件的位。有兩種方法在一個操作數(shù)中表示一個位地址。(1) 夠用一個DATA類型地址規(guī)定一個含有該位的字節(jié),并用位選擇符號點(.),尾隨一個位的識別符(0~7)單獨指出該字節(jié)中特定的位。例如,PSW.5、23H.0及ACC.6是位選擇符的有效用法。能夠用一個匯編時的表達式去表達該字節(jié)地址或該位識別符,匯編程序會把它翻譯成正確的絕對值或可重新定位值。注意,僅在片內地址空間某些字節(jié)可作位尋址。(2) 要明確規(guī)定位地址。此時該表達式表示該位空間中(它必須有一個BIT段類型)的位地址。注意:位地址0~127映像到片內RAM的字節(jié)20H~2FH,而位128~226映像至硬件寄存器空間,可作位尋址的單元。下面介紹幾個例子表示幾種規(guī)定位的方法。SETBTR0 ;置預先定義了的位地址TR0(定時器上的運行標志)SETB88H.5 ;置88H單元的位5SETBALARM ;置用戶定義的位ALARMSETB8EH ;對位地址8EH置位(定時器1的運行標志)3.2.7相對尋址相對尋址主要是針對跳轉指令而言的。對于跳轉指令,跳轉去的目標指令的地址是通過正在執(zhí)行的指令地址來確定的,一般是采用正在執(zhí)行的指令地址加上偏移量的方式。這類尋址方式是以當前PC的內容作為基地址,加上指令中給定的偏移量所得結果作為轉移地址,它只適用于雙字節(jié)轉移指令。偏移量是帶符號數(shù),在-128~+127范圍內用補碼表示。例如:JCrel;C=1跳轉3.3指令類型MCS-51指令系統(tǒng)有42種助記符,代表了33種操作功能,指令功能助記符與操作數(shù)各種可能的尋址方式相結合,共構成111種指令。這111種指令有不同的分類方式。如果按字節(jié)分類,單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。若從指令執(zhí)行的時間看,單機器周期(12個振蕩器周期)指令64條,雙機器周期指令45條,兩條(乘、除)4個機器周期指令。在12MHz晶振的條件下,分別為1μs、2μs和4μs。由此可見,MCS-51指令系統(tǒng)具有存儲空間效率高和執(zhí)行速度快的特點。3.3.1指令分類按指令的功能,MCS-51指令系統(tǒng)可分為下列5類:(1) 數(shù)據(jù)傳送類。(2) 算術運算類。(3) 邏輯操作類。(4) 位操作類。(5) 控制轉移類。Rn——表示當前工作寄存器區(qū)中的工作寄存器,n取0~7,表示R0~R7。@Ri——通過寄存器R1或R0間接尋址的8位內部數(shù)據(jù)RAM單元(0~255),i=0,1。direct——8位內部數(shù)據(jù)存儲單元地址。它可以是一個內部數(shù)據(jù)RAM單元(0~127)或特殊功能寄存器地址或地址符號。#data——指令中的8位立即數(shù)。#data16——指令中的16位立即數(shù)。addr16——16位目標地址。用于LCALL和LJMP指令,可指向64KB程序存儲器地址空間的任何地方。addr11——11位目標地址。用于ACALL和AJMP指令,轉至當前PC所在的同一個2KB程序存儲器地址空間內。DPTR——數(shù)據(jù)指針,用作16位的地址寄存器。(X)——X中的內容。((X))——表示以X單元的內容為地址的存儲器單元內容,即(X)作地址,該地址單元的內容用((X))表示。A——累加器。B——特殊功能寄存器,專用于乘(MUL)和除(DIV)指令中。C——進位標志或進位位。

bit——內部數(shù)據(jù)RAM或部分特殊功能寄存器里的可尋址位的位地址?!硎緦υ撐徊僮鲾?shù)取反。rel——補碼形式的8位偏移量。用于相對轉移和所有條件轉移指令中。偏移量相對于當前PC計算,在-128~+127范圍內取值。3.3.2數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令一般的操作是把源操作數(shù)傳送到指令所指定的目標地址,指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)所代替。數(shù)據(jù)傳送是一種最基本的操作,數(shù)據(jù)傳送指令是編程時使用最頻繁的指令,其性能對整個程序的執(zhí)行效率起很大的作用。在MCS-51指令系統(tǒng)中,數(shù)據(jù)傳送指令非常靈活,它可以把數(shù)據(jù)方便地傳送到數(shù)據(jù)存儲器和I/O口中。數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCHD、PUSH、POP。數(shù)據(jù)傳送類指令源操作數(shù)和目的操作數(shù)的尋址方式及傳送路徑如圖3-2所示。1.以直接地址為目標操作數(shù)和源操作數(shù)的傳送指令MOVdirect1,direct2;(direct2)→direct1這是一條三字節(jié)指令,指令的第一字節(jié)為操作碼,第二字節(jié)為源操作數(shù)的地址,第三字節(jié)為目標操作數(shù)的地址。源操作數(shù)和目標操作數(shù)的地址都以直接地址形式表示,它們可以是內部RAM存儲器或特殊功能寄存器。指令的功能很強,能實現(xiàn)內部RAM之間、特殊功能寄存器之間或特殊功能寄存器與內部RAM之間的數(shù)據(jù)傳送。例如:MOV0E0H,78H其中目標操作數(shù)地址0E0H為累加器的字節(jié)地址,源操作數(shù)地址78H為內部RAM單元地址,指令的功能是把內部RAM78H單元中的數(shù)據(jù)傳送到累加器ACC中。指令的機器碼為85H、78H、E0H。2.累加器與外部數(shù)據(jù)存儲器之間數(shù)據(jù)傳送指令該類指令有下面兩組:1) DPTR內部指示外部數(shù)據(jù)存儲器地址(1) 外部數(shù)據(jù)存儲器內容送累加器:助記符 功能MOVXA,@DPTR A←((DPTR))執(zhí)行這條指令時,P3.7引腳上輸出RD有效信號,用作外部數(shù)據(jù)存儲器的讀選通信號。DPTR所包含的16位地址信息由P0口(低8位)和P2口(高8位)輸出,選中單元的數(shù)據(jù)由P0輸入到累加器,P0口作分時復用的總線。(2) 累加器內容送外部數(shù)據(jù)存儲器:助記符 功能MOVX@DPTR,A ((DPTR))←A執(zhí)行該指令時,P3.6引腳上輸出WR有效信號,用作外部數(shù)據(jù)存儲器的寫選通信號。DPTR所包含的16位地址信息由P0口(低8位)和P2口(高8位)輸出,累加器的內容由P0口輸出,P0口作分時復用總線。2) 由Ri內容指示外部數(shù)據(jù)存儲器地址(1) 外部數(shù)據(jù)存儲器內容送累加器:助記符功能MOVXA,@RiA←((Ri)+(P2)),i=0,1執(zhí)行該指令時,在P3.7引腳上輸出RD有效信號,用作外部數(shù)據(jù)存儲器的讀選通信號。Ri所包含的低8位地址由P0口輸出,而高8位地址由P2口輸出。選中單元的數(shù)據(jù)由P0口輸入到累加器?!纠?-1】設外部數(shù)據(jù)存儲器3456H單元中內容為80H,依次執(zhí)行下列指令后,求A中的內容:MOVP2,#34HMOVR0,#56HMOVXA,@R0解:執(zhí)行第一條指令之后,P2中內容為34H,執(zhí)行第二條指令后R0中內容變?yōu)?6H,執(zhí)行第三條指令是將((R0)+(P2))為地址的存儲器,即3456H單元中的內容送入累加器A中,故最后A中內容為80H。(2) 累加器內容送外部數(shù)據(jù)存儲器:助記符 功能MOVX@Ri,A ((Ri)+(P2))←(A),i=0,1執(zhí)行該指令時,在P3.6引腳上輸出有效信號,用作外部數(shù)據(jù)存儲器的寫選通信號。P0口上分時輸出由Ri指定的低8位地址及輸入外部數(shù)據(jù)存儲器單元的內容。高8位地址由P2口輸出。上述指令在運用時需要注意以下3點:(1) 地址寄存器只能使用DPTR和Ri,并且當使用Ri時只能訪問外部RAM的256B。(2) 與外部RAM之間傳送數(shù)據(jù)只能通過累加器A來實現(xiàn)。(3) 與外部RAM之間傳送數(shù)據(jù)時使用MOVX指令。3.程序存儲器內容送累加器這類指令包含下列兩條,常用于查表時用。第一條:助記符 功能MOVCA,@A+PCPC←(PC)+1,A←((A)+(PC))這條指令以PC作為基址寄存器,A的內容作為無符號數(shù)和PC內容(下一條指令第一字節(jié)地址)相加后得到一個16位的地址,把該地址指出的程序存儲器單元的內容送到累加器A?!纠?-2】已知(A)=20H,簡述執(zhí)行以下指令將起到的作用。地址指令1000H:MOVCA,@A+PC解:執(zhí)行該條指令后PC內容加1,即為1001H,并且將累加器A的內容作為無符號數(shù)和PC的內容相加后得到一個16位的地址1021H,故該條指令的作用就是將程序存儲器中1021H單元的內容送入A。第二條:助記符 功能MOVCA,@A+DPTRA←((A)+(DPTR))這條指令以DPTR作為基址寄存器,A的內容作為無符號數(shù)和DPTR的內容相加得到一個16位的地址,把該地址指出的程序存儲器單元的內容送到累加器A。【例3-3】已知(DPTR)=6200H,(A)=80H,簡述執(zhí)行以下指令將起到的作用。MOVCA,@A+DPTR解:執(zhí)行該條指令后將DPTR的內容6200H以及A的內容80H,相加得到一個16位的地址6280H,故該條指令的作用就是將程序存儲器中6280H單元的內容送入累加器A。4.棧操作指令在MCS-51內部RAM中可以設定一個后進先出的區(qū)域(LIFO),稱為堆棧。在特殊功能寄存器中有一個堆棧指針SP,它指出棧頂?shù)奈恢谩T谥噶钕到y(tǒng)中有下列兩條用于數(shù)據(jù)傳送的棧操作指令:

1) 進棧指令助記符 功能PUSHdirect SP←(SP)+1,(SP)←(direct)這條指令的功能是首先將棧指針SP的內容加1,然后把直接地址指出的單元內容傳送到棧指針SP所指的內部RAM單元中?!纠?-4】已知(SP)=50H,(ACC)=33H,(B)=80H,分析執(zhí)行下列命令后相應的堆棧單元以及SP中內容的變化。PUSHACC;PUSHB;解:執(zhí)行第一條指令后,SP中內容加1,變?yōu)?1H,將A中內容33H送入堆棧單元51H中;執(zhí)行第二條指令后,SP中內容再加1,變?yōu)?2H,將B中內容80H送入堆棧單元52H中,故最后結果為(SP)=52H,(51H)=33H,(52H)=80H。2) 出棧指令助記符 功能POPdirectdirect←((SP))SP←(SP)-1這條指令的功能是棧指針SP所指的內部RAM單元內容送入直接地址指出的字節(jié)單元中,棧指針SP的內容減1?!纠?-5】已知(SP)=52H,(52H)=70H,(51H)=30H,分析執(zhí)行下列命令后DPTR和SP中的內容。POPDPH;POPDPL;解:執(zhí)行第一條指令后,找到SP中內容為地址的存儲單元52H,將52H中內容70H送入DPH,之后SP中內容減1,變?yōu)?1H;執(zhí)行第二條指令后,找到SP中內容為地址的存儲單元51H,將51H中內容30H送入DPL,之后SP中內容減1,變?yōu)?0H,故最后結果為(DPTR)=7030H,(SP)=50H。執(zhí)行POPdirect指令不影響標志位,但當直接地址為PSW時,可以使一些標志位改變。這也是通過指令強行修改標志的一種方法。假設已把PSW的內容壓入棧頂,用下列指令修改PSW內容,使FO、RS1、RS0均為1,最后用出棧指令把內容送回程序狀態(tài)字PSW,實現(xiàn)對PSW內容的修改。MOVR0,SP ;取棧指針MOVA,@R0 ;棧頂內容到AORLA,#38H ;修改棧頂內容MOV@R0,A ;回棧頂POPPSW ;修改PSW5.字節(jié)交換指令這組指令的功能是將累加器A的內容和源操作數(shù)內容相互交換。源操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址等尋址方式。助記符 功能XCHA,Rn (A)←→(Rn),n=0~7XCHA,@Ri (A)←→((Ri))i=0,1XCHA,direct (A)←→(direct)【例3-6】已知(A)=70H,(R7)=07H,執(zhí)行下列指令,分析相應存儲單元內容的變化:XCHA,R7解:執(zhí)行該條指令相當于把A中的內容和R7中的內容互換了一下,即最后結果為(A)=07H,(R7)=70H。6.半字節(jié)交換指令助記符功能XCHDA,@Ri(A3~0)←→((Ri)3~0)i=0,1這條指令將A的低4位和R0或R1指出的RAM單元低4位相互交換,各自的高4位不變。3.3.3算術運算類指令在MCS-51指令系統(tǒng)中具有單字節(jié)的加、減、乘、除法指令(詳見表3-2),這類指令的運算功能比較強。1.加法指令ADDA,Rnn=0~7ADDA,directADDA,@Rii=0,1ADDA,#data【例3-7】已知(A)=85H,(R0)=20H,(20H)=0AFH,執(zhí)行以下指令,求累加器A以及各標志位中的內容。ADDA,@R0解:運算過程10000101+10101111——————————————00110100

列出加法運算式,相加結果為34H;D7有進位,則進位位CY置“1”;D3有進位,輔助進位位AC置“1”;D7有進位D6無進位,溢出標志位OV置“1”,所以最終結果為(A)=34H,CY=1,AC=1,OV=1。2.帶進位加法指令ADDCA,Rnn=0~7ADDCA,directADDCA,@Rii=0,1ADDCA,#data這組帶進位加法指令的功能是把所指出的字節(jié)變量、進位標志位與累加器A內容相加,結果留在累加器中。對進位標志位與溢出標志位的影響與ADD指令相同?!纠?-8】已知(A)=85H,(20H)=0FFH,CY=1,執(zhí)行以下指令,求累加器A以及各標志位中的內容。ADDCA,20H解:運算過程

1000010111111111+

1——————————————10000101列出加法運算式,注意應加上進位標志位CY的內容,相加結果為85H;D7有進位,則進位位CY置“1”;D3有進位,輔助進位位AC置“1”;D7有進位且D6也有進位,溢出標志位OV置“0”,所以最終結果為(A)=85H,CY=1,AC=1,OV=0。3.帶進位減法指令SUBBA,Rn(n=0~7)SUBBA,directSUBBA,@Ri(i=0,1)SUBBA,#data這組帶進位減法指令的功能是從累加器中減去指定的變量和進位標志,結果放在累加器中。進行減法運算的過程中如果位7需借位,則CY置位,否則CY清“0”;如果位3需借位,則AC置位,否則AC清“0”;如果位6需借位而位7不需借位或者位7需借位而位6不需借位,則溢出標志OV置位,否則溢出標志清“0”。在帶符號數(shù)運算時,只有當符號不相同的兩數(shù)相減時才會發(fā)生溢出。4.加1指令INCAINCRn(n=0~7)INCdirect INC@Ri(i=0,1)INCDPTR這組增量指令的功能把所指出的變量加1,若原來數(shù)據(jù)為FEH,執(zhí)行后為FFH,不影響任何標志位。操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址方式。注意:當用本指令修改輸出口Pi(即指令中的direct為端口P0~P3,地址分別為80H、90H、A0H、B0H)時,其功能是修改出口的內容。指令執(zhí)行過程中,首先讀入端口的內容,然后在CPU中加1,繼而輸出到端口。這里讀入端口的內容來自端口的鎖存器而不是端口的引腳?!纠?-9】已知(A)=FEH,(R3)=01H,(30H)=A0H,(R0)=40H,(40H)=00H,求執(zhí)行下列指令后各相應存儲單元中內容的變化。INCA ;INCR3 ; INC30H ;INC@R0 ; 解:執(zhí)行第一條指令后,A←(A)+1,所以得到(A)=FFH。執(zhí)行第二條指令后,R3←(R3)+1,所以得到(R3)=02H。執(zhí)行第三條指令后,30H←(30H)+1,所以得到(30H)=0A1H。執(zhí)行第四條指令后,(R0)←((R0))+1,所以得到(40H)=01H。4條指令均不改變PSW狀態(tài)。5.十進制調整指令DAA這條指令對累加器參與的BCD碼加法運算所獲得的8位結果(在累加器中)進行十進制調整,使累加器中的內容調整為兩位BCD碼數(shù)。該指令執(zhí)行的過程如圖3-3所示?!纠?-10】已知(A)=66H,(R5)=57H,執(zhí)行下列指令,求累加器A和CY標志位中的內容。ADDA,R5DAA解:因為在加法指令后運用了十進制調整指令,所以最簡單的解題思路是將A和R5中的內容看做是十進制數(shù)66和57相加,得到和123,最高位有了進位,所以CY=1,而(A)=23H。6.減1指令DECADECRn(n=0~7)DECdirectDEC@Ri(i=0,1)這組指令的功能是將指定的變量減1。若原來為00H,減1后下溢為0FFH,不影響標志位?!纠?-11】(A)=0EH,(R7)=29H,(30H)=11H,(R1)=40H,(40H)=00H,求執(zhí)行下列指令后各相應存儲單元中內容的變化。DECA ; A←(A)-1DECR7 ; R7←(R7)-1DEC30H ; 30H←(30H)-1DEC@R1 ; (R1)←((R1))-1解:執(zhí)行第一條指令后,A←(A)-1,所以得到(A)=0DH。執(zhí)行第二條指令后,R7←(R7)-1,所以得到(R7)=28H。執(zhí)行第三條指令后,30H←(30H)-1,所以得到(30H)=10H。執(zhí)行第四條指令后,(R1)←((R1))-1,所以得到(40H)=0FFH。4條指令均不改變PSW狀態(tài)。7.乘法指令MULAB這條指令的功能是把累加器A和寄存器B中的無符號8位整數(shù)相乘,其16位積的低位字節(jié)在累加器A中,高位字節(jié)在B中。如果積大于255(0FFH),則溢出標志位OV置位,否則OV清“0”。進位標志總是清“0”?!纠?-12】已知(A)=50H,(B)=0A0H,執(zhí)行以下乘法指令,求A、B及相應標志位中的內容。MULAB解:相乘得到,(B)=32H,(A)=00H(即積為3200H),CY=0,OV=1。8.除法指令DIVAB這條指令的功能是把累加器A中的8位無符號整數(shù)除以寄存器B中的8位無符號整數(shù),所得商的整數(shù)部分存放在累加器A中,余數(shù)在寄存器B中。進位位CY和溢出標志位OV清“0”。如果原來B中的內容為0(被零除),則結果A和B中內容不確定,且溢出標志位OV置位,在任何情況下,CY都清“0”?!纠?-13】已知(A)=0FBH,(B)=12H,執(zhí)行除法指令,求A、B及相應標志位中的內容。DIVAB解:相除得到,(A)=0DH,(B)=11H,CY=0,OV=0。3.3.4邏輯操作類指令1.單邏輯操作指令1) 累加器清零CLRA這條指令的功能是將累加器A清“0”,不影響CY、AC、OV等標志位。2) 累加器內容按位取反CPLA這條指令的功能是將累加器A的每一位邏輯取反,原來為1的位變?yōu)?,原來為0的位變?yōu)?,不影響標志位。【例3-14】已知(A)=11101110B,執(zhí)行指令,求A中的內容。CPLA解:將累加器A的每一位邏輯取反,可得(A)=00010001B。3) 左循環(huán)移位指令(1) 累加器內容循環(huán)左移。RLA這條指令的功能是把累加器ACC的內容向左循環(huán)移1位,位7循環(huán)移入位0,如圖3-4所示,不影響標志位。(2) 累加器帶進位左循環(huán)移位指令:RLCA這條指令的功能是將累加器ACC的內容和進位標志一起向左循環(huán)移1位,ACC的位7移入進位位CY,CY移入ACC的0位,不影響其他標志位。4) 右循環(huán)移位指令(1) 累加器內容循環(huán)右移指令:RRA這條指令的功能是將累加器ACC的內容向右循環(huán)移1位,ACC的位0循環(huán)移入ACC的位7,不影響標志位。(2) 累加器帶進位右循環(huán)移位指令:RRCA這條指令的功能是將累加器ACC的內容和進位標志位CY一起向右循環(huán)移1位,ACC的位0移入CY,CY移入ACC的位7。5) 累加器半字節(jié)交換指令SWAPA這條指令的功能是將累加器ACC的高半字節(jié)(ACC.7~ACC.4)和低半字節(jié)(ACC.3~ACC.0)互換?!纠?-15】已知(A)=65H,執(zhí)行指令SWAPA后,求A中的內容。解:將累加器A的高4位與低4位互換,可得(A)=56H。2.邏輯與指令ANLA,Rn(n=0~7)ANLA,directANLA,@Ri(i=0,1)ANLA,#dataANLdirect,AANLdirect,#data這組指令的功能是在指出的變量之間執(zhí)行以位為基礎的邏輯與操作,將結果存放在目的變量中。操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等尋址方式。當這條指令用于修改一個輸出口時,作為原始口數(shù)據(jù)的值將從輸出口數(shù)據(jù)鎖存器(P0~P3)讀入,而不是讀引腳狀態(tài)?!纠?-16】設(A)=17H,(R0)=0EDH,執(zhí)行指令ANLA,R0后,求A中的內容。解:運算過程00010111∧)

11101101——————————————00000101將A和R0中對應的每一位作邏輯與運算,可得最后結果(A)=05H。3.邏輯或指令ORLA,Rn(n=0~7)ORLA,directORLA,@Ri(i=0,1)ORLA,#dataORLdirect,AORLdirect,#data這組指令的功能是在所指出的變量之間執(zhí)行以位為基礎的邏輯或操作,將結果存到目的變量中。操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等方式。同ANL類似,用于修改輸出口數(shù)據(jù)時,原始數(shù)據(jù)值為口鎖存器內容?!纠?-17】設(P1)=25H,(A)=73H,執(zhí)行指令ORLP1,A后,求P1中的內容。解:運算過程00100101∨)

01110011——————————————01110111將P1和A中對應的每一位作邏輯或運算,可得最后結果(P1)=77H。4.邏輯異或指令XRLA,Rn(n=0~7)XRLA,direct XRLA,@Rii=0,1XRLA,#dataXRLdirect,AXRLdirect,#data 這組指令的功能是在所指出的變量之間執(zhí)行以位為基礎的邏輯異或操作,結果存放到目的變量中去。操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等尋址方式。對輸出口Pi(i=0,1,2,3)與ANL指令一樣是對口鎖存器內容讀出修改?!纠?-18】設(A)=80H,(R3)=63H,執(zhí)行指令XRLA,R3后,求A中的內容。解:運算過程10000000)01100011——————————————————————11100011將A和R3中對應的每一位作邏輯異或運算,可得最后結果(A)=0E3H。3.3.5位操作類指令所謂位處理,就是以位(bit)為單位進行的運算和操作。位變量也稱為布爾變量或開關變量。位操作指令是位處理器的軟件資源,它是MCS-51指令系統(tǒng)的一個子集,用以進行位的傳送、置位、清“0”、取反、位狀態(tài)判跳、位邏輯運算、位輸入與輸出等位操作。1.數(shù)據(jù)位傳送指令MOVC,bitMOVbit,C這組指令的功能是把由源操作數(shù)指出的布爾變量送到目的操作數(shù)指定的位中去。其中一個操作數(shù)必須為進位標志位,另一個可以是任何直接尋址位,指令不影響其他寄存器和標志。2.位變量修改指令CLRCCLRbitCPLCCPLbitSETBCSETBbit這組指令將操作數(shù)指出的位清“0”、取反、置“1”,不影響其他標志位。3.位變量邏輯與指令ANLC,bitANLC,/bit這組指令的功能是,如果源操作數(shù)的布爾值是邏輯0,則進位標志清“0”,否則進位標志保持不變。操作數(shù)前斜線“/”表示取尋址位的邏輯非值,但不影響本身值,也不影響別的標志。源操作數(shù)只有直接位尋址方式?!纠?-19】設P1為輸入口,P3.0作輸出線,執(zhí)行下列命令:MOVC,P1.0 ;CY←(P1.0)ANLC,P1.1 ;CY←(CY)∧(P1.1)ANLC,/P1.2 ;CY←(CY)∧()MOVP3.0,C ;P3.0←CY解:P3.0=(P1.0)∧(P1.1)∧()4.位變量邏輯或指令ORLC,bitORLC,/bit這組指令的功能是,如果源操作數(shù)的布爾值為1,則置位進位標志位,否則進位標志CY保持原來狀態(tài)。同樣,斜線“/”表示邏輯非?!纠?-20】P1口為輸出口,執(zhí)行下列指令:MOVC,00H ;CY←(20H.0)ORLC,01H ;CY←(CY)∨(20H.1)ORLC,02H ;CY←(CY)∨(20H.2)ORLC,03H ;CY←(CY)∨(20H.3)ORLC,04H ;CY←(CY)∨(20H.4)ORLC,05H ;CY←(CY)∨(20H.5)ORLC,06H ;CY←(CY)∨(20H.6)ORLC,07H ;CY←(CY)∨(20H.7)MOVP1.0,C ;P1.0←CY解:P1.0=1,即內部RAM的20單元中只要有一位為1,P1.0輸出就為1。5.位變量條件轉移指令助記符 轉移條件JCrel CY=1JNCrel CY=0JBbit,rel (bit)=1JNBbit,rel (bit)=0JBCbit,rel (bit)=13.3.6控制轉移類指令1.無條件轉移指令1) 絕對轉移指令AJMPaddR11這是2KB范圍內的無條件轉跳指令,把程序的執(zhí)行轉移到指定的地址。2) 相對轉移(短跳轉)指令SJMPrel這是無條件轉跳指令,執(zhí)行時在PC加2后,把指令中補碼形式的偏移量值加到PC上,并計算出轉向目標地址。因此,轉向的目標地址可以在這條指令前128B到后127B之間。該指令使用時很簡單,程序執(zhí)行到該指令時就跳轉到標號rel處執(zhí)行。例如:KD:SJMPrel;3) 長跳轉指令LJMPaddR16執(zhí)行這條指令時把指令的第二和第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無條件地轉向指定地址。轉移的目標地址可以在64KB程序存儲器地址空間的任何地方,不影響任何標志。例如:LJMP8100H4) 散轉指令JMP@A+DPTR這條指令的功能是把累加器中8位無符號數(shù)與數(shù)據(jù)指針DPTR中的16位數(shù)相加,將結果作為下一條指令地址送入PC,不改變累加器和數(shù)據(jù)指針內容,也不影響標志位。利用這條指令能實現(xiàn)程序的散轉?!纠?-21】如果累加器A中存放待處理命令編號(0~7),程序存儲器中存放著標號為FRTB的轉移表首址,則執(zhí)行下面的程序,將根據(jù)A中命令編號轉向相應的命令處理程序。MAIN:MOVR1,A ;(A)*3→ARLAADDA,R1MOVDPTR,#FRTB ;轉移表首址→DPTRJMP@A+DPTR ;據(jù)A值跳轉到不同入口

FRTB:LJMPFR0 ;轉向命令0處理入口LJMPFR1 ;轉向命令1處理入口LJMPFR2 ;轉向命令2處理入口LJMPFR3 ;轉向命令3處理入口LJMPFR4 ;轉向命令4處理入口LJMPFR5 ;轉向命令5處理入口LJMPFR6 ;轉向命令6處理入口LJMPFR7 ;轉向命令7處理入口2.條件轉移指令條件轉移指令是依某種特定條件轉移的指令。條件滿足時轉移(相當于一條相對轉移指令),條件不滿足時則順序執(zhí)行下面的指令。目的地址在下一條指令的起始地址為中心的256B范圍內(-128~+127)。當條件滿足時,先把PC加到指向下一條指令的第一個字節(jié)地址,再把有符號的相對偏移量加到PC上,計算出轉向地址。助記符轉移條件JZrel(A)=0JNZrel(A)≠03.比較不相等轉移指令CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@R1,#data,rel這組指令的功能是比較前面兩個操作數(shù)的大小。如果它們的值不相等則轉移。在PC加到下一條指令的起始地址后,通過把指令最后一個字節(jié)的有符號的相對偏移量加到PC上,并計算出轉向地址。如果第一個操作數(shù)(無符號整數(shù))小于第二個操作數(shù),則進位標志CY置“1”,否則CY清“0”。不影響任何一個操作數(shù)的內容。4.減1不為0轉移指令DJNZRn,relDJNZdirect,rel這組指令把源操作數(shù)減1,結果回送到源操作數(shù)中去,如果結果不為0則轉移,跳到標號rel處執(zhí)行,等于0就執(zhí)行下一條指令。源操作數(shù)有寄存器尋址和直接尋址方式。該指令通常用于實現(xiàn)循環(huán)計數(shù)?!纠?-22】延時程序:START: SETB P1.1 ;P1.1←1DL: MOV 30H,#03H ;30H←03H(置初值)DL0: MOV 31H,#0F0H ;31H←F0H(置初值)DL1: DJNZ 31H,DL1 ;31H←(31H)-1,如(31

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論