第3章 MCS-51單片機的指令系統(tǒng)_第1頁
第3章 MCS-51單片機的指令系統(tǒng)_第2頁
第3章 MCS-51單片機的指令系統(tǒng)_第3頁
第3章 MCS-51單片機的指令系統(tǒng)_第4頁
第3章 MCS-51單片機的指令系統(tǒng)_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第3章MCS-51單片機的

指令系統(tǒng)

本章要點指令格式尋址方式指令系統(tǒng)本章難點指令系統(tǒng)指令是計算機根據(jù)人們的要求來完成某項操作的命令。所謂指令系統(tǒng)是計算機所有命令的集合。

指令系統(tǒng)中指令功能的強弱直接反映了計算機性能的強弱。MCS-51單片機的111條指令有以下三種分類方法:(1)按指令所占字節(jié)數(shù)分,有:單字節(jié)指令(49條)雙字節(jié)指令(45條)三字節(jié)指令(17條)(2)按指令執(zhí)行的時間分,有:單周期(機器周期)指令(64條)雙周期指令(45條)四周期指令(2條)(3)按指令的操作功能分,有:數(shù)據(jù)傳送類指令(29條)算術(shù)運算類指令(24條)邏輯運算與移位類(24條)控制轉(zhuǎn)移類指令(17條)位操作類指令(17條)

3.1

MCS-51的匯編語言指令格式和符號簡介3.1.1指令格式MCS-51單片機指令的匯編語言語句行格式如下:[標號:]操作碼助記符[操作數(shù)1][,操作數(shù)2][,操作數(shù)3][;注釋]其中,帶方括號部分為可選項;標號后必有冒號;助記符和操作數(shù)之間須用空格分隔;各操作數(shù)之間用逗號分隔;注釋要用分號開頭。各字段含義如下:(1)標號是用戶設(shè)定的語句地址的符號,一般用字母打頭的“字母-數(shù)字”串組成。(2)操作碼助記符是由英文字母組成的字符串,它規(guī)定了指令的功能,如ADD加法、MUL乘法、MOV數(shù)據(jù)傳遞等,是指令中惟一不能空缺的部分。(3)操作數(shù)是指令操作的對象,它指出了參與操作的數(shù)據(jù)來源和操作結(jié)果存放的目的單元。操作數(shù)可以是一個數(shù)(立即數(shù)),也可以是一個數(shù)所在的存儲單元地址。在MCS-51的指令系統(tǒng)中,操作數(shù)最多可以有三個。在兩個操作數(shù)的指令中,將操作數(shù)1叫做目的操作數(shù),操行數(shù)2叫源操作數(shù)。(4)注釋部分是對該語句或程序段功能的解釋說明,其目的是寫給人看的,它不屬于指令的功能部分,單片機不執(zhí)行。需注意的是,當注釋較長,一行不夠時可以換一行寫,但每行開頭仍必須用分號“;”打頭。例如,以后要學(xué)習(xí)的一程序段:

MOV23H,#0AH;23H←0AH。

CLRA

;寄存器A的內(nèi)容清零。LOOP:ADDA,23H

;將寄存器A的內(nèi)容和23H單元內(nèi)容相加,結(jié)果存于A。

DJNZ23H,LOOP

;當23H單元中的內(nèi)容減1后不為0時,轉(zhuǎn)移至標號LOOP;標識的所在單元。3.1.2數(shù)據(jù)的表示形式和符號簡介1.數(shù)據(jù)的表示形式(1)二進制數(shù)形式,末尾用字母B標識,如01011000B。(2)十進制數(shù)形式,末尾用字母D標識或不用任何標識,如78D、98。(3)十六進制形式,末尾用字母H標識,當數(shù)據(jù)的第一個數(shù)碼為字母時,須在前面添加“0”,0F7H、OAEH、12H。(4)ASCII碼形式,用單引號括起來標識,如’ABC’、’123’。2.常用符號簡介在以后的指令學(xué)習(xí)中,除單片機的寄存器之外,還會用到一些符號,下面對常用到的符號作一簡要介紹:(1)Rn:當前工作寄存器組中的8個通用寄存器R0~R7。其中,n=0~7。(2)Ri:當前工作寄存器組中的2個通用寄存器R0、R1。其中,i=0~1。(3)#data:8位立即數(shù)。(4)#data16:16位立即數(shù)。(5)addr11:11位目的地址。(6)addr16:16位目的地址。(7)direct:8位片內(nèi)RAM的單元地址(包括SFR的地址和符號)。

(8)rel:8位補碼表示的有符號數(shù),表示相對轉(zhuǎn)移指令中的偏移量。(9)bit:片內(nèi)RAM或SFR中的直接尋址位。(10)C:代表PSW中的進位標志位,也是單片機中位處理器的累加器。(11)(X):表示括號內(nèi)X寄存器或X地址單元中的內(nèi)容,如(A)表示寄存器A的內(nèi)容、(30H)表示30H地址單元中的內(nèi)容。(12)((X)):表示以某寄存器或某地址單元中的內(nèi)容為地址的這個單元中的內(nèi)容。(13)@:間接尋址方式中間址寄存器的標志符號。(14)←:將箭頭右邊的內(nèi)容送箭頭左邊的單元或寄存器。(15)/:加在位地址前,表示對該位的狀態(tài)取反。3.2

MS-51單片機的尋址方式尋址就是尋找操作數(shù)的地址。所謂尋址方式,就是如何確定操作數(shù)所在的位置(地址)把操作數(shù)取出來的方法,或者說通過什么的方式找到操作數(shù)。

尋址方式的方便與快捷是衡量CPU性能的一個重要方面。MCS—51單片機有七種尋址方式,分別是:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址,

3.2.1立即尋址

所謂立即尋址,指操作數(shù)在指令中以立即數(shù)的形式直接給出。立即數(shù)可以是8位的,也可以是16位的。立即數(shù)前方加“#”來標識。例如:MOVA,#23H

;A←23H,即將立即數(shù)23H送入累加器A中。MOVDPTR,#1000H

;DPTR←1000H,即指令執(zhí)行后DPTR的內(nèi)容為1000H。

3.2.2直接尋址直接尋址是指操作數(shù)的地址在指令中直接給出。直接尋址方式可訪問三種地址空間:(1)特殊功能寄存器SFR(只能用直接尋址);(2)片內(nèi)RAM的低128個字節(jié)單元(該空間還可以采用寄存器間接尋址);(3)211個位地址空間。20H20H50H累加器A內(nèi)部RAM……例如:MOVA,50H

;A←(50H),即把50H單元中的內(nèi)容送入累加器A。該例中,若(50H)=20H,則指令執(zhí)行后累加器A中內(nèi)容為20H。又如:MOVA,P1

;A←(P1)

MOVA,90H源操作數(shù)P1屬于直接尋址方式。因為特殊功能寄存器既P1可以用符號P1表示,又可以用其地址90H表示。3.2.3寄存器尋址寄存器尋址是指定的某一寄存器內(nèi)容為操作數(shù)。尋址范圍:當前工作寄存器組中的8個寄存器R0~R7(00-1FH)、特殊功能寄存器A、B和DPTR。其中B僅在乘除法指令中為寄存器尋址,當表示操作數(shù)地址時為直接尋址。A既可以寄存器尋址,又可以直接尋址。除這幾個特殊功能寄存器外,其余的一律用直接尋址。例如:MOVA,R0;A←(R0)

MULAB;BA←(A)×(B)

MOVB,R1;B←(R1)3.2.4寄存器間接尋址指令所指定的某一寄存器的內(nèi)容為操作數(shù)的地址。能夠用于間接尋址的寄存器有R0、R1、DPTR和SP,用時在它們前面加@表示間接尋址。寄存器間接尋址的尋址空間為片內(nèi)和片外的RAM。片內(nèi)RAM的寄存器間接尋址采用寄存器R0和R1;片外RAM的寄存器間接尋址有兩種形式:一是采用R0、R1作間址寄存器,這時R0或R1提供低8位地址,而高8位地址則由P2端口提供;二是采用16位的DPTR作間址寄存器。

例如:MOVA,@R0;A←((R0))若(RO)=60H,(60H)=10H,則指令執(zhí)行完后寄存器A的內(nèi)容為10H。…60H10H60HR0RAM…10HAMOVXA,@R1;A←((P2)(R1))。

MOVX是下一節(jié)將要學(xué)習(xí)的訪問片外RAM指令。由于片外RAM地址空間有64KB,用的是16位地址,又由于Ri是8位寄存器,只能存儲8位地址,故規(guī)定Ri只存放地址的低8位,高8位由P2口負責(zé)提供,為此在使用這條指令前應(yīng)先對P2賦值。MOVXA,@DPTR;A←((DPTR)),即把DPTR中的內(nèi)容為地址的片外RAM中數(shù)據(jù)送累加器A。3.2.5變址尋址變址尋址是以某個寄存器的內(nèi)容為基本地址,然后在這個基本地址基礎(chǔ)上加上地址偏移量才是真正的操作數(shù)地址,即基址寄存器內(nèi)容加變址寄存器內(nèi)容作為有效地址進行間接尋址。以DPTR或PC當前值作為基址寄存器,累加器A作為變址寄存器,二者內(nèi)容之和為操作數(shù)的地址。MCS-51指令系統(tǒng)獨有的。用于訪問程序存儲器(ROM)中的數(shù)據(jù)表格例如:JMP@A+DPTR;無條件轉(zhuǎn)移指令MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC

;A←((A)+(PC)+1)后兩條指令通常用于查表操作。功能完全一樣,使用起來有一些差別。DPTR在使用前可以賦值,查表范圍可達64K范圍。PC的基址值是固定的,而A的內(nèi)容是無符號數(shù),因此只能在當前指令下256個地址單元范圍內(nèi)進行查表。0302H1EHROM……02F1HDPTRA(執(zhí)行前)11HA(執(zhí)行后)1EH3.2.6相對尋址相對尋址僅在轉(zhuǎn)移指令中使用。它是以當前PC值為基地址,加上指令中給出的偏移量,二者之和為程序轉(zhuǎn)移到的目的地址。例如:SJMP08H

目的地址=源地址+轉(zhuǎn)移指令字節(jié)數(shù)+rel若該指令在存儲器中的首地址為2000H,由于該指令為雙字節(jié)指令,所以PC的當前值為PC+02H=2002H,故程序轉(zhuǎn)移到的目的地址為2002H+08H=200AH。注意:(1)“PC當前值”是指轉(zhuǎn)移指令的首地址加上該指令的字節(jié)數(shù),也就是下一條指令在存儲器中的首地址。(2)偏移量是一個8位的有符號補碼數(shù),所表示數(shù)的范圍是-128~127。其中正值表示以PC的當前值為起點向地址增大的方向跳轉(zhuǎn),負值表示以PC的當前值為起點向地址減小的方向跳轉(zhuǎn)。3.2.7位尋址MCS-51單片機有位處理能力。采用位尋址方式指令的操作數(shù)是8位二進制數(shù)中的某1位。例如:MOVC,P1.0;C←(P1.0)。MOVC,3AH;將3AH這一位中的內(nèi)容送累加位C中SETBPSW.4;將PSW中D4位置1。3.3數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是MCS-51指令系統(tǒng)中使用最頻繁的指令,是把源操作數(shù)傳送給目標單元,而源操作數(shù)不變。源就是數(shù)據(jù)來源,目標就是傳送的目的地。3.3.1通用數(shù)據(jù)傳送指令格式:MOV目的操作數(shù),源操作數(shù)功能:把源操作數(shù)指定的字節(jié)內(nèi)容傳送到目的操作數(shù)指定的單元中。目的操作數(shù)可以是:累加器A、通用寄存器Rn、直接地址direct和間接地址;源操作數(shù)可以是:累加器A、通用寄存器Rn、直接地址direct、間接地址和立即數(shù)A累加器@Ri間接尋址#data立即數(shù)Rn寄存器Direct直接尋址8051的數(shù)據(jù)傳遞方式1.以累加器A為目的操作數(shù)的傳送指令共有4條,格式和功能見下表。例如,若(A)=80H,(R0)=10H,(10H)=20H,(R5)=3DH,(78H)=0A2H,則執(zhí)行以下指令后,累加器A的內(nèi)容分別為:MOVA,#78H;(A)=78HMOVA,R5;(A)=3DHMOVA,78H;(A)=0A2HMOVA,@R0;(A)=20H2.以Rn為目的操作數(shù)的傳送指令以寄存器Rn為目的操作數(shù)的傳送指令共3條,見下表。例如,如(A)=65H,(70H)=90H,執(zhí)行以下三條指令后,R3寄存器的內(nèi)容分別為:MOVR3,A;(R3)=65HMOVR3,70H;(R3)=90HMOVR3,#78H;(R3)=78H這里需要注意,在MCS-51指令系統(tǒng)中,源操作數(shù)和目的操作數(shù)不能有以下三種情況:(1)同時用Rn;(2)同時用@Ri;(3)一個操作數(shù)用Rn,同時另一個操作數(shù)用@Ri。3.以直接地址direct為目的操作數(shù)的傳送指令以直接地址direct為目的操作數(shù)的傳送指令共5條,見下表。

例如,若(R0)=30H,(30H)=20H,則指令MOV90H,@R0;(90H)=20HMOVP1,@R0;(P1)=20H這兩條指令實際上是相同的,只不過在第二條指令中,用特殊功能寄存器符號名P1代替了其直接地址90H罷了。4.以寄存器間接地址@Ri為目的操作數(shù)的傳送指令該類指令共3條,助記符及功能見下表所示。5.以DPTR為目的操作數(shù)的傳送指令MOVA,59HMOVR0,AMOVA,#00HMOV@R0,AMOVA,#25HMOV51H,AMOV52H,#70H3.3.2片外RAM(或I/O口)與累加器A傳送數(shù)據(jù)指令為了區(qū)別通用的內(nèi)部數(shù)據(jù)傳送指令,訪問片外RAM的傳送指令助記符記為MOVX。該類指令有4條,指令格式及功能見下表所示。MOVXA,@DPTR功能:將16位寄存器(DPTR)作為地址指針的外部RAM單元內(nèi)容傳送到累加器A中。即(A)←((DPTR))。說明:MOVX是對外部RAM的讀(或?qū)?操作指令,該指令為讀數(shù)據(jù)操作,外部RAM地址為16位的,而其內(nèi)容始終恒為8位?!纠吭嚪治鲋噶畹膱?zhí)行結(jié)果。①MOVDPTR,#9000H;(DPTR)=9000H②MOVXA,@DPTR;(A)=((DPTR))=(9000H)即將外部RAM9000H地址單元的內(nèi)容讀出傳送到累加器A中。MOVXA,@Ri功能:將16位合成地址(P2)(Ri)指示的外部RAM單元內(nèi)容傳送到累加器A中。即(A)←((P2)(Ri))。說明:該指令同樣完成讀數(shù)據(jù)操作,其中16位地址的高8位是隱含在P2寄存器中的,而16位地址的低8位由R0或R1寄存器的內(nèi)容提供?!纠吭嚪治鲋噶畹膱?zhí)行結(jié)果。①MOVP2,#80H;(P2)=80H,作為外部RAM的高8位地址②MOVR0,#20H;(R0)=20H,作為外部RAM的低8位地址③MOVXA,@R0;(A)←((P2)(R0))=(8020H)即將外部RAM8020H地址單元的內(nèi)容讀出傳送到累加器A中。MOVX@DPTR,A功能:將累加器A中的內(nèi)容傳送到以16位寄存器(DPTR)作為地址指針的外部RAM單元中,即((DPTR))←(A)。說明:該指令為寫數(shù)據(jù)操作,外部RAM地址是16位的,而其內(nèi)容恒為8位。【例】試分析指令的執(zhí)行結(jié)果。①MOVDPTR,#9000H;(DPTR)=9000H②MOVA,#10H;(A)=10H③MOVX@DPTR,A;((DPTR))=(9000H))=(A)=10H

即將數(shù)據(jù)10H寫入到外部RAM9000H地址中。MOVX@Ri,A功能:將累加器A中的內(nèi)容傳送到以16位合成地址(P2)(Ri)指示的外部RAM單元中,即((P2)(Ri))←(A)。說明:該指令的16位地址其高8位是隱含在P2寄存器中的,而低8位由R0或R1寄存器的內(nèi)容提供?!纠吭嚪治鲋噶畹膱?zhí)行結(jié)果。①MOVP2,#90H;(P2)=90H②MOVR1,#10H;(R1)=10H③MOVA,#30H;(A)=30H④MOVX@R1,A;((P2)(R1))=(9010H)=((A)=30H

即將數(shù)據(jù)30H寫入到外部RAM9010H地址中。3.3.3程序存儲器向累加器A傳送數(shù)據(jù)指令這兩條指令的功能是:以數(shù)據(jù)指針寄存器DPTR的內(nèi)容或程序計數(shù)器PC的當前值作為基地址,以累加器A的內(nèi)容為偏移量,二者相加形成16位地址,將該16位地址所指出的程序存儲器的單元內(nèi)容送入A中。;MOVA,#00HCLRAMOVDPTR,#1000HMOVCA,@A+DPTRMOV20H,A

MOVA,#30H1000H:MOVCA,@A+PC;(A)=((A)+(PC)+1)=(30H+1001H)

結(jié)果:(A)=(1031H)使用這2條指令時,應(yīng)注意以下幾點:(1)指令執(zhí)行完后不改變基址寄存器的內(nèi)容。(2)由于執(zhí)行的是16位加法,從低8位產(chǎn)生的進位將傳送到高位去。(3)累加器A中的內(nèi)容為無符號整數(shù)。(4)第一條指令是以PC為基址寄存器,當CPU取完指令操作碼時,PC值會自動加1,指向下一條指令的第一字節(jié)地址。又由于累加器A中的內(nèi)容為無符號整數(shù),所以本條指令的查表范圍為PC+1后的256字節(jié)范圍內(nèi)。(5)第二條指令以DPTR為基址寄存器,表格數(shù)據(jù)可以設(shè)置在程序存儲器的任何地址空間中。(6)指令中,A與PC或DPTR的位置不能互換。例如,在程序存儲器中,數(shù)據(jù)表格為:1010H:02H1011H:04H1012H:06H1013H:08H執(zhí)行程序:1000H:MOVA,#0DH1002H:MOVCA,@A+PC1003H:MOVR0,A(冒號前表示存儲單元的地址)執(zhí)行完后,(A)=02H,(R0)=02H,(PC)=1004H3.3.4數(shù)據(jù)交換指令MCS-51的數(shù)據(jù)交換指令有兩大類,分別是字節(jié)數(shù)據(jù)交換指令和半字節(jié)數(shù)據(jù)交換指令。1.字節(jié)數(shù)據(jù)交換指令共3條,指令格式及功能見下表。2.半字節(jié)數(shù)據(jù)交換指令3.累加器A中高4位與低4位交換指令3.3.5堆棧操作指令第一條為入棧指令,操作過程為:先將SP的內(nèi)容加1,然后將直接地址direct單元中的數(shù)據(jù)送入SP所指向的單元中去。第二條為出棧指令,操作過程為:先將堆棧指針SP所指向的棧頂單元中的內(nèi)容彈出,送到直接地址單元direct中,然后SP的內(nèi)容減1,指向新的棧項單元。注意:PUSH指令的執(zhí)行過程中實際隱含著一個數(shù)據(jù)堆棧,且將堆棧作為目的地址。MOVSP,#30HMOVDPTR,#1234HPUSHDPLPUSHDPH解釋操作過程:第①條SP是符號,代表片內(nèi)SFR地址81H,即SP=81H,(SP)=30H后,其意義是將片內(nèi)RAM地址由30H~7FH區(qū)域設(shè)為堆??臻g。第②條(DPTR)=1234H,即(DPH)=12H,(DPL)=34H。第③條(SP1)←(SP0)+1=30H+1=31H。(SP1)=(31H)←(DPL)=34H。第④條(SP2)←(SP1)+1=31H+1=32H。(SP2)=(32H)←(DPH)=12H。執(zhí)行結(jié)果:(31H)=34H,(32H)=12H,(SP)=32H。試分析指令的執(zhí)行結(jié)果。①MOVSP,#32H②MOV31H,#23H③MOV32H,#01H④POPDPH⑤POPDPL解釋操作過程:第①條(SP)=32H。第②條片內(nèi)RAM地址31H的內(nèi)容為23H,即(31H)=23H。第③條(32H)=01H。第④條(DPH)←((SP0))=(32H)=01H;然后(SP1)←(SP0)-1=32H-1=31H。第⑤條(DPL)←((SP1))=(31H)=23H;然后(SP2)←(SP1)-1=31H-1=30H。執(zhí)行結(jié)果:(DPTR)=(DPH)(DPL)=0123H,(SP)=30H。3.4算術(shù)運算類指令在MCS-51的指令系統(tǒng)中,算術(shù)運算類指令主要完成加、減、乘、除四則運算,加1、減1和二/十進制調(diào)整操作,這些運算操作大多與累加器A有關(guān),且運算結(jié)果將影響程序狀態(tài)字PSW中的進(或借)位標志CY、輔助進(或借)位標志AC、溢出標志OV和奇偶標志位P。3.4.1加減運算指令加減運算指令包括加法指令(ADD)、帶進位的加法指令(ADDC)和帶借位的減法指令(SUBB)3種。1.加法指令

ADDA,源功能:加法,(A)=(A)+[源]這4條指令對PSW中的CY、AC、OV和P的影響如下:(1)進位標志CY:相加過程中若和的位7有進位,CY=1;否則,CY=0。(2)輔助進位標志AC:相加過程中若和的位3向位4有進位,AC=1;否則,AC=0。(3)溢出標志OV:相加過程中若和的位7和位6同時有進位或同時無進位,OV=0;否則,OV=1。也可以理解為:溢出標志位OV的值是由運算時和的位7、位6兩位進位狀態(tài)經(jīng)過邏輯異或得到的。(4)奇偶標志位P:當A中1的個數(shù)為奇數(shù)時,P=1,為偶數(shù)時,P=0。2.帶進位的加法指令

ADDCA,源功能:帶進位加法。(A)=(A)+[源]+(C)。注意:CY的值是指在該指令執(zhí)行之前已存入的進位標志值,而非指令執(zhí)行過程中產(chǎn)生的進位標志值。例如,設(shè)有兩個16位數(shù)相加,被加數(shù)的高8位放在41H單元,低8位放在40H單元,加數(shù)的高8位放在43H單元,低8位放在42H單元,和的低8位存放在50H單元,高8位存放在51H單元,進位標志位存放在52H單元??删幊绦蛉缦拢篗OVA,40H;被加數(shù)低8位送AADDA,42H;與加數(shù)低8位相加MOV50H,A;和的低8位存入50HMOVA,41H;被加數(shù)高8位送AADDCA,43H;被加數(shù)高8位與加數(shù)高8位以及低位來的進;位相加MOV51H,A;和的高8位存入51H單元MOVA,#00H;A中內(nèi)容清零ADDCA,#00H;(A)+00H+高8位來的進位求和,結(jié)果送AMOV52H,A;進位標志位CY內(nèi)容存入52H單元273.帶借位的減法指令SUBBA,源功能:帶進位減法,(A)=(A)-[源]-(C)。兩條指令組合來實現(xiàn)純減法功能:

CLRCSUBBA,源MOVA,#0C9H;(A)=C9HMOVR2,#54H;(R2)=54HMOVPSW,#80H;其中標志(C)=1SUBBA,R2;(A)=(A)-(R2)-(C)=C9H-54H-1=74H;且標志(C)=0、(AC)=0、(OV)=13.4.2乘除運算指令1.乘法指令該指令的功能是把累加器A與寄存器B中的8位無符號整數(shù)相乘,所得到的16位乘積的高8位存放在寄存器B中,低8位存放在累加器A中。如果二者的乘積大于255(0FFH),則OV置1,否則OV清0;運算結(jié)果總使進位標志位CY清0。【例】試分析指令的執(zhí)行結(jié)果。①MOVA,#50H;(A)=50H=80②MOVB,#0A0H;(B)=A0H=160③MULAB;(A)×(B)=3200H=12800結(jié)果:(B)=32H,(A)=00H標志:(C)=0,(OV)=12.除法指令該指令是將累加器A中的8位無符號整數(shù)除以寄存器B中的8位無符號整數(shù),所得商存放在累加器A中,余數(shù)存放在寄存器B中。進位標志CY和溢出標志OV均清0。若寄存器B中除數(shù)為0,則執(zhí)行除法指令后,結(jié)果為不定值,并使溢出標志位OV置1,但在仟何情況下,進位標志CY總是被清0的。例如,設(shè)(A)=9AH,(B)=23H,執(zhí)行指令:

DIVAB

則(A)=04H,(B)=0EH,0V=0,CY=0

3.4.3加1減1指令1.加1指令與加法指令不同,加1指令不影響各種標志。唯一的例外是INCA指令可以影響齊偶標志P。如:MOVA,0FFHINCA;(A)=0FFH+1=00H

加1后將溢出,結(jié)果為00H,但不影響進位標志?!纠吭嚪治鰣?zhí)行結(jié)果。①MOVR0,#7EH;(R0)=7EH②MOV7EH,#FFH;(7EH)=FFH③MOV7FH,#48H;(7FH)=48H④INC@R0

;((R0))=(7EH)=((R0))+1=(7EH)+1=FFH+01H

=00H⑤INCR0;(R0)=(R0)+1=7EH+01H=7FH⑥INC@R0

;((R0))=(7FH)=((R0))+1=(7FH)+1=48H+01H

=49H2.減1指令說明:若原字節(jié)為00H,減1后將變?yōu)?FFH,不影響標志(除DECPSW指令外)。【例】試分析指令的執(zhí)行結(jié)果。①MOVR0,#7FH;(R0)=7FH②MOV7EH,#00H;(7EH)=00H③MOV7FH,#40H;(7FH)=40H④DEC@R0;((R0))=(7FH)=(7FH)-1=3FH⑤DECR0;(R0)=(R0)-1=7FH-01H=7EH⑥D(zhuǎn)EC@R0;((R0))=(7EH)=(7EH)-1=FFH3.4.4二/十進制調(diào)整指令這條指令是在進行BCD碼加法運算時,用來對BCD碼的加法運算結(jié)果自動進行修正,使之成為一個正確的兩位BCD數(shù),以完成十進制加法功能(進行十進制加法操作時,要把十進制數(shù)轉(zhuǎn)換成BCD碼來進行)。BCD碼就是用二進制代碼表示的十進制數(shù)。

在數(shù)字系統(tǒng)中,各種數(shù)據(jù)要轉(zhuǎn)換為二進制代碼才能進行處理,而人們習(xí)慣于使用十進制數(shù),所以在數(shù)字系統(tǒng)的輸入輸出中仍采用十進制數(shù),這樣就產(chǎn)生了用四位二進制數(shù)表示一位十進制數(shù)的方法,這種用于表示十進制數(shù)的二進制代碼稱為二-十進制代碼(BinaryCodedDecimal),簡稱為BCD碼。它具有二進制數(shù)的形式以滿足數(shù)字系統(tǒng)的要求,又具有十進制的特點(只有十種有效狀態(tài))。調(diào)整的方法:若累加器低4位大于9或者輔助進位標志AC=1,則低四位作加六調(diào)整,即AA+06H;若累加器A的高四位大于9或者Cy=1(包括由于低四位調(diào)整后導(dǎo)致上述結(jié)果),則高四位亦作加6調(diào)整,即AA+60H。例如:若作加法后A=9BH,Cy=0,AC=0,則執(zhí)行DAA指令后,結(jié)果為A=01H,Cy=1,相當于十進制數(shù)101。100110110000011010100001011000001000000013.5邏輯運算與移位類指令3.5.1邏輯運算指令(1)邏輯與指令運算規(guī)則:見0則0例如:(A)=37H,(R0)=0A9H

執(zhí)行指令:ANL

A,R0結(jié)果:(A)=21HANLA,Rn;A(A)(Rn)ANLA,direct;A(A)(direct)ANLA,@Ri;A(A)((Ri))ANLA,#data;A(A)dataANLdirect,A;(direct)(direct)(A)ANLdirect,#data;(direct)(direct)

data001101111010100100100001(2)邏輯或指令運算規(guī)則:見1則1例如:(A)=37H執(zhí)行指令:ORL

A,#09H結(jié)果:(A)=3FH

ORLA,Rn;A(A)(Rn)ORLA,direct;A(A)(direct)ORLA,@Ri;A(A)((Ri))ORLA,#data;A(A)dataORLdirect,A;(direct)(direct)(A)ORLdirect,#data;(direct)(direct)

data001101110000100100111111(3)邏輯異或指令運算規(guī)則:同為0,異為1

XRLA,Rn;A(A)(Rn)XRLA,direct;A(A)(direct)XRLA,@Ri;A(A)((Ri))XRLA,#data;A(A)dataXRLdirect,A;direct(direct)(A)XRLdirect,#data

;direct(direct)data例如:(A)=37H執(zhí)行指令:XRL

A,#09H結(jié)果:(A)=3EH001101110000100100111110(4)清零和取反指令邏輯運算還完成一些特殊的操作。例如:(1)清0操作

MOV30H,#00H也可以MOVA,30HXRL30H,A又可以ANL30H,#00H(2)屏蔽操作將某一存儲單元若干位清0,其他位保持不變,稱為屏蔽。被屏蔽的位,原來的數(shù)值將被消除,而被0所取代。例如,將P1口的低4位保持不變,屏蔽高4位,然后存入31H單元。

MOVA,P1ANLA,#0FHMOV31H,A(3)求反操作任何數(shù)與1相異或,結(jié)果1將變?yōu)?,0將變?yōu)?,利用這個特性可以對某一存儲單元的內(nèi)容求反。例如,將P1口的高4位求反,低4位保持不變,結(jié)果存入31H單元。

MOVA,P1XRLA,#OFOHMOV31H,A3.5.2循環(huán)移位指令3.6控制轉(zhuǎn)移類指令該類指令用于控制程序的走向,因此其作用空間只能是程序存儲器空間。這類指令包括無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、子程序調(diào)用、返回指令以及空操作指令。3.6.1無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令控制程序計數(shù)器PC從現(xiàn)行值轉(zhuǎn)移到目的地址。根據(jù)轉(zhuǎn)移的距離和尋址方式的不同,又分為AJMP(絕對轉(zhuǎn)移),LJMP(長轉(zhuǎn)移),SJMP(短轉(zhuǎn)移)和JMP(間接轉(zhuǎn)移)4種。1.絕對轉(zhuǎn)移指令【指令】AJMPaddr11(absolute)功能:在2KB存儲區(qū)域內(nèi)的轉(zhuǎn)移說明:(1)轉(zhuǎn)移目的地址的形成:先(PC)(PC)+2;然后PC15~11不變,PC10~0addr10~0(2)轉(zhuǎn)移范圍:2KB。(3)指令碼的形成:(注:a10~a0均為轉(zhuǎn)移目的地址的低11位)a10a9a800001a7~a0【例】試分析下列轉(zhuǎn)移指令是否正確,對正確指令譯碼。①37FEHAJMP3BCDH;(PC0)=37FEH,(PC1)=(PC0)+2=3800H;與轉(zhuǎn)移地址3BCDH的高5位均為00111,;在同一個2KB內(nèi),轉(zhuǎn)移正確,其指令編碼為61CD②37FEHAJMP3700H;(PC1)=(PC0)+2=37FEH+2=3800H;高5位為00111,而轉(zhuǎn)移目的地址3700H的高5位為

;00110,兩者不在同一個2KB存存儲區(qū)內(nèi)。其指令不正確。2.長轉(zhuǎn)移指令(長跳轉(zhuǎn)指令)該指令能提供16位目的地址,因此,執(zhí)行這條指令可以使程序從當前地址轉(zhuǎn)移到64K程序存儲器地址空間的任何單元,即0000H—FFFFH,所以稱長轉(zhuǎn)移指令。指令的執(zhí)行結(jié)果是將16位目的地址送入程序計數(shù)器PC。3短轉(zhuǎn)移指令(相對轉(zhuǎn)移)【指令】SJMPrel功能:短轉(zhuǎn)移指令。說明:在實際使用SJMP

指令時,大多數(shù)情況不采用SJMPrel

形式,而是采用SJMP××××H形式或SJMP<標號>

的形式。其轉(zhuǎn)移目的地址為:

(PC1)=(PC0)+2(注:SJMP為兩字節(jié)指令)

(PC2)=(PC1)+relSJMP

的轉(zhuǎn)移地址范圍在(PC1)地址值的-128~+127之間,其中偏移量rel=目的地址-(PC1),且rel

為8位補碼表示的數(shù)。【例】試分析該轉(zhuǎn)移指令的功能。LP:SJMPLP;結(jié)果是程序在該條指令處原地址無限循環(huán)(原地踏步)另外該功能指令也可寫成SJMP$的形式。4.間接轉(zhuǎn)移指令

JMP@A+DPTR

轉(zhuǎn)移到的目的地址(PC)=(A)+(DPTR)本指令不影響標志位,不改變

@A及DPTR中的內(nèi)容。常用于多分支程序結(jié)構(gòu)中,可在程序運行過程中動態(tài)地決定程序分支走向。

例:

MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3………當(A)=00H時,程序轉(zhuǎn)移到ROUT0處執(zhí)行,當(A)=02H時,程序轉(zhuǎn)移到ROUT1處執(zhí)行,以此類推。3.6.2條件轉(zhuǎn)移指令

條件轉(zhuǎn)移指令用于實現(xiàn)按照一定的條件決定程序轉(zhuǎn)移(分支)的方向。1.累加器判0轉(zhuǎn)移指令

【指令】JZrel

功能:JZ指令為判零轉(zhuǎn)移。說明:(1)若累加器(A)=00H,轉(zhuǎn)移。

(2)若累加器(A)≠00H,程序順序執(zhí)行下一條指令。具體操作為:(PC1)←(PC0)+2(注:JZ為兩字節(jié)指令)例1、將外部RAM的一個數(shù)據(jù)塊(首地址為DATA1)傳送到內(nèi)部數(shù)據(jù)RAM(首地址為DATA2),遇到傳送的數(shù)據(jù)為零時停止傳送,試編程。

MOVR0,#DATA2

;設(shè)置內(nèi)部RAM數(shù)據(jù)指針

MOVDPTR,#DATA1

;設(shè)置外部RAM數(shù)據(jù)指針

LOOP1:MOVXA,@DPTR

;讀外部RAM數(shù)據(jù)

JZLOOP2

;判斷傳送數(shù)據(jù)是否為00H,是則轉(zhuǎn)移

MOV@R0,A

;數(shù)據(jù)不為00H,送內(nèi)部RAM

INCR0

;修改內(nèi)部RAM地址指針

INCDPTR

;修改外部RAM地址指針

SJMPLOOP1;繼續(xù)傳送

LOOP2:SJMPLOOP2

;結(jié)束傳送2.比較不相等轉(zhuǎn)移指令

CJNE目的,源,rel功能:比較兩個字節(jié)變量的值,如不相等,則轉(zhuǎn)移。說明:CJNE指令具有比較和判斷轉(zhuǎn)移兩種功能,CJNE指令只影響進(借)位標志C。具體操作如下:

(PC1)←(PC0)+3(注:CJNE為3字節(jié)指令)①若[目的]=[源],則程序順序執(zhí)行,且(C)=0,②若[目的]≠[源],則程序轉(zhuǎn)移到目的地址,目的地址(PC2)←(PC1)+rel。同時[目的]>[源]時,(c)=0;[目的]<[源]時,(c)=1。

該類指令可產(chǎn)生三分支程序:

即,相等分支;大于分支;小于分支。

A=B嗎?

出口YN

A>B嗎?

入口YN123(CY)=0(CY)=0(CY)=1例如,設(shè)內(nèi)部RAM的30H和31H單元之中各存放有一個8位的無符號數(shù),請找出其中較大者送入40H單元。編程如下:

MOVA,30H;A(30H)

CJNEA,31H,K1;(30H)(31H)時轉(zhuǎn)移

MOV40H,A;保存

SJMP$K1:JCK2;(CY)=1,即(30H)<(31H)時轉(zhuǎn)移

MOV40H,A;保存較大者到40H中K2:MOV40H,31HSJMP$3.減1不0轉(zhuǎn)移指令【指令】DJNZ目的,rel

功能:減1不為0循環(huán)轉(zhuǎn)移。說明:DJNZ指令的主要作用是進行程序的循環(huán)控制。具體操作如下:

(PC1)←(PC0)+2或3(注:DJNZ指令有2字節(jié)和3字節(jié)兩種形式)①若[目的]←[目的]-1=

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論