版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第三章MCS-51系列單片機指令系統(tǒng)指令系統(tǒng):一臺計算機所能執(zhí)行的全部指令的集合。指令的二進制形式稱為指令的機器碼,它用二進制編碼表示每條指令,是計算機能直接識別和執(zhí)行的一種語言。這種由機器碼編制的程序稱為目標程序。每一條指令包含兩個基本部分:操作碼和操作數(shù)。操作碼表明指令要執(zhí)行的操作性質(zhì);操作數(shù)說明參與操作的數(shù)據(jù)或數(shù)據(jù)所存放的地址。
3.1MCS-51指令概述
3.1.1指令的基本形式
根據(jù)其指令編碼長短的不同分為:單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令三種類型。1.單字節(jié)指令(49條)一條完整的指令由8位二進制編碼表示,有兩種形式:(1)8位二進制編碼全表示操作碼。例如:INCDPTR,其機器碼為:
10100011A3H(2)8位二進制編碼中包含操作碼和寄存器編碼,例如:MOVA,Rn;A←(Rn)其中,n=(0,1,2,3,4,5,6,7),其機器碼為:
11101rrrE8H~EFH機器碼中11101B部分為操作碼,rrr三位二進制編碼(000B~111B)對應(yīng)于工作寄存器(R0~R7)。
2.雙字節(jié)指令(45條)雙字節(jié)指令含有兩個字節(jié),分別存放在兩個程序存儲單元中,操作碼字節(jié)在前,操作數(shù)字節(jié)在后。操作數(shù)字節(jié)可以是立即數(shù),也可以是操作數(shù)所在的地址。例如:
MOVA,#data;A←8位立即數(shù)data假設(shè)立即數(shù)data=95H,則其機器碼為:第一字節(jié)01110100操作碼第二字節(jié)10010101操作數(shù)(立即數(shù)95H)3.雙字節(jié)指令(17條)這類指令的指令碼中第一字節(jié)為操作碼,第二和第三字節(jié)為操作數(shù)。例如:
MOVdirect,#data;direct←8位立即數(shù)data假設(shè)direct=30H,data=12H,即MOV30H,#12H,其機器碼為:第一字節(jié)01110101操作碼第二字節(jié)00110000第一操作數(shù)(目的地址30H)第三字節(jié)00010010第二操作數(shù)(立即數(shù)12H)
3.1.2匯編語言指令格式[標號:]操作碼[操作數(shù)][;注釋]START:
MOV
A,#0F0H
;A←8位立即數(shù)F0H標號區(qū)段操作碼區(qū)段操作數(shù)區(qū)段注釋區(qū)段
標號區(qū)段:是由用戶定義的符號組成,必須用英文字母開始,不能取系統(tǒng)默認的變量名(如:MOV、DPTR、DATA、PSW、P0等)。標號區(qū)段可有可無。標號代表該指令機器碼第一個字節(jié)存放的存儲器單元的地址,故標號又稱為符號地址,在匯編時,把該地址賦值給標號。操作碼區(qū)段:是指令的功能部分,不能缺省。操作數(shù)區(qū)段:是指令要操作的數(shù)據(jù)信息。不同的指令操作數(shù)可以有3個、2個、1個或沒有操作數(shù)。為區(qū)別于在操作數(shù)區(qū)段出現(xiàn)字符,以字母開始的十六進制數(shù)前要加0。注釋區(qū)段:加入注釋的目的是為了便于閱讀,可有可無。程序設(shè)計者對指令或程序段做簡要的功能說明,在閱讀程序,尤其是在調(diào)試程序時將會帶來很大方便。
3.1.3指令系統(tǒng)中所用符號的說明Rn:現(xiàn)行選定的寄存器區(qū)中8個寄存器R0~R7(n=0~7)。Direct:8位內(nèi)部數(shù)據(jù)存儲單元地址。它可以是一個內(nèi)部數(shù)據(jù)RAM單元(00H~7FH)或一個專用寄存器SFR的地址(80H~FFH),如I/O端口、控制寄存器、狀態(tài)寄存器的地址。@Ri:通過寄存器R1或R0間接尋址的8位內(nèi)部數(shù)據(jù)RAM單元(00H~FFH),i=0,l。#data:8位立即數(shù),即包含在指令中的8位常數(shù)。#data16:16位立即數(shù),即包含在指令中的16位常數(shù)。addr16:16位目標地址,用于LCALL和LJMP指令??芍赶?4KB程序存儲器地址空間。addr11:11位目標地址,用于ACALL和AJMP指令中。目的地址必須存放在與下一條指令的第一個字節(jié)處于同一個2KB程序存儲器地址空間之內(nèi)(即同一個頁面內(nèi))。rel:帶符號(2的補碼)的8位偏移量。用于SJMP和所有條件轉(zhuǎn)移指令中。以下一條指令的第一個字節(jié)地址為基址,地址偏移量在-128~+127范圍內(nèi)。bit:內(nèi)部數(shù)據(jù)RAM或?qū)S霉δ芗拇嫫骼锏闹苯訉ぶ肺?。DPTR:數(shù)據(jù)指針,可用作16位地址寄存器。A:累加器ACC。B:專用寄存器,用于乘(MUL)和除(DIV)指令中。C:進位標志或進位位。在布爾處理器中作為位累加器。/bit:位操作指令中,表示對該位先取反再參與操作,但不影響該位原值。(X):某寄存器或存儲單元中的內(nèi)容。((X)):在間接尋址方式中,表示由間接尋址寄存器X指出的地址單元中的內(nèi)容。
3.2尋址方式尋址方式:就是指令中規(guī)定的尋找或獲得操作數(shù)的方式。MCS—51指令系統(tǒng)使用了以下7種尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、基址寄存器加變址寄存器間接尋址、相對尋址和位尋址。
1.立即尋址立即尋址方式是操作數(shù)包含在指令字節(jié)中,指令操作碼后面字節(jié)的內(nèi)容就是操作數(shù)本身,其數(shù)值由程序員在編制程序時指定,以指令字節(jié)的形式存放在程序存儲器中。例如:機器碼助記符注釋7412MOVA,#12H;A←立即數(shù)12H在MCS-51指令系統(tǒng)中還有惟一一條立即數(shù)為雙字節(jié)的指令:機器碼助記符注釋901234MOVDPTR,#1234H;DPH←12H,DPL←34H這條指令存放在程序存儲器中占三個存儲單元。2.直接尋址
在指令中含有操作數(shù)的直接地址,該地址指出了參與操作的數(shù)據(jù)所在的字節(jié)地址或位地址。直接尋址方式中操作數(shù)存儲的空間有三種:(1)內(nèi)部數(shù)據(jù)存儲器(RAM)的低128個字節(jié)單元(00H~7FH)例如:MOVB,60H;A←(60H)指令功能是把內(nèi)部RAM60H單元中的內(nèi)容送入B寄存器。(2)位地址空間例如:MOVC,00H;CY←直接位00H內(nèi)容(3)專用功能寄存器專用功能寄存器只能用直接尋址方式進行訪問,例如:MOVIE,#81H;中斷允許寄存器IE←立即數(shù)81HIE為專用功能寄存器,其字節(jié)地址為0A8H。3.寄存器尋址由指令指出某一個寄存器中的內(nèi)容作為操作數(shù),這種尋址方式稱為寄存器尋址。在這種尋址方式中,指令的操作碼中包含了參加操作的寄存器的編號(指令操作碼字節(jié)的低3位指明所尋址的寄存器)。MCS-51指令系統(tǒng)中寄存器尋址的工作寄存器是R0~R7。例如:INCR0;R0←(R0)+1指令功能是對寄存器R0進行操作,使其內(nèi)容加1。4.寄存器間接尋址由指令指出某一個寄存器的內(nèi)容作為操作數(shù)的地址,這種尋址方式稱為寄存器間接尋址。這里要注意,在寄存器間接尋址方式中,存放在寄存器中的內(nèi)容不是操作數(shù),而是操作數(shù)所在的存儲器單元地址。寄存器間接尋址只能使用寄存器R0或R1作為地址指針來尋址內(nèi)部RAM(00H~FFH)中的數(shù)據(jù)。寄存器間接尋址也適用于訪問外部RAM,可使用R0、R1或DPTR作為地址指針。寄存器間接尋址用符號“@”表示。例如:MOVA,@R1;A←((R1))指令功能是把R1所指出的內(nèi)部RAM單元中的內(nèi)容送累加器A。若R1內(nèi)容為30H,而內(nèi)部RAM30H單元中的內(nèi)容是12H,則指令MOVA,@R1的功能是將12H這個數(shù)送到累加器A。5.基址寄存器加變址寄存器間接尋址基址寄存器加變址寄存器的間接尋址稱之為變址尋址。變址尋址中的基址寄存器是數(shù)據(jù)指針DPTR或者程序計數(shù)器PC,在DPTR或PC中應(yīng)預(yù)先存放操作數(shù)的基地址;累加器A中存放操作數(shù)地址對基地址的偏移量(該地址偏移量是00H~FFH范圍內(nèi)的一個無符號數(shù))。單片機把基地址和地址偏移量相加,形成在程序存儲器ROM中的操作數(shù)地址,訪問程序存儲器中的數(shù)據(jù)表格,查表指令有兩條:
MOVCA,@A+DPTR;A←A+DPTR所指的程序存儲器單元的內(nèi)容
MOVCA,@A+PC;A←A+PC所指的程序存儲器單元的內(nèi)容A中為無符號數(shù),指令功能是A的內(nèi)容和DPTR或PC的內(nèi)容相加得到程序存儲器的有效地址,把該存儲器單元中的內(nèi)容送到A。
6.相對尋址這類尋址方式是以PC的內(nèi)容作為基地址,加上指令中給定的偏移量所得結(jié)果作為轉(zhuǎn)移地址,它只適用于雙字節(jié)轉(zhuǎn)移指令。偏移量是帶符號數(shù),在-128~+127范圍內(nèi),用2的補碼表示。例如:JCrel;C=1,則跳轉(zhuǎn)第一字節(jié)為操作碼,第二字節(jié)就是相對于程序計數(shù)器PC當前地址的偏移量rel。若轉(zhuǎn)移指令操作碼存放在1000H單元,偏移量存放在1001H單元,該指令執(zhí)行后PC已為1002H。設(shè)偏移量rel為05H,則轉(zhuǎn)移地址為1007H。當C=1時,將轉(zhuǎn)去執(zhí)行1007H單元中的指令。7.位尋址
位尋址是指對片內(nèi)RAM的位尋址區(qū)(地址為20H~2FH,相應(yīng)位地址為00H~7FH共16個單元128位)和可以位尋址的特殊功能寄存器SFR(共有11個SFR,實有尋址位83位)進行位操作時的尋址方法。為使程序設(shè)計方便可讀,MCS-51提供了4種位地址的表示方法:(1)直接使用位尋址區(qū)中的位地址。例如:MOVC,00H;CY←20H單元的D0位(2)采用字節(jié)地址加數(shù)位表示方法。上述位地址00H可以表示為20H.0,相應(yīng)指令為:MOVC,20H.0;CY←20H.0(3)可以位尋址的SFR可以采用寄存器名加上數(shù)位的方法。例如,累加器A中最低位可以表示為ACC.0,把ACC.0位狀態(tài)送到進位標志位CY的指令是:MOVC,ACC.0;CY←ACC.0(4)可以位尋址的SFR中一些尋址位是有名稱的。例如,PSW寄存器第0位為F0標志位,則可直接使用F0表示該位。表3-1操作數(shù)尋址方式和有關(guān)空間
尋址方式有關(guān)空間立即尋址程序存儲器ROM直接尋址片內(nèi)RAM低128字節(jié),特殊功能寄存器SFR寄存器尋址工作寄存器R0~R7(共4組)寄存器間接尋址片內(nèi)RAM(@R0,@R1,SP);片外RAM(@R0,@R1,@DPTR)變址尋址程序存儲器(@A+DPTR,@A+PC)相對尋址程序存儲器256字節(jié)(PC+偏移量)位尋址片內(nèi)RAM的20H~2FH位尋址區(qū),11個可以位尋址的SFR3.3指令系統(tǒng)單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。按指令的功能有:數(shù)據(jù)傳送類·算術(shù)運算類·邏輯操作類·控制轉(zhuǎn)移類·位操作類
數(shù)據(jù)傳送類指令用到的助記符有:MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP。1.片內(nèi)數(shù)據(jù)傳送指令
片內(nèi)數(shù)據(jù)傳送指令的源操作數(shù)和目的操作數(shù)地址都在單片機內(nèi)部,它可以是片內(nèi)RAM的地址,也可以是專用功能寄存器SFR的符號。(1)以累加器A為目的操作數(shù)的指令有以下形式:
MOVA,Rn;A←(Rn)源操作數(shù)為寄存器尋址
MOVA,@Ri;A←((Ri))源操作數(shù)為寄存器間接尋址
MOVA,direct;A←(direct)源操作數(shù)為直接尋址
MOVA,#data;A←data源操作數(shù)為立即尋址該組指令的功能是把源操作數(shù)傳送給累加器A。例3-1將R0指示的內(nèi)存單元20H的內(nèi)容傳送至A。MOVR0,#20HMOVA,@R03.3.1數(shù)據(jù)傳送類指令(2)以工作寄存器Rn為目的操作數(shù)的指令有以下形式:
MOVRn,A;Rn←(A)源操作數(shù)為ACC
MOVRn,direct;Rn←(direct)源操作數(shù)為直接尋址
MOVRn,#data;Rn←data源操作數(shù)為立即尋址例3-2將A的內(nèi)容傳送至R1;30H單元的內(nèi)容傳送至R3;立即數(shù)80H傳送至R7。用如下指令完成。MOVR1,A;R1←(A)MOVR3,30H;R3←(30H)MOVR7,#80H;R7←80H(3)以直接地址為目的操作數(shù)的指令有以下形式:
MOVdirect,A;direct←(A)
MOVdirect,Rn;direct←(Rn)
MOVdirect1,direct2;direct1←(direct2)MOVdirect,@Ri;direct←((Ri))
MOVdirect,#data;direct←data例3-3將A的內(nèi)容傳送至30H單元;R7的內(nèi)容傳送至20H單元;立即數(shù)0FH傳送至27H單元;40H單元內(nèi)容傳送至50H單元。用以下指令完成。MOV30H,A;30H←(A)MOV20H,R7;20H←(R7)MOV27H,#0FH;27H←0FHMOV50H,40H;50H←(40H)(4)以間接地址為目的操作數(shù)的指令:
MOV@Ri,A;(Ri)←(A)
MOV@Ri,direct;(Ri)←(direct)
MOV@Ri,#data;(Ri)←data該組指令的功能:把源操作數(shù)所指定的內(nèi)容傳送至以R0或R1為地址指針的片內(nèi)RAM單元中。例3-4將40H單元內(nèi)容傳送至R1指示的片內(nèi)RAM單元30H中。MOVR1,#30HMOV@R1,40H(5)16位數(shù)據(jù)傳送指令有以下惟一形式:
MOVDPTR,#data16;DPTR←data16例3-5將16位立即數(shù)1234H送入數(shù)據(jù)指針DPTR。MOVDPTR,#1234H;DPH←12H,DPL←34H2.片外RAM的數(shù)據(jù)傳送指令對片外RAM單元只能使用寄存器間接尋址的方法實現(xiàn)與累加器A之間的數(shù)據(jù)傳送。片外RAM數(shù)據(jù)傳送指令有如下4條:
MOVXA,@DPTR;A←((DPTR))
MOVX@DPTR,A;(DPTR)←(A)
MOVXA,@Ri;(A)←((P2)(Ri))
MOVX@Ri,A;(P2)(Ri)←(A)(1)上述4條指令采用了不同的間址寄存器。前兩條采用DPTR作間址寄存器,DPTR為16位地址指針,所以這兩條指令可以尋址外部RAM的整個64KB空間。DPTR所包含的16位地址信息由P0口傳送低8位地址信息,P2口傳送高8位地址信息,該地址所尋址的片外RAM單元的數(shù)據(jù)經(jīng)過P0口輸入到累加器A。后兩條采用R0、R1作8位地址指針,經(jīng)P0口輸出低8位地址,P2口先用片內(nèi)數(shù)據(jù)傳送指令確定訪問地址高8位,合成16位片外操作地址。(2)片外RAM數(shù)據(jù)傳送指令的助記符采用MOVX,與片內(nèi)RAM數(shù)據(jù)傳送指令MOV不一樣。MCS-51對片內(nèi)RAM和片外RAM獨立編址,因而采用不同的指令訪問。(3)片外RAM單元只能與累加器A之間進行數(shù)據(jù)傳送,當片外RAM數(shù)據(jù)讀入累加器時,P3.7引腳上輸出RD讀選通信號。當累加器A數(shù)據(jù)傳送至片外RAM時,P3.6引腳輸出WR寫選通信號。(4)MCS-51系統(tǒng)中沒有設(shè)置訪問外設(shè)的I/O指令,且片外擴展的I/O端口與片外RAM是統(tǒng)一編址的,因此對片外I/O端口的訪問也使用此4條指令。例3-6把片外RAM2400H單元中的數(shù)取出,傳送到3840H單元中去。方法一:MOVDPTR,#2400H;DPTR←2400HMOVXA,@DPTR;A←(2400H)MOVDPTR,#3840H;DPTR←3840HMOVX@DPTR,A;3840H←(A)方法二:MOVP2,#24H;P2←24HMOVR0,#00H;R0←00HMOVXA,@R0;A←(2400)MOVP2,#38H;P2←38HMOVR0,#40H;R0←40HMOVX@R0,A;3840H←(A)3.程序存儲器ROM取數(shù)據(jù)指令(查表指令)這組指令只有兩條,完成從程序存儲器ROM中讀入數(shù)據(jù),傳送至累加器A。這兩條指令常用于查表操作,故又稱之為查表指令。
MOVCA,@A+DPTR;A←((A)+(DPTR))
MOVCA,@A+PC;A←((A)+(PC))(1)這兩條指令都是單字節(jié)指令,采用了基址寄存器加變址寄存器間接尋址方式。(2)對于第一條指令,由于采用16位DPTR作基址寄存器,DPTR可任意賦值。因此這條指令的尋址范圍是整個ROM的64KB空間。對于第二條指令,采用程序計數(shù)器PC作為基址寄存器,因此只能讀出以當前MOVC指令為起始的256個地址單元之內(nèi)的某一單元。(3)查表時,對于MOVCA,@A+DPTR指令,首先要將查表的第n項數(shù)據(jù)作為偏移量送累加器A,然后將表首地址送DPTR,最后執(zhí)行該指令即可。對于MOVCA,@A+PC指令,首先將表中的n項作為變址值送累加器A,然后將查表指令的下一條指令地址與表首地址之差和A中的內(nèi)容相加作為偏移量,最后執(zhí)行該指令。例3-7在ROM中數(shù)據(jù)表格首地址為8000H,數(shù)據(jù)表格為:8010H:02H8011H:04H8012H:06H8013H:08H執(zhí)行程序:2004H:MOVA,#10H;A←10H2006H:MOVDPTR,#8000H;DPTR←8000H2009H:MOVCA,@A+DPTR;A←(8000H+10H)=(8010H)執(zhí)行結(jié)果:A=02H。4.數(shù)據(jù)交換指令數(shù)據(jù)交換指令共有5條,完成累加器A和內(nèi)部RAM單元之間的字節(jié)或半字節(jié)交換。
XCHA,Rn;(A)?(Rn)
XCHA,@Ri;(A)?((Ri))
XCHA,direct;(A)?(direct)
XCHDA,@Ri;(A)3-0?((Ri))3-0
SWAPA;(A)3-0?(A)7-4(1)這組指令的前3條為全字節(jié)交換指令,其功能是將A的內(nèi)容與源操作數(shù)所指出的單元中的數(shù)據(jù)互相交換。(2)第4條指令是半字節(jié)交換指令,將A內(nèi)容的低4位與Ri所指示的片內(nèi)RAM單元中內(nèi)容的低4位數(shù)據(jù)互相交換,各自的高4位不變。(3)SWAPA指令是將A中內(nèi)容的高、低4位數(shù)據(jù)互相交換。例3-8將30H單元的內(nèi)容與A中的內(nèi)容互換,然后將A的高4位存入Ri所指出的RAM單元中的低4位,A的低4位存入該單元中的高4位。XCHA,30H;(A)?(30H)SWAPA;(A)7-4?(A)3-0MOV@Ri,A;(Ri)←(A)5.堆棧操作指令堆棧操作指令共兩條,分別是壓棧指令和彈出指令。
PUSHdirect;SP←(SP)+1,(SP)←(direct)
POPdirect;direct←((SP)),SP←(Sp)-1(1)PUSH指令的功能是先將堆棧指針SP的內(nèi)容加1,然后將直接尋址單元中的數(shù)壓入到SP所指示的單元中去。(2)POP指令的功能是先將堆棧指針SP所指示的單元的內(nèi)容彈出傳送到直接地址之中,然后將SP的內(nèi)容減1,仍指向棧頂。(3)使用堆棧時,一般需重新設(shè)定SP的初始值。系統(tǒng)上電或復(fù)位時,SP的初始值為07H,而07H~1FH正好是CPU工作寄存器區(qū),程序中需要使用堆棧時,應(yīng)先給SP設(shè)置另一初始值。一般地,SP的值可設(shè)在1FH或再大一些的片內(nèi)RAM單元中,但應(yīng)注意不要超出堆棧的深度。例3-9設(shè)(SP)=60H,(A)=20H,(B)=50H,執(zhí)行下列指令:PUSHACC;SP←(SP)+1,(SP)←(A)PUSHB;SP←(SP)+1,(SP)←(B)POPACC;A←((SP)),SP←(Sp)-1POPB;B←((SP)),SP←(Sp)-1結(jié)果:(61H)=20H,(62H)=50H,(SP)=60H,(A)=50H,(B)=20H。
指令說明字節(jié)數(shù)機器周期數(shù)MOVA,RnA←(Rn)11MOVA,directA←(direct)21MOVA,@RiA←((Ri))11MOVA,#dataA←data21MOVRn,ARn←(A)11MOVRn,directRn←(direct)22MOVRn,#dataRn←data21MOVdirect,Adirect←(A)21MOVdirect,Rndirect←(Rn)22MOVdirect1,direct2direct1←(direct2)32MOVdirect,@Ridirect←((Ri))22MOVdirect,#datadirect←data32MOV@Ri,A(Ri)←A21MOV@Ri,direct(Ri)←(direct)22MOV@Ri,#data(Ri)←data21MOVDPTR,#data16DPTR←data1632MOVCA,@A+DPTRA←((A)+(DPTR))12MOCXA,@A+PCA←((A)+(PC))12MOVXA,@RiA←((Ri))12MOVXA,@DPTRA←((DPTR))12MOVX@Ri,A(Ri)←A12MOVX@DPTR,A(DPTR)←A12PUSHdirectSP←(SP)+1,(SP)←(direct)22POPdirect(direct)←((SP)),SP←(SP-1)22XCHA,Rn(A)?(Rn)11XCHA,direct(A)?(direct)21XCHA,@Ri(A)?((Ri))11XCHDA,@Ri(A)3~0?((Ri))3~011SWAPA(A)3-0?(A)7-4113.3.2算術(shù)運算類指令
1.加法指令
ADDA,Rn;A←(A)+(Rn)ADDA,direct;A←(A)+(direct)ADDA,@Ri;A←(A)+((Ri))ADDA,#data;A←(A)+data加法運算規(guī)則:(1)兩數(shù)相加后位7有進位輸出,則程序狀態(tài)寄存器PSW中進位標志位CY置l,否則清0。(2)兩數(shù)相加后位3向位4有進位輸出,則PSW中輔助進位標志位(半進位標志位)AC置l,否則清0。(3)兩數(shù)相加后,如果位7有進位輸出而位6沒有,或者位6有進位輸出而位7沒有,則PSW中溢出標志位OV置1,否則清0。溢出的表達式OV=C7+C6,C6為位6向位7的進位,C7為位7向CY的進位。(4)兩數(shù)相加時,操作數(shù)按位相加,若認為是無符號數(shù)相加,只需注意進位標志CY;但帶符號數(shù)相加的結(jié)果只有當PSW中溢出標志位OV=0時,結(jié)果才是正確的。
例3-10執(zhí)行如下指令:
MOVA,#19HADDA,#66H
00011001
+01100110
01111111
執(zhí)行后:(A)=7FH,(CY)=0,(AC)=0,(OV)=0,(P)=1例3-11執(zhí)行如下指令:
MOVA,#0C3HADDA,#0AAH
11000011
+10101010
101101101(A)=6DH,(CY)=1,(AC)=0,(OV)=1,(P)=1。Cy2.帶進位加法指令
ADDCA,Rn;A←(A)+(Rn)+(CY)
ADDCA,direct;A←(A)+(direct)+(CY)
ADDCA,@Ri;A←(A)+((Ri))+(CY)
ADDCA,#data;A←(A)+data+(CY)
例3-12設(shè)(A)=0C8H,(R0)=0AAH,(CY)=1,執(zhí)行指令:ADDCA,R0。
1100100010101010
+00000001
101110011執(zhí)行結(jié)果為:(A)=73H,(CY)=1,(OV)=l,(AC)=1,(P)=l。3.十進制調(diào)整指令
DAA;若(AC)=1或(A)3-0>9,則A←(A)+06H;若(CY)=l或(A)7-4>9,則A←(A)+60H例3-13兩個BCD碼求和運算,設(shè)(A)=56H,(R2)=67H。ADDA,R2
DAA執(zhí)行后,(A)=23H,CY=1。4.減法指令(帶借位的減法
)
SUBBA,Rn;A←(A)-(Rn)-(CY)
SUBBA,direct;A←(A)-(direct)-(CY)
SUBBA,@Ri;A←(A)-((Ri))-(CY)
SUBBA,#data;A←(A)-data-(CY)5.加1指令
INCA;A←(A)+l
INCRn;Rn←(Rn)+1
INCdirect;direct←(direct)+1
INC@Ri;(Ri)←((Ri))+1
INCDPTR;DPTR←(DPTR)+1
6.減1指令
DECA;A←(A)-l
DECRn;Rn←(Rn)-1
DECdirect;direct←(direct)-1
DEC@Ri;(Ri)←((Ri))-1
錯誤指令:DECDPTR7.乘法指令
MULAB;AB←(A)*(B)例3-15若(A)=4EH,(B)=5DH,執(zhí)行指令
MULAB(B)=1CH,(A)=56H,表示積為1C56H,此時CY=0,OV=1。8.除法指令
DIVAB;A←(A)/(B)的商B←(A)/(B)的余數(shù)
例3-16若(A)=5DH,(B)=4EH,執(zhí)行指令DIVAB(A)=01H,(B)=0FH,標志位CY=0,OV=0
指令說明字節(jié)數(shù)機器周期數(shù)ADDA,RnA←(A)+(Rn)11ADDA,directA←(A)+(direct)21ADDA,@RiA←(A)+((Ri))11ADDA,#dataA←(A)+data21ADDCA,RnA←(A)+(Rn)+(CY)11ADDCA,directA←(A)+(direct)+(CY)21ADDCA,@RiA←(A)+((Ri))+(CY)11ADDCA,#dataA←(A)+data+(CY)21SUBBA,RnA←(A)-(Rn)-(CY)11SUBBA,directA←(A)-(direct)-(CY)21SUBBA,@RiA←(A)-((Ri))-(CY)11SUBBA,#dataA←(A)-data-(CY)21INCAA←(A)+111INCRnRn←(Rn)+111INC@Ri(Ri)←((Ri))+111INCdirectdirect←(direct)+121INCDPTRDPTR←(DPTR)+112DECAA←(A)-111DECRnRn←(Rn)-111DEC@Ri(Ri)←((Ri))-111DECdirectdirect←(direct)-121MULABAB←(A)*(B)14DIVABAB←(A)/(B)24DAA對A進行十進制調(diào)整213.3.3邏輯運算類指令1.邏輯與運算
ANLA,Rn;A←(A)∧(Rn)
ANLA,direct;A←(A)∧(direct)
ANLA,@Ri;A←(A)∧((Ri))
ANLA,#data;A←(A)∧data
ANLdirect,A;direct←(direct)∧(A)ANLdirect,#data;direct←(direct)∧data2.邏輯“或”運算ORLA,Rn;A←(A)∨(Rn)
ORLA,direct;A←(A)∨(direct)
ORLA,@Ri;A←(A)∨((Ri))
ORLA,#data;A←(A)∨data
ORLdirect,A;direct←(direct)∨(A)
ORLdirect,#data;direct←(direct)∨data3.邏輯異或運算
XRLA,Rn;A←(A)+(Rn)
XRLA,direct;A←(A)+(direct)
XRLA,@Ri;A←(A)+((Ri))
XRLA,#data;A←(A)+data
XRLdirect,A;direct←(direct)+(A)
XRLdirect,#data;direct←(direct)+data4.累加器清0和取反指令
CLRA;A←0
CPLA;A←(A)
只適用于對累加器A進行字節(jié)操作,CLR、CPL在其它場合為位操作類指令。
5.移位指令
RLA;循環(huán)左移
A7A0RRA;循環(huán)右移
A7A0
RLCA;帶進位循環(huán)左移
RRCA;帶進位循環(huán)右移A7A0CYA7A0CY指令說明字節(jié)數(shù)機器周期數(shù)ANLA,RnA←(A)∧(Rn)11ANLA,directA←(A)∧(direct)21ANLA,@RiA←(A)∧((Ri))11ANLA,#dataA←(A)∧data21ANLdirect,Adirect←(direct)∧(A)21ANLdirect,#datadirect←(direct)∧data32ORLA,RnA←(A)∨(Rn)11ORLA,directA←(A)∨(direct)21ORLA,@RiA←(A)∨((Ri))11ORLA,#dataA←(A)∨data21ORLdirect,Adirect←(direct)∨(A)21ORLdirect,#datadirect←(direct)∨data32XRLA,RnA←(A)+(Rn)11XRLA,directA←(A)+(direct)21XRLA,@RiA←(A)+((Ri))11XRLA,#dataA←(A)+data21XRLdirect,Adirect←(direct)+(A)22XRLdirect,#datadirect←(direct)+data32CLRAA←/011CPLAA←(A)11RLAA循環(huán)左移一位11RLCAA帶進位循環(huán)左移一位11RRAA循環(huán)右移一位11RRCAA帶進位循環(huán)右移一位113.3.4控制轉(zhuǎn)移類指令1.無條件轉(zhuǎn)移指令
(1)長轉(zhuǎn)移指令
LJMPaddrl6;PC←addrl6
轉(zhuǎn)移范圍:64KB(2)絕對轉(zhuǎn)移指令
AJMPaddr11;PC←(PC)+2,PCl0~0←addrll
轉(zhuǎn)移范圍:同一個2KB的頁內(nèi)(3)相對轉(zhuǎn)移指令(短跳轉(zhuǎn)指令)
SJMPrel;PC←(PC)+2,PC←(PC)+rel轉(zhuǎn)移范圍:-128~+127
SJMP$;死循環(huán)
(4)變址尋址轉(zhuǎn)移指令(散轉(zhuǎn)指令)JMP@A+DPTR;PC←(A)+(DPTR)
例3-24累加器A中存放待處理命令編號(0~4),程序存儲器中存放著轉(zhuǎn)移指令表,首地址的標號為PTAB,執(zhí)行下面的程序,將根據(jù)A中命令編號轉(zhuǎn)向相應(yīng)的命令處理程序。TOX:MOVR2,A;A中命令編號暫存在R2中
RLA;將A的內(nèi)容左移乘2
ADDA,R2;A中命令編號乘3
MOVDPTP,#PTAB;轉(zhuǎn)移表首地址→DPTR
JMP@A+DPTR;轉(zhuǎn)移到(A)+(DPTR)程序地址PTAB:LJMPPM0;轉(zhuǎn)向命令0處理入口
LJMPPMl;轉(zhuǎn)向命令l處理入口
LJMPPM2;轉(zhuǎn)向命令2處理入口
LJMPPM3;轉(zhuǎn)向命令3處理入口
LJMPPM4;轉(zhuǎn)向命令4處理入口程序中PM0~PM4分別為各處理程序的入口地址。2.條件轉(zhuǎn)移指令(1)累加器判0條件轉(zhuǎn)移指令
JZrel;若(A)=0,則PC←(PC)+2+rel;若(A)≠0,則PC←(PC)+2
JNZrel;若(A)≠0,則PC←(PC)+2+rel;若(A)=0,則PC←(PC)+2(2)比較條件轉(zhuǎn)移指令
CJNEA,#data,rel;PC←(PC)+3;若(A)>data,則PC←(PC)+rel,且CY←0;若(A)<data,則PC←(PC)+rel,且CY←1;若(A)=data,則順序執(zhí)行程序,且CY←0
CJNEA,direct,rel;PC←(PC)+3;若(A)>(direct),則PC←(PC)+rel,且CY←0;;若(A)<(direct),則PC←(PC)+rel,且CY←1;;若(A)=(direct),則順序執(zhí)行程序,且CY←0。
CJNERn,#data,rel;PC←(PC)+3;若(Rn)>data,則PC←(PC)+rel,且CY←0;若(Rn)<data,則PC←(PC)+rel,且CY←1;若(Rn)=data,則順序執(zhí)行程序,且CY←0
CJNE@Ri,#data,rel;PC←(PC)+3;若((Ri))>data,則PC←(PC)+rel,且CY←0;若((Ri))<data,則PC←(PC)+rel,且CY←1;若((Ri))=data,則順序執(zhí)行程序,且CY←0例3-25根據(jù)A的內(nèi)容大于80H,等于80H,小于80H三種情況作不同的處理程序。
CJNEA,#80H,NEQ;比較轉(zhuǎn)移EQ:…;(A)=80H,按順序執(zhí)行此條指令NEQ:JCLOW;(A)<80H,則轉(zhuǎn)到LOW處執(zhí)行…;(A)>80H,順序執(zhí)行指令LOW:…;(A)<80H,則執(zhí)行此條指令(3)減1條件轉(zhuǎn)移指令
DJNZRn,rel;PC←(PC)+2,Rn←(Rn)-1;若(Rn)≠0,則PC←(PC)+rel;若(Rn)=0,則程序向下按順序執(zhí)行
DJNZdirect,rel;PC←(PC)+3,direct←(direct)-1;若(direct)≠0,則PC←(PC)+rel例3-26將RAM中從DATA1單元開始的10個無符號數(shù)相加,結(jié)果送至SUM單元(假設(shè)累加和小于255)。
MOVR0,#DATA1;數(shù)據(jù)塊首地址DATA1送R0
MOVR3,#0AH;計數(shù)器初值0AH送R3
CLRA;累加器A清0LOOP:ADDA,@R0;累加一次
INCR0;地址指針R0加1,指向下一個數(shù)
DJNZR3,LOOP;計數(shù)器R3減1不為0繼續(xù)累加
MOVSUM,A;累加十次,結(jié)果送SUM單元3.子程序調(diào)用及返回指令(1)子程序調(diào)用指令A(yù).長調(diào)用指令
LCALLaddrl6;PC←(PC)+3,SP←(SP)+1;(SP)←(PC)L,SP←(SP)+1;(SP)←(PC)H,PC←addr1665H64H斷點2地址高8位63H斷點2地址低8位62H斷點1地址高8位61H斷點1地址低8位60H片內(nèi)RAM堆棧區(qū)
調(diào)用指令1斷點1
調(diào)用指令2斷點2
主程序子程序1子程序2返回指令1
返回指令2例3-27執(zhí)行如下指令,AB標號地址=0123H。
MOVSP,#60H;SP←60HAB:LCALL805lH執(zhí)行后,(SP)=62H,(61H)=26H,(62H)=01H,程序轉(zhuǎn)向以805lH為首地址的子程序執(zhí)行,此時的斷點地址為0126H。65H64H63H62H01H61H26H60H片內(nèi)RAM堆棧區(qū)
B.絕對調(diào)用指令
ACALLaddr11;PC←(PC)+2,SP←(SP)+1;(SP)←(PC)L,SP←(SP)+1;(SP)←(PC)H,PC10~0←addr11(2)返回指令A(yù).子程序返回指令
RET;PCH←(
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度安全生產(chǎn)月宣傳品采購與分發(fā)合同
- 2024年度建設(shè)施工合同工程質(zhì)量與工程款支付規(guī)定
- 2024年企業(yè)環(huán)保設(shè)施建設(shè)和運營合同
- 04版離婚合同:三個孩子的監(jiān)護權(quán)、財產(chǎn)分配及贍養(yǎng)費
- 2024聘用駕駛員合同書
- 2024年建筑基礎(chǔ)土石方作業(yè)合同
- 安利心態(tài)課件教學(xué)課件
- 催收員試用期轉(zhuǎn)正工作總結(jié)(6篇)
- 2024年度ABC電子科技有限公司手機代理銷售合同
- 2024年大型物流中心建設(shè)與運營合同
- 法律顧問服務(wù)投標方案(完整技術(shù)標)
- 人教版八年級上冊數(shù)學(xué)期中考試壓軸題專練
- 中國環(huán)衛(wèi)機械行業(yè)市場發(fā)展態(tài)勢及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 當代社會政策分析 課件 第九章 婦女社會政策
- 2024年職業(yè)技能“大數(shù)據(jù)考試”專業(yè)技術(shù)人員繼續(xù)教育考試題庫與答案
- 心臟介入手術(shù)配合
- 學(xué)生騎車安全承諾書
- 核電站壽命評估技術(shù)
- 2023-2024學(xué)年遼寧省大連市名校聯(lián)盟八年級(上)聯(lián)考生物試卷(含解析)
- 有色金屬熔煉與鑄錠課件
- 安徽省蕪湖市七年級上學(xué)期語文期中試卷(含答案)
評論
0/150
提交評論