版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
3.0概論一、指令與指令系統(tǒng)二、程序與程序設(shè)計程序:按預(yù)定要求編排的指令序列,完成某一預(yù)定任務(wù)。必須存放在存貯器中,CPU逐條取指、執(zhí)行。程序設(shè)計(編程):根據(jù)任務(wù)要求與算法,從指令系統(tǒng)中選取合適的指令,加以排列而得到程序的過程。第1頁,共72頁。三、匯編語言程序每行的標(biāo)準(zhǔn)格式:
[標(biāo)號:]
操作碼[操作數(shù)]
[;注釋]標(biāo)號代表該指令所存放的第一個字節(jié)存儲單元的地址,故標(biāo)號又稱為“符號地址”。必須以冒號結(jié)束。不能用指令、SFR名。其他語句可直接應(yīng)用標(biāo)號。操作碼也稱“助記符”。表達(dá)指令功能操作數(shù)表達(dá)指令對象??梢允菙?shù)字或地址指令注釋必須以分號開頭,匯編時不處理。增強可讀性
第2頁,共72頁。
三個區(qū)段都可有可無例:START:MOVA, #30H
;Thisisasample
CLRA;下子程序完成雙字節(jié)乘法第3頁,共72頁。四、描述指令的一些符號的意義:
Rn——當(dāng)前選定的寄存器區(qū)中的8個工作寄存器R0~R7,即n=0~7。Ri——當(dāng)前選定的寄存器區(qū)中的2個寄存器R0、R1,i=0、1。direct——8位內(nèi)部RAM單元的地址,它可以是一個內(nèi)部數(shù)據(jù)區(qū)RAM單元(00H~7FH)或特殊功能寄存器地址(I/O端口、控制寄存器、狀態(tài)寄存器80H~0FFH)。#data——指令中的8位常數(shù)。#data16——指令中的16位常數(shù)。addr16——16位的目的地址,用于LJMP,LCALL指令,可指向64KB程序存儲器地址空間。第4頁,共72頁。
addr11——11位的目的地址,用于AJMP,ACALL指令。目的地址必須與下一條指令的第一個字節(jié)在同一個2KB程序存儲器地址空間之內(nèi)。rel——8位帶符號的偏移量字節(jié),用于SJMP和所有條件轉(zhuǎn)移指令中。偏移量相對于下一條指令的第一個字節(jié)計算,在-128~+127范圍內(nèi)取值。bit——內(nèi)部數(shù)據(jù)RAM或特殊功能寄存器中的可直接尋址位。DPTR——數(shù)據(jù)指針,可用作16位的地址寄存器。第5頁,共72頁。A——累加器。B——寄存器,用于MUL和DIV指令中。C——進(jìn)位標(biāo)志或進(jìn)位位。@——間接尋址寄存器或基址寄存器的前綴,如@Ri,@DPTR。/——位操作數(shù)的前綴,表示對該位取反。(X)——X中的內(nèi)容。((X))——由X尋址的單元中的內(nèi)容?!^左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替。第6頁,共72頁。3.1尋址方式
所謂尋址方式,就是尋找操作數(shù)地址的方式,在用匯編語言編程時,數(shù)據(jù)的存放、傳送、運算都要通過指令來完成。編程者必須自始至終都要十分清楚操作數(shù)的位置,以及如何將它們傳送到適當(dāng)?shù)募拇嫫魅⑴c運算。每一種計算機都具有多種尋址方式。尋址方式的多少是反映指令系統(tǒng)優(yōu)劣的主要指標(biāo)之一。第7頁,共72頁。
在MCS-51單片機指令系統(tǒng)中,有以下7種尋址方式:(1)立即尋址;(2)直接尋址;(3)寄存器尋址;(4)寄存器間接尋址;(5)基址寄存器加變址寄存器間接尋址;(6)相對尋址;(7)位尋址。第8頁,共72頁。1.立即尋址立即尋址方式是指操作數(shù)包含在指令字節(jié)中。跟在指令操作碼后面的數(shù)就是參加運算的數(shù),該操作數(shù)稱為立即數(shù)。立即數(shù)有一字節(jié)和二字節(jié)兩種可能,例如指令:MOVA,#3AHMOVDPTR,#0DFFFH上述兩條指令均為立即尋址方式,第一條指令的功能是將立即數(shù)3AH送累加器A中,第二條指令的功能是將立即數(shù)0DFFFH送數(shù)據(jù)指針DPTR中(0DFH→DPH,0FFH→DPL)。第9頁,共72頁。2.直接尋址在指令中直接給出操作數(shù)的地址,這種尋址方式就屬于直接尋址方式。在這種方式中,指令的操作數(shù)部分直接是操作數(shù)的地址。在MCS-51單片機指令系統(tǒng)中,直接尋址方式中可以訪問3種存儲器空間:(1)內(nèi)部數(shù)據(jù)存儲器的低128個字節(jié)單元(00H~7FH)。(2)特殊功能寄存器。特殊功能寄存器只能用直接尋址方式進(jìn)行訪問。(3)位地址空間。第10頁,共72頁。
3.寄存器尋址在該尋址方式中,參加操作的數(shù)存放在寄存器里。寄存器包括8個工作寄存器R0~R7,累加器A,寄存器B、數(shù)據(jù)指針DPTR和布爾處理器的位累加器Cy。第11頁,共72頁。4.寄存器間接尋址指令中給出間接尋址寄存器,其內(nèi)容為操作數(shù)的地址。尋址內(nèi)部RAM區(qū)的數(shù)據(jù)時,可使用寄存器R0、R1、(SP)作為地址指針;當(dāng)訪問外部RAM時,可使用R0、R1及DPTR作為地址指針。寄存器間接尋址符號為“@”,例如:第12頁,共72頁。
5.基址寄存器加變址寄存器間接尋址這種尋址方式用于訪問程序存儲器中的數(shù)據(jù)表格,它以基址寄存器DPTR或PC的內(nèi)容為基本地址,加上變址寄存器A的內(nèi)容作為操作數(shù)的地址,例如:MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR;散轉(zhuǎn)指令
第13頁,共72頁。6.相對尋址在MCS-51指令系統(tǒng)中設(shè)有轉(zhuǎn)移指令,分為直接轉(zhuǎn)移和相對轉(zhuǎn)移指令,在相對轉(zhuǎn)移指令中采用相對尋址方式。這種尋址方式是以PC的內(nèi)容為基本地址,加上指令中給定的偏移量作為轉(zhuǎn)移地址。指令中給出的偏移量是一個8位帶符號的常數(shù),可正可負(fù),其范圍為-128~+127。7.位尋址該種尋址方式中,操作數(shù)是內(nèi)部RAM單元中某一位的信息。第14頁,共72頁。3.2指令系統(tǒng)3.2.1指令分類
按指令的功能,MCS-51指令系統(tǒng)可分為下列5類:(1)數(shù)據(jù)傳送;(2)算術(shù)運算;(3)邏輯運算;(4)位操作;(5)控制轉(zhuǎn)移。第15頁,共72頁。3.2.2數(shù)據(jù)傳送類指令1)內(nèi)部RAM單元之間的數(shù)據(jù)傳送MOV 目的操作數(shù), 源操作數(shù)圖3–1MCS-51傳送指令示意圖
第16頁,共72頁。表3.1數(shù)據(jù)傳送類指令一覽表
第17頁,共72頁。注意:沒有MOV R2,R1MOV R2,@R1MOV @R0,@R1指令。只能在指令集中選擇合適的指令,不能自己創(chuàng)造指令
第18頁,共72頁。表3.1數(shù)據(jù)傳送類指令一覽表第19頁,共72頁。1.數(shù)據(jù)傳送到累加器A的指令MOVA,R0MOVA,directMOVA,@RiMOVA,#data這組指令的功能是:把源操作數(shù)的內(nèi)容送入累加器A。例如:MOVA,#10H,該指令執(zhí)行時將立即數(shù)10H送入累加器A中。第20頁,共72頁。2.數(shù)據(jù)傳送到工作寄存器Rn的指令
MOVRn,AMOVRn,directMOVRn,#data這組指令的功能是:把源操作數(shù)的內(nèi)容送入當(dāng)前工作寄存器區(qū)的R0~R7中的某一個寄存器。指令中Rn在內(nèi)部數(shù)據(jù)存儲器中的地址由當(dāng)前的工作寄存器區(qū)選擇位RS1、RS0確定,可以是00H~07H、08H~0FH、10H~17H、18H~1FH。例如:MOVR0,A,若當(dāng)前RS1、RS0設(shè)置為00(即工作寄存器0區(qū)),執(zhí)行該指令時,將累加器A中的數(shù)據(jù)傳送至工作寄存器R0(內(nèi)部RAM00H)單元中。第21頁,共72頁。3.數(shù)據(jù)傳送到內(nèi)部RAM單元或特殊功能寄存器SFR的指令
MOVdirect,AMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#dataMOV@Ri,AMOV@Ri,directMOV@Ri,#dataMOVDPTR,#data16第22頁,共72頁。
這組指令的功能是:把源操作數(shù)的內(nèi)容送入內(nèi)部RAM單元或特殊功能寄存器。其中第三條指令和最后一條指令都是三字節(jié)指令。第三條指令的功能很強,能實現(xiàn)內(nèi)部RAM之間、特殊功能寄存器之間或特殊功能寄存器與內(nèi)部RAM之間的直接數(shù)據(jù)傳送。最后一條指令是將16位的立即數(shù)送入數(shù)據(jù)指針寄存器DPTR。第23頁,共72頁。2).累加器A與外部數(shù)據(jù)存儲器之間的傳送指令
MOVXA,@DPTRMOVXA,@RiMOVX@DPTR,AMOVX@Ri,A第24頁,共72頁。
這組指令是:在累加器A與外部數(shù)據(jù)存儲器RAM單元或I/O口之間進(jìn)行數(shù)據(jù)傳送,前兩條指令執(zhí)行時,P3.7引腳上輸出RD有效信號,用作外部數(shù)據(jù)存儲器的讀選通信號;后兩條指令執(zhí)行時,P3.6引腳上輸出WR有效信號,用作外部數(shù)據(jù)存儲器的寫選通信號。DPTR所包含的16位地址信息由P0(低8位)和P2(高8位)輸出,而數(shù)據(jù)信息由P0口傳送,P0口作分時復(fù)用的總線。由Ri作為間接尋址寄存器時,P0口上分時輸出Ri指定的8位地址信息及傳輸8位數(shù)據(jù)。第25頁,共72頁。3).堆棧操作指令
PUSHdirectPOPdirect在MCS-51單片機的內(nèi)部RAM中,可以設(shè)定一個先進(jìn)后出的區(qū)域,稱其為堆棧。在特殊功能寄存器中有一個堆棧指針SP,它指出棧頂?shù)奈恢?。進(jìn)棧指令的功能是:首先將堆棧指針SP的內(nèi)容加1,然后將直接地址所指出的內(nèi)容送入SP指出的內(nèi)部RAM單元;出棧指令的功能是:將SP所指出的內(nèi)部RAM單元的內(nèi)容送入由直接地址所指出的字節(jié)單元,接著將堆棧指針SP的內(nèi)容減1。第26頁,共72頁。
例如:進(jìn)入中斷服務(wù)子程序時,把程序狀態(tài)寄存器PSW、累加器A、數(shù)據(jù)指針DPTR進(jìn)棧保護(hù)。設(shè)當(dāng)前SP為60H。則程序段PUSHPSWPUSHACCPUSHDPLPUSHDPH執(zhí)行后,SP內(nèi)容修改為64H,而61H、62H、63H、64H單元中依次棧入PSW、A、DPL、DPH的內(nèi)容。當(dāng)中斷服務(wù)程序結(jié)束之前,如下程序段(SP保持64H不變)第27頁,共72頁。
POPDPHPOPDPLPOPACCPOPPSW執(zhí)行之后,SP內(nèi)容修改為60H,而64H、63H、62H、61H單元中的內(nèi)容依次彈出到DPH、DPL、A、PSW中。MCS-51提供一個向上升的堆棧,因此SP設(shè)置初值時要充分考慮堆棧的深度,要留出適當(dāng)?shù)膯卧臻g,滿足堆棧的使用。第28頁,共72頁。4).程序存儲器內(nèi)容送累加器
MOVCA,@A+PCMOVCA,@A+DPTR這是兩條很有用的查表指令,可用來查找存放在程序存儲器中的常數(shù)表格。第一條指令是以PC作為基址寄存器,A的內(nèi)容作為無符號數(shù)和PC的內(nèi)容(下一條指令的起始地址)相加后得到一個16位的地址,并將該地址指出的程序存儲器單元的內(nèi)容送到累加器A。這條指令的優(yōu)點是不改變特殊功能寄存器和PC的狀態(tài),只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。缺點是表格只能放在該條查表指令后面的256個單元之中,表格的大小受到限制,而且表格只能被一段程序所利用。第29頁,共72頁。
第二條指令是以DPTR作為基址寄存器,累加器A的內(nèi)容作為無符號數(shù)與DPTR內(nèi)容相加,得到一個16位的地址,并把該地址指出的程序存儲器單元的內(nèi)容送到累加器A。這條指令的執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址無關(guān),因此,表格的大小和位置可以在64KB程序存儲器中任意安排,并且一個表格可以為各個程序塊所共用。第30頁,共72頁。
5).字節(jié)交換指令
XCHA,RnXCHA,@RiXCHA,directXCHDA,@RiSWAPA前三條指令是將累加器A的內(nèi)容和源操作數(shù)內(nèi)容相互交換;后兩條指令是半字節(jié)交換指令,最后一條指令是將累加器A的高4位與低4位之間進(jìn)行交換,而另外一條指令是將累加器A的低4位內(nèi)容和(Ri)所指出的內(nèi)部RAM單元的低4位內(nèi)容相互交換。第31頁,共72頁。3.2.3算術(shù)運算類指令表3.2算術(shù)運算指令第32頁,共72頁。表3.2算術(shù)運算指令第33頁,共72頁。表3.3影響標(biāo)志位的指令第34頁,共72頁。表3.3影響標(biāo)志位的指令第35頁,共72頁。一、加法指令1.普通加法指令A(yù)DDA,RnADDA,directADDA,@RiADDA,#data第36頁,共72頁。例如:120和100之和為220,顯然大于127,相加時011110001200110010010011011100220+符號位(最高位)由0變1,兩個正數(shù)相加結(jié)果變負(fù),實際上它是和數(shù)的最高位,符號位移入了進(jìn)位標(biāo)志,此時位6有進(jìn)位而位7無進(jìn)位,置位溢出標(biāo)志OV,結(jié)果溢出。第37頁,共72頁。同樣,-120和-100相加,結(jié)果應(yīng)為-220,顯然小于-128,相加時10001000-12010011100-100+100100100-220符號位由1變?yōu)?,兩個負(fù)數(shù)相加結(jié)果變?yōu)檎龜?shù),這是因為符號位移入進(jìn)位標(biāo)志,位6無進(jìn)位而位7有進(jìn)位,置位溢出標(biāo)志OV,由此可判斷結(jié)果溢出。第38頁,共72頁。2.帶進(jìn)位加法指令A(yù)DDCA,RnADDCA,directADDCA,@RiADDCA,#data這組指令的功能與普通加法指令類似,唯一的不同之處是,在執(zhí)行加法時,還要將上一次進(jìn)位標(biāo)志Cy的內(nèi)容也一起加進(jìn)去,對于標(biāo)志位的影響也與普通加法指令相同。第39頁,共72頁。
3.增量指令
INCAINCRnINCdirectINC@RiINCDPTR這組指令的功能是:將指令中所指出操作數(shù)的內(nèi)容加1。若原來的內(nèi)容為0FFH,則加1后將產(chǎn)生溢出,使操作數(shù)的內(nèi)容變成00H,但不影響任何標(biāo)志。最后一條指令是對16位的數(shù)據(jù)指針寄存器DPTR執(zhí)行加1操作,指令執(zhí)行時,先對低8位指針DPL的內(nèi)容加1,當(dāng)產(chǎn)生溢出時就對高8位指針DPH加1,但不影響任何標(biāo)志。第40頁,共72頁。4.十進(jìn)制調(diào)整指令
DAA這條指令對累加器A參與的BCD碼加法運算所獲得的8位結(jié)果進(jìn)行十進(jìn)制調(diào)整,使累加器A中的內(nèi)容調(diào)整為二位壓縮型BCD碼的數(shù)。使用時必須注意,它只能跟在加法指令之后,不能對減法指令的結(jié)果進(jìn)行調(diào)整,且其結(jié)果不影響溢出標(biāo)志位。執(zhí)行該指令時,判斷A中的低4位是否大于9和輔助進(jìn)位標(biāo)志AC是否為“1”,若兩者有一個條件滿足,則低4位加6操作;同樣,A中的高4位大于9或進(jìn)位標(biāo)志Cy為“1”兩者有一個條件滿足時,高4位加6操作。例如:有兩個BCD數(shù)36與45相加,結(jié)果應(yīng)為BCD碼81,程序如下:第41頁,共72頁。MOVA,#36HADDA,#45HDAA這段程序中,第一條指令將立即數(shù)36H(BCD碼36)送入累加器A;第二條指令進(jìn)行如下加法:00110110360100010145011110117B0000011006++1000000181得結(jié)果7BH;第三條指令對累加器A進(jìn)行十進(jìn)制調(diào)整,低4位(為0BH)大于9,因此要加6,得調(diào)整的BCD碼81。第42頁,共72頁。二、減法指令1.帶進(jìn)位減法指令
SUBBA,RnSUBBA,directSUBBA,@RiSUBBA,#data這組指令的功能是:將累加器A的內(nèi)容與第二操作數(shù)及進(jìn)位標(biāo)志相減,結(jié)果送回到累加器A中。在執(zhí)行減法過程中,如果位7(D7)有借位,則進(jìn)位標(biāo)志Cy置“1”,否則清“0”;如果位3(D3)有借位,則輔助進(jìn)位標(biāo)志AC置“1”,否則清“0”;如位6有借位而位7沒有借位,或位7有借位而位6沒有借位,則溢出標(biāo)志OV置“1”,否則清“0”。若要進(jìn)行不帶借位的減法操作,則必須先將Cy清“0”。第43頁,共72頁。
2.減1指令
DECADECRnDECdirectDEC@Ri這組指令的功能是:將指出的操作數(shù)內(nèi)容減1。如果原來的操作數(shù)為00H,則減1后將產(chǎn)生下溢出,使操作數(shù)變成0FFH,但不影響任何標(biāo)志。第44頁,共72頁。三、乘法指令
乘法指令完成單字節(jié)的乘法,只有一條指令:MULAB這條指令的功能是:將累加器A的內(nèi)容與寄存器B的內(nèi)容相乘,乘積的低8位存放在累加器A中,高8位存放于寄存器B中。如果乘積超過0FFH,則溢出標(biāo)志OV置“1”,否則清“0”。進(jìn)位標(biāo)志Cy總是被清“0”。第45頁,共72頁。
四、除法指令
除法指令完成單字節(jié)的除法,只有一條指令:DIVAB這條指令的功能是:將累加器A中的內(nèi)容除以寄存器B中的8位無符號整數(shù),所得商的整數(shù)部分存放在累加器A中,余數(shù)部分存放在寄存器B中,清“0”進(jìn)位標(biāo)志Cy和溢出標(biāo)志OV。若原來B中的內(nèi)容為0,則執(zhí)行該指令后A與B中的內(nèi)容不定,并將溢出標(biāo)志OV置“1”,在任何情況下,進(jìn)位標(biāo)志Cy總是被清“0”。第46頁,共72頁。3.2.4邏輯運算類指令表3.4邏輯運算指令第47頁,共72頁。一、邏輯與指令 Rn directANLA, @Ri #dataANLdirect, A #data這組指令的功能是:將兩個操作數(shù)的內(nèi)容按位進(jìn)行邏輯與操作,并將結(jié)果送回目的操作數(shù)的單元中。第48頁,共72頁。二、邏輯或指令ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data這組指令的功能是:將兩個操作數(shù)的內(nèi)容按位進(jìn)行邏輯或操作,并將結(jié)果送回目的操作數(shù)的單元中。第49頁,共72頁。三、邏輯異或指令
XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data這組指令的功能是:將兩個操作數(shù)的內(nèi)容按位進(jìn)行邏輯異或操作,并將結(jié)果送回到目的操作數(shù)的單元中。第50頁,共72頁。
四、清零、求反、移位操作指令
CLRA;對累加器A清“0”CPLA;對累加器A按位取反RLA;累加器A的內(nèi)容向左環(huán)移1位RLCA;累加器A的內(nèi)容帶進(jìn)位標(biāo)志位向左環(huán)移1位RRA;累加器A的內(nèi)容向右環(huán)移1位RRCA;累加器A的內(nèi)容帶進(jìn)位標(biāo)志位向右環(huán)移1位這組指令的功能是:對累加器A的內(nèi)容進(jìn)行簡單的邏輯操作。除了帶進(jìn)位標(biāo)志位的移位指令外,其它都不影響Cy,AC,OV等標(biāo)志。第51頁,共72頁。3.2.5控制轉(zhuǎn)移指令
控制轉(zhuǎn)移指令共有17條,不包括按布爾變量控制程序轉(zhuǎn)移指令(見表3.5)。其中有64KB范圍內(nèi)的長調(diào)用、長轉(zhuǎn)移指令;有2KB范圍內(nèi)的絕對調(diào)用和絕對轉(zhuǎn)移指令;有全空間的長相對轉(zhuǎn)移及一頁范圍內(nèi)的短相對轉(zhuǎn)移指令;還有多種條件轉(zhuǎn)移指令。由于MCS-51提供了較豐富的控制轉(zhuǎn)移指令,因此在編程上相當(dāng)靈活方便。這類指令用到的助記符共有10種:AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。第52頁,共72頁。64KB 程序存貯器的區(qū)、頁64KB=32×2KB64KB程序存貯器可分為32個區(qū),每區(qū)2KB,區(qū)號由A15~A11決定,區(qū)內(nèi)地址由A10~A0決定64KB=28×28=256×25664KB程序存貯器可分為256個頁,每頁256B,頁號由A15~A8決定,頁內(nèi)地址由A7~A0決定第53頁,共72頁。表3.5控制轉(zhuǎn)移指令第54頁,共72頁。一、無條件轉(zhuǎn)移指令1.長跳轉(zhuǎn)指令LJMPaddr16執(zhí)行該指令時,將16位目標(biāo)地址addr16裝入PC,程序無條件轉(zhuǎn)向指定的目標(biāo)地址。轉(zhuǎn)移的目標(biāo)地址可以在64KB程序存儲器地址空間的任何地方,不影響任何標(biāo)志。絕對跳轉(zhuǎn)指令
第55頁,共72頁。
2.AJMPaddr11(絕對轉(zhuǎn)移)這是2KB范圍內(nèi)的無條件跳轉(zhuǎn)指令,執(zhí)行該指令時,先將PC+2,然后將addr11送入PC10~PC0,而PC15~PC11保持不變。這樣得到跳轉(zhuǎn)的目的地址。需要注意的是,目標(biāo)地址與AJMP后面一條指令的第一個字節(jié)必須在同一個2KB區(qū)域的存儲器區(qū)內(nèi)。
3.
SJMPrel相對轉(zhuǎn)移指令(短轉(zhuǎn)移)執(zhí)行該指令時,先將PC+2,再把指令中帶符號的偏移量加到PC上,得到跳轉(zhuǎn)的目標(biāo)地址送入PC。第56頁,共72頁。4.散轉(zhuǎn)指令
JMP@A+DPTR執(zhí)行該指令時,把累加器A中的8位無符號數(shù)與數(shù)據(jù)指針中的16位數(shù)相加,結(jié)果作為下條指令的地址送入PC,不改變累加器A和數(shù)據(jù)指針DPTR的內(nèi)容,也不影響標(biāo)志。利用這條指令能實現(xiàn)程序的散轉(zhuǎn)。第57頁,共72頁。二、條件轉(zhuǎn)移指令
JZrel;(A)=0轉(zhuǎn)移JNZrel;(A)≠0轉(zhuǎn)移這類指令是依據(jù)累加器A的內(nèi)容是否為0的條件轉(zhuǎn)移指令。條件滿足時轉(zhuǎn)移(相當(dāng)于一條相對轉(zhuǎn)移指令),條件不滿足時則順序執(zhí)行下面一條指令。轉(zhuǎn)移的目標(biāo)地址在以下一條指令的起始地址為中心的256個字節(jié)范圍之內(nèi)(-128~+127)。當(dāng)條件滿足時,PC←(PC)+N+rel,其中(PC)為該條件轉(zhuǎn)移指令的第一個字節(jié)的地址,N為該轉(zhuǎn)移指令的字節(jié)數(shù)(長度),本轉(zhuǎn)移指令N=2。第58頁,共72頁。三、比較轉(zhuǎn)移指令
在MCS-51中沒有專門的比較指令,但提供了下面4條比較不相等轉(zhuǎn)移指令:CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel這組指令的功能是:比較前面兩個操作數(shù)的大小,如果它們的值不相等則轉(zhuǎn)移。轉(zhuǎn)移地址的計算方法與上述兩條指令相同。如果第一個操作數(shù)(無符號整數(shù))小于第二個操作數(shù),則進(jìn)位標(biāo)志Cy置“1”,否則清“0”,但不影響任何操作數(shù)的內(nèi)容。第59頁,共72頁。四、減1不為0轉(zhuǎn)移指令DJNZRn,relDJNZdirect,rel這兩條指令把源操作數(shù)減1,結(jié)果回送到源操作數(shù)中去,如果結(jié)果不為0則轉(zhuǎn)移(轉(zhuǎn)移地址的計算方法同前)。該指令不影響標(biāo)志位。第60頁,共72頁。五、調(diào)用及返回指令
在程序設(shè)計中,通常把具有一定功能的公用程序段編制成子程序,當(dāng)主程序需要使用子程序時用調(diào)用指令,而在子程序的最后安排一條子程序返回指令,以便執(zhí)行完子程序后能返回主程序繼續(xù)執(zhí)行。第61頁,共72頁。1.絕對調(diào)用指令
ACALLaddr11這是一條2KB范圍內(nèi)的子程序調(diào)用指令。執(zhí)行該指令時,先將PC+2以獲得下一條指令的地址,然后將16位地址壓入堆棧(PCL內(nèi)容先進(jìn)棧,PCH內(nèi)容后進(jìn)棧),SP內(nèi)容加2,最后把PC的高5位PC15~PC11與指令中提供的11位地址addr11相連接(PC15~PC11,A10~A0),形成子程序的入口地址送入PC,使程序轉(zhuǎn)向子程序執(zhí)行。所用的子程序的入口地址必須與ACALL下面一條指令的第一個字節(jié)在同一個2KB區(qū)域的存儲器區(qū)內(nèi)。第62頁,共72頁。
2.長調(diào)用指令
LCALLaddr16這條指令無條件調(diào)用位于16位地址addr16的子程序。執(zhí)行該指令時,先將PC+3以獲得下一條指令的首地址,并把它壓入堆棧(先低字節(jié)后高字節(jié)),SP內(nèi)容加2,然后將16位地址放入PC中,轉(zhuǎn)去執(zhí)行以該地址為入口的程序。LCALL指令可以調(diào)用64KB范圍內(nèi)任何地方的子程序。指令執(zhí)行后不影響任何標(biāo)志。第63頁,共72頁。3.子程序返回指令
RET這條指令的功能是:恢復(fù)斷點,將調(dià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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年食品安全合同書
- 2024影視道具租賃合同參考范本
- 工程承包合同示例文本
- 2024舉辦合同培訓(xùn)班的通知
- 2024年度銷售合同智能家居產(chǎn)品銷售合同(04版)
- 2024蔬菜超市采購合同
- 2024年度安全設(shè)備維護(hù)及更新改造合同
- 農(nóng)村新建住宅協(xié)議書
- 2024天臺縣花生種植收購合同樣書
- 2024工業(yè)生產(chǎn)廠房租賃合同范本
- 液化石油氣充裝操作規(guī)程(YSP118液化石油氣鋼瓶)
- 工程樣板過程驗收單
- 顱內(nèi)動脈動脈瘤介入治療臨床路徑
- 糧食倉儲場建設(shè)項目可行性研究報告
- 珠寶銷貨登記表Excel模板
- 深基坑開挖施工風(fēng)險源辨識與評價及應(yīng)對措施
- 唯美手繪風(fēng)花藝插花基礎(chǔ)培訓(xùn)PPT模板課件
- 《現(xiàn)代漢語語法》PPT課件(完整版)
- 5G智慧農(nóng)業(yè)建設(shè)方案
- 航海學(xué)天文定位第四篇天文航海第1、2章
- 浙江大學(xué)學(xué)生社團(tuán)手冊(08)
評論
0/150
提交評論