版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章單片機(jī)指令系統(tǒng)3.280C51的尋址方式
指令格式及常用符號數(shù)據(jù)傳送類指令〔29條〕算術(shù)運(yùn)算類指令〔24條〕邏輯運(yùn)算與循環(huán)類指令〔24條〕控制轉(zhuǎn)移類指令〔17條〕位操作類指令〔17條〕●根本要求:1.掌握單片機(jī)111條指令;2.熟練應(yīng)用指令編寫簡單應(yīng)用程序;●學(xué)習(xí)重點(diǎn):1.單片機(jī)尋址方式;2.111條單片機(jī)指令;
3.1指令格式及常用符號3.1.1機(jī)器指令的編碼格式1.單字節(jié)指令1)8位編碼僅為操作碼:如:INCA。該指令的編碼為:00000100B,其十六進(jìn)制表示為04H,累加器A隱含在操作碼中。指令的功能是累加器A的內(nèi)容加1。注意:在指令中用“A〞表示累加器,而用“ACC〞表示累加器對應(yīng)的地址〔E0H〕。高5位為操作碼,低3位為存放操作數(shù)的存放器編碼。如:MOVA,R0編碼為11101000B,其十六進(jìn)制表示為E8H〔低3位000為存放器R0的編碼〕。功能是將當(dāng)前工作存放器R0中的數(shù)據(jù)傳送到累加器A中。2)8位編碼含有操作碼和存放器編碼2.雙字節(jié)指令第一字節(jié)表示操作碼,第二個字節(jié)表示參與操作的數(shù)據(jù)或數(shù)據(jù)存放的地址。如:MOVA,#50H編碼為01110100B,01010000B。其十六進(jìn)制表示為74H,50H。功能是將立即數(shù)“50H〞傳送到累加器A中。3.三字節(jié)指令指令的第一字節(jié)表示該指令的操作碼,后兩個字節(jié)表示參與操作的數(shù)據(jù)或數(shù)據(jù)存放的地址。如:MOV20H,#50H編碼為01110101B,00100000B,01010000B。其十六進(jìn)制表示為75H,20H,50H。功能是將立即數(shù)“50H〞傳送到內(nèi)部RAM的20H單元中。3.1.2符號指令的格式一般格式為:
操作助記符[目的操作數(shù)][,源操作數(shù)][;注釋]多數(shù)指令為兩操作數(shù)指令;當(dāng)指令操作數(shù)隱含在操作助記符中時,在形式上這種指令無操作數(shù);另有一些指令為單操作數(shù)指令或三操作數(shù)指令。指令的一般格式中使用了可選擇符號“[]〞,包含的內(nèi)容因指令的不同可以有或無。在兩個操作數(shù)的指令中,通常目的操作數(shù)寫在左邊,源操作數(shù)寫在右邊。
如:ANLA,#40H功能是將立即數(shù)“40H〞同累加器A中的數(shù)進(jìn)行“與〞操作,結(jié)果送回累加器。ANL為“與〞操作的助記符,立即數(shù)“40H〞為源操作數(shù),累加器A為目的操作數(shù)。注:在指令中,多數(shù)情況下累加器用“A〞表示,僅在直接尋址方式中,用“ACC〞表示累加器在SFR區(qū)的具體地址E0H。試比較,指令MOVA,#30H的機(jī)器碼為74H、30H;而指令MOVACC,#30H的機(jī)器碼為75H、E0H、30H。3.1.3符號指令及其注釋中常用的符號Rn〔n=0~7〕--當(dāng)前選中的工作存放器組中的存放器R0~R7之一;Ri〔i=0,1〕--當(dāng)前選中的工作存放器組中的存放器R0或R1;@---------------間址存放器前綴;#data------------8位立即數(shù);#data16---------16位立即數(shù);direct--------片內(nèi)低128個RAM單元地址及SFR地址〔可用符號名稱表示〕;addr11-----------11位目的地址;addr16-----------16位目的地址;rel-----------------補(bǔ)碼形式表示的8位地址偏移量,值在-128~+127范圍內(nèi);bit----------------片內(nèi)RAM位地址、SFR的位地址〔可用符號名稱表示〕;/-------------------位操作數(shù)的取反操作前綴;〔×〕-----------表示×地址單元或存放器中的內(nèi)容;←----------------將箭頭右邊的內(nèi)容送入箭頭左邊的單元中。3.280C51的尋址方式是尋找操作數(shù)或指令的地址的方式。80C51的尋址方式有七種。即:存放器尋址、直接尋址、存放器間接尋址、立即尋址、基址存放器加變址存放器變址尋址、相對尋址和位尋址。假設(shè)不特別聲明,我們后面提到的尋址方式均指源操作數(shù)的尋址方式。操作數(shù)存放在存放器中,指令中直接給出該存放器名稱的尋址方式。可以獲得較高的傳送和運(yùn)算速度。3.2.1存放器尋址如:MOVA,R0
存放器可以是:R0~R7;A;B〔以AB存放器對形式出現(xiàn)〕;DPTR。指令操作碼之后的字節(jié)存放的是操作數(shù)的地址,操作數(shù)本身存放在該地址指示的存儲單元中的尋址方式稱為直接尋址。3.2.2直接尋址如:MOVA,50H
直接尋址中的SFR經(jīng)常采用符號形式表示。尋址空間為:片內(nèi)RAM低128字節(jié);SFR。存放器中的內(nèi)容為地址,從該地址去取操作數(shù)的尋址方式稱為存放器間接尋址。3.2.3存放器間接尋址尋址的存儲空間為片內(nèi)RAM或片外RAM。片內(nèi)RAM的數(shù)據(jù)傳送采用“MOV〞類指令,間接尋址存放器采用存放器R0或R1〔堆棧操作時采用SP〕;片外RAM的數(shù)據(jù)傳送采用“MOVX〞類指令,這時間接尋址存放器有兩種選擇,一是采用R0和R1作間址存放器,這時R0或R1提供低8位地址〔外部RAM多于256字節(jié)采用頁面方式訪問時,可由P2口未使用的I/O引腳提供高位地址〕;二是采用DPTR作為間址存放器。存放器間接尋址對應(yīng)的空間為:片內(nèi)RAM〔采用@R0,@R1或SP〕;片外RAM〔采用@R0,@R1或@DPTR〕。如:MOVA,@R0
指令編碼中直接給出操作數(shù)的尋址方式稱為立即尋址。在這種尋址方式中,緊跟在操作碼之后的操作數(shù)稱為立即數(shù)。立即數(shù)可以為一個字節(jié),也可以是兩個字節(jié),并要用符號“#〞來標(biāo)識。由于立即數(shù)是一個常數(shù),所以只能作為源操作數(shù)。立即尋址所對應(yīng)的尋址空間為:ROM3.2.4立即尋址如:MOVA,#50H
以一個基地址加上一個偏移量地址形成操作數(shù)地址的尋址方式稱為變址尋址。在這種尋址方式中,以數(shù)據(jù)指針DPTR或程序計數(shù)器PC作為基址存放器,累加器A作為偏移量存放器,基址存放器的內(nèi)容與偏移量存放器的內(nèi)容之和作為操作數(shù)地址。變址尋址所對應(yīng)的尋址空間為:ROM3.2.5變址尋址如:MOVCA,@A+DPTR
相對尋址是以程序計數(shù)器PC的當(dāng)前值〔指讀出該2字節(jié)或3字節(jié)的跳轉(zhuǎn)指令后,PC指向的下條指令的地址〕為基準(zhǔn),加上指令中給出的相對偏移量rel形成目標(biāo)地址的尋址方式。rel是一個帶符號的8位二進(jìn)制數(shù),取值范圍是-128~+127,以補(bǔ)碼形式置于操作碼之后存放。3.2.6相對尋址如:JCrel
;
rel=75H
對位地址中的內(nèi)容進(jìn)行操作的尋址方式稱為位尋址。采用位尋址指令的操作數(shù)是8位二進(jìn)制數(shù)中的某一位。指令中給出的是位地址。位尋址方式實(shí)質(zhì)屬于位的直接尋址。
尋址空間為:片內(nèi)RAM的20H~2FH單元中的128可尋址位;SFR的可尋址位。3.2.7位尋址習(xí)慣上,特殊功能存放器的尋址位常用符號位地址表示。如:CLRACC.0MOV30H,C3.3數(shù)據(jù)傳送類指令〔29條〕傳送類指令占有較大的比重。數(shù)據(jù)傳送是進(jìn)行數(shù)據(jù)處理的最根本的操作,這類指令一般不影響標(biāo)志存放器PSW的狀態(tài)。
傳送類指令可以分成兩大類。一是采用MOV操作符,稱為一般傳送指令;二是采用非MOV操作符,稱為特殊傳送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。
3.3.1一般傳送指令位傳送這條指令的功能是將源操作數(shù)data16〔通常是地址常數(shù)〕送入目的操作數(shù)DPTR中。源操作數(shù)的尋址方式為立即尋址。例如:執(zhí)行指令MOVDPTR,#1234H后〔DPH〕=12H,〔DPL〕=34H。位傳送在5種源字節(jié)中,只有#data不能用作目的字節(jié)。所以可以用4種目的字節(jié)為根底構(gòu)造4類指令。相應(yīng)的源字節(jié)選擇依據(jù)是:源字節(jié)與目的字節(jié)不相同〔除direct外〕;存放器尋址與存放器間接尋址間不相互傳送。1)以A為目的
這組指令的功能是把源字節(jié)送入累加器中。源字節(jié)的尋址方式分別為直接尋址、存放器間接尋址、存放器尋址和立即尋址四種根本尋址方式。例:假設(shè)〔R1〕=20H,〔20H〕=55H,執(zhí)行指令MOVA,@R1后,〔A〕=55H。2)以Rn
為目的
這組指令的功能是把源字節(jié)送入存放器Rn中。源字節(jié)的尋址方式分別為立即尋址、直接尋址和存放器尋址〔由于目的字節(jié)為工作存放器,所以源字節(jié)不能是工作存放器及其間址方式尋址〕。例:假設(shè)〔50H〕=40H,執(zhí)行指令MOVR6,50H后,〔R6〕=40H。3)以direct
為目的
這組指令的功能是把源字節(jié)送入direct中。源字節(jié)的尋址方式分別為立即尋址、直接尋址、存放器間接尋址和存放器尋址。例:假設(shè)〔R1〕=50H,〔50H〕=18H,執(zhí)行指令MOV40H,@R1后,〔40H〕=18H。4)以@Ri為目的
這組指令的功能是把源字節(jié)送入Ri內(nèi)容為地址的單元,源字節(jié)尋址方式為立即尋址、直接尋址和存放器尋址〔因目的字節(jié)采用存放器間接尋址,故源字節(jié)不能是存放器及其間址尋址〕。例:假設(shè)〔R1〕=30H,〔A〕=20H,執(zhí)行指令MOV@R1,A后,〔30H〕=20H。3.3.2特殊傳送指令特殊傳送指令的操作符為:MOVC、MOVX、PUSH、POP、XCH、XCHD和SWAP。功能分別為:ROM查表、外部RAM讀寫、堆棧操作和交換指令
查表
1)DPTR內(nèi)容為基址MOVCA,@A+DPTR;A←〔〔A〕+〔DPTR〕〕該指令首先執(zhí)行16位無符號數(shù)加法,將獲得的基址與變址之和作為16位的程序存儲器地址,然后將該地址單元的內(nèi)容傳送到累加器A。指令執(zhí)行后DPTR的內(nèi)容不變。2)PC內(nèi)容為基址MOVCA,@A+PC;A←〔〔A〕+〔PC〕〕取出該單字節(jié)指令后PC的內(nèi)容增1,以增1后的當(dāng)前值去執(zhí)行16位無符號數(shù)加法,將獲得的基址與變址之和作為16位的程序存儲器地址。然后將該地址單元的內(nèi)容傳送到累加器A。指令執(zhí)行后PC的內(nèi)容不變。2.讀寫片外RAM
1)讀片外RAMMOVXA,@DPTR;A←〔〔DPTR〕〕MOVXA,@Ri;A←〔〔Ri〕〕第一條指令以16位DPTR為間址存放器讀片外RAM,可以尋址整個64K字節(jié)的片外RAM空間。指令執(zhí)行時,在DPH中的高8位地址由P2口輸出,在DPL中的低8位地址由P0口分時輸出,并由ALE信號鎖存在地址鎖存器中。第二條指令以R0或R1為間址存放器,也可以讀整個64K字節(jié)的片外RAM空間。指令執(zhí)行時,低8位地址在R0或R1中由P0口分時輸出,ALE信號將地址信息鎖存在地址鎖存器中〔多于256字節(jié)的訪問,高位地址由P2口提供〕。
讀片外RAM的MOVX操作,使引腳輸出的信號選通片外RAM單元,相應(yīng)單元的數(shù)據(jù)從P0口讀入累加器中。2)寫片外RAMMOVX@DPTR,A;〔〔DPTR〕〕←〔A〕MOVX@Ri,A;〔〔Ri〕〕←〔A〕第一條指令以16位DPTR為間址存放器寫外部RAM,可以尋址整個64K字節(jié)的片外RAM空間。指令執(zhí)行時,在DPH中高8位地址由P2口輸出,在DPL中的低8位地址,由P0口分時輸出,并由ALE信號鎖存在地址鎖存器中。第二條指令以R0或R1為間址存放器,也可以寫整個64K字節(jié)的片外RAM空間。指令執(zhí)行時,低8位地址在R0或R1中由P0口分時輸出,ALE信號將地址信息鎖存在地址鎖存器中〔多于256字節(jié)的訪問,高位地址由P2口提供〕。寫片外RAM的“MOVX〞操作,使引腳的信號有效,累加器A的內(nèi)容從P0口輸出并寫入選通的相應(yīng)片外RAM單元。(外部I/O口操作類同〕3.堆棧操作堆棧是在內(nèi)部RAM中按“后進(jìn)先出〞的規(guī)那么組織的一片存儲區(qū)。此區(qū)的一端固定,稱為棧底;另一端是活動的,稱為棧頂。棧頂?shù)奈恢谩驳刂贰秤蓷V羔楽P指示〔即SP的內(nèi)容是棧頂?shù)牡刂贰?。?0C51中,堆棧的生長方向是向上的〔地址增大〕。系統(tǒng)復(fù)位時,SP的內(nèi)容為07H。通常用戶應(yīng)在系統(tǒng)初始化時對SP重新設(shè)置。SP的值越小,堆棧的深度越深。PUSHdirect;SP←〔SP〕+1,〔SP〕←〔direct〕POPdirect;direct←〔〔SP〕〕,SP←〔SP〕-1例:假設(shè)〔SP〕=07H,〔40H〕=88H,執(zhí)行指令PUSH40H后,〔SP〕=08H,〔08H〕=88H。4.數(shù)據(jù)交換例:假設(shè)〔R0〕=80H,〔A〕=20H。執(zhí)行指令XCHA,R0后,〔A〕=80H,〔R0〕=20H。對于單一的MOV類指令,傳送通常是單向的,即數(shù)據(jù)是從一處〔源〕到另一處〔目的〕的拷貝。而交換類指令完成的傳送是雙向的,是兩字節(jié)間或兩半字節(jié)間的雙向交換。
1)字節(jié)交換2)半字節(jié)交換
XCHD指令的功能是間址操作數(shù)的低半字節(jié)與A的低半字節(jié)內(nèi)容互換。SWAP指令的功能是累加器的上下4位互換。例:假設(shè)〔R0〕=30H,〔30H〕=67H,〔A〕=20H。執(zhí)行指令XCHDA,@R0指令后,〔A〕=27H,〔30H〕=60H。假設(shè)〔A〕=30H,執(zhí)行指令SWAPA后,〔A〕=03H。exchange交換,調(diào)換,兌換,交流,交易3.4算術(shù)運(yùn)算類指令〔24條〕算術(shù)運(yùn)算指令可以完成加、減、乘、除及加加1和減1等運(yùn)算。這類指令多數(shù)以A為源操作數(shù)之一,同時又使A為目的操作數(shù)。
進(jìn)位〔借位〕標(biāo)志CY為無符號整數(shù)的多字節(jié)加法、減法、移位等操作提供了方便;溢出標(biāo)志OV可方便的控制補(bǔ)碼運(yùn)算;輔助進(jìn)位標(biāo)志AC用于BCD碼運(yùn)算。算術(shù)運(yùn)算操作將影響PSW中的OV、CY、AC和P等。
3.4.1加法1.不帶進(jìn)位加CY:和的D7位有進(jìn)位時,〔CY〕=1;否那么,〔CY〕=0。AC:和的D3位有進(jìn)位時,〔AC〕=1;否那么,〔AC〕=0。OV:和的D7、D6位只有一個有進(jìn)位時,〔OV〕=1;溢出表示運(yùn)算的結(jié)果超出了數(shù)值所允許的范圍。如:兩個正數(shù)相加結(jié)果為負(fù)數(shù)或兩個負(fù)數(shù)相加結(jié)果為正數(shù)時屬于錯誤結(jié)果,此時〔OV〕=1。P:累加器ACC中“1〞的個數(shù)為奇數(shù)時,〔P〕=1;為偶數(shù)時,〔P〕=0。例假設(shè)〔A〕=84H,〔30H〕=8DH,執(zhí)行指令A(yù)DDA,30H之后,由于:即:〔A〕=11H,〔CY〕=1,〔AC〕=1,〔OV〕=1〔D7有進(jìn)位,D6無進(jìn)位〕,〔P〕=0。2.帶進(jìn)位加
指令的功能是把源操作數(shù)與累加器A的內(nèi)容相加再與進(jìn)位標(biāo)志CY的值相加,結(jié)果送入目的操作數(shù)A中。加的進(jìn)位標(biāo)志CY的值是在該指令執(zhí)行之前已經(jīng)存在的進(jìn)位標(biāo)志的值,而不是執(zhí)行該指令過程中產(chǎn)生的進(jìn)位。3.增1指令的功能是把源操作數(shù)的內(nèi)容加1,結(jié)果再送回原單元。這些指令僅INCA影響P標(biāo)志。其余指令都不影響標(biāo)志位的狀態(tài)。
4.十進(jìn)制調(diào)整
指令的功能是對累加器A中剛進(jìn)行的兩個BCD碼的加法的結(jié)果進(jìn)行十進(jìn)制調(diào)整。兩個壓縮的BCD碼按二進(jìn)制相加后,必須經(jīng)過調(diào)整方能得到正確的壓縮BCD碼的和。DAA
調(diào)整要完成的任務(wù)是:〔1〕當(dāng)累加器A中的低4位數(shù)出現(xiàn)了非BCD碼〔1010~1111〕或低4位產(chǎn)生進(jìn)位〔AC=1〕,那么應(yīng)在低4位加6調(diào)整,以產(chǎn)生低4位正確的BCD結(jié)果?!?〕當(dāng)累加器A中的高4位數(shù)出現(xiàn)了非BCD碼〔1010~1111〕或高4位產(chǎn)生進(jìn)位〔CY=1〕,那么應(yīng)在高4位加6調(diào)整,以產(chǎn)生高4位正確的BCD結(jié)果。十進(jìn)制調(diào)整指令執(zhí)行后,PSW中的CY表示結(jié)果的百位值。例假設(shè)〔A〕=01010110B,表示的BCD碼為,〔R2〕=01100111B,表示的BCD碼為,〔CY〕=0。執(zhí)行以下指令:ADDA,R2DAA由于〔A〕=00100011B,即,且〔CY〕=1,即結(jié)果為BCD數(shù)123。應(yīng)該注意,DA指令不能對減法進(jìn)行十進(jìn)制調(diào)整。3.4.2減法1.帶借位減CY:差的位7需借位時,〔CY〕=1;否那么,〔CY〕=0。AC:差的位3需借位時,〔AC〕=1;否那么,〔AC〕=0。OV:假設(shè)位6有借位而位7無借位或位7有借位而位6無借位時,〔OV〕=1。如要用此組指令完成不帶借位減法,只需先清CY為0。例假設(shè)〔A〕=C9H,〔R2〕=54H,〔CY〕=1,執(zhí)行指令SUBBA,R2之后,由于:即:〔A〕=74H,〔CY〕=0,〔AC〕=1,〔OV〕=1〔位6有借位,位7無借位〕,〔P〕=0。2.減1這組指令的功能是把操作數(shù)的內(nèi)容減1,結(jié)果再送回原單元。這組指令僅DECA影響P標(biāo)志。其余指令都不影響標(biāo)志位的狀態(tài)。3.4.3乘法MULAB;累加器A與B存放器相乘該指令的功能是將累加器A與存放器B中的無符號8位二進(jìn)制數(shù)相乘,乘積的低8位留在累加器A中,高8位存放在存放器B中。當(dāng)乘積大于FFH時,溢出標(biāo)志位〔OV〕=1。而標(biāo)志CY總是被清0。例假設(shè)〔A〕=50H,〔B〕=A0H,執(zhí)行指令MULAB之后,〔A〕=00H,〔B〕=32H,〔OV〕=1,〔CY〕=0。3.4.4除法DIVAB;累加器A除以存放器B該指令的功能是將累加器A中的無符號8位二進(jìn)制數(shù)除以存放器B中的無符號8位二進(jìn)制數(shù),商的整數(shù)局部存放在累加器A中,余數(shù)局部存放在存放器B中。當(dāng)除數(shù)為0時,那么結(jié)果的A和B的內(nèi)容不定,且溢出標(biāo)志位〔OV〕=1。而標(biāo)志CY總是被清0。例假設(shè)〔A〕=FBH〔251〕,〔B〕=12H〔18〕,執(zhí)行指令DIVAB之后,〔A〕=0DH,〔B〕=11H,〔OV〕=0,〔CY〕=0。3.5邏輯運(yùn)算與循環(huán)類指令〔24條〕
邏輯運(yùn)算指令可以完成與、或、異或、清0和取反操作,當(dāng)以累加器A為目的操作數(shù)時,對P標(biāo)志有影響;累加器清0操作對P標(biāo)志有影響。
循環(huán)指令是對累加器A的循環(huán)移位操作,包括左、右方向以及帶與不帶進(jìn)位位等移位方式,移位操作時,帶進(jìn)位的循環(huán)移位對CY和P標(biāo)志有影響;
3.5.1邏輯與
前2條指令的功能是把源操作數(shù)與直接地址指示的單元內(nèi)容相與,結(jié)果送入直接地址指示的單元。后4條指令的功能是把源操作數(shù)與累加器A的內(nèi)容相與,結(jié)果送入累加器A中。例假設(shè)〔A〕=C3H,〔R0〕=AAH,執(zhí)行指令A(yù)NLA,R0之后,〔A〕=82H。前2條指令的功能是把源操作數(shù)與直接地址指示的單元內(nèi)容相或,結(jié)果送入直接地址指示的單元。后4條指令的功能是把源操作數(shù)與累加器A的內(nèi)容相或,結(jié)果送入累加器A中。3.5.2邏輯或例假設(shè)〔A〕=C3H,〔R0〕=55H,執(zhí)行指令ORLA,R0之后,〔A〕=D7H。
3.5.3邏輯異或
前2條指令的功能是把源操作數(shù)與直接地址指示的單元內(nèi)容異或,結(jié)果送入直接地址指示的單元。后4條指令的功能是把源操作數(shù)與累加器A的內(nèi)容異或,結(jié)果送入累加器A中。例假設(shè)〔A〕=C3H,〔R0〕=AAH,執(zhí)行指令XRLA,R0之后,〔A〕=69H。
3.5.4累加器清0和取反
;A←0
;A←
這兩條指令的功能分別是把累加器A的內(nèi)容清0和取反,結(jié)果仍在A中。例假設(shè)〔A〕=A5H,執(zhí)行指令CLRA之后,〔A〕=00H。
3.5.5累加器循環(huán)移位
有時“累加器A內(nèi)容乘2〞的任務(wù)可以利用指令RLCA方便地完成。例:假設(shè)〔A〕=BDH=10111101B,〔CY〕=0。執(zhí)行指令RLCA后,〔CY〕=1,〔A〕=01111010B=7AH,〔CY〕=1。結(jié)果為:17AH〔378〕=2×BDH〔189〕。3.6控制轉(zhuǎn)移類指令〔17條〕
通常情況下,程序的執(zhí)行是順序進(jìn)行的,但也可以根據(jù)需要改變程序的執(zhí)行順序,這種情況稱作程序轉(zhuǎn)移。
控制程序的轉(zhuǎn)移要利用轉(zhuǎn)移指令。80C51的轉(zhuǎn)移指令有無條件轉(zhuǎn)移、條件轉(zhuǎn)移及子程序調(diào)用與返回等。1.短跳轉(zhuǎn)3.6.1無條件轉(zhuǎn)移
AJMPaddr11;PC←〔PC〕+2,;PC10~0←addr11該指令執(zhí)行時,先將PC的內(nèi)容加2〔這是PC指向的是AJMP的下一條指令〕,然后把指令中11位地址碼傳送到PC10~0,而PC15~11保持原內(nèi)容不變。在目標(biāo)地址的11位中,前3位為頁地址,后8位為頁內(nèi)地址〔每頁含256個單元〕。當(dāng)前PC的高5位〔即下條指令的存儲地址的高5位〕可以確定32個2KB段之一。所以,AJMP指令的轉(zhuǎn)移范圍為包含AJMP下條指令在內(nèi)的2KB區(qū)間。2.長跳轉(zhuǎn)LJMPaddr16;PC←addr16第一字節(jié)為操作碼,該指令執(zhí)行時,將指令的第二、三字節(jié)地址碼分別裝入指令計數(shù)器PC的高8位和低8位中,程序無條件地轉(zhuǎn)移到指定的目標(biāo)地址去執(zhí)行。LJMP提供的是16位地址,因此程序可以轉(zhuǎn)向64KB的程序存儲器地址空間的任何單元。例假設(shè)標(biāo)號“NEWADD〞表示轉(zhuǎn)移目標(biāo)地址1234H。執(zhí)行指令LJMPNEWADD時,兩字節(jié)的目標(biāo)地址將裝入PC中,使程序轉(zhuǎn)向目標(biāo)地址1234H處運(yùn)行。3.相對轉(zhuǎn)移SJMPrel;PC←〔PC〕+2,PC←〔PC〕+rel第一字節(jié)為操作碼,第二字節(jié)為相對偏移量rel,rel是一個帶符號的偏移字節(jié)數(shù)〔2的補(bǔ)碼〕,取值范圍為+127~-128〔00H~7FH對應(yīng)表示0~+127,80H~FFH對應(yīng)表示-128~-1〕。負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。rel可以是一個轉(zhuǎn)移目標(biāo)地址的標(biāo)號,由匯編程序在匯編過程中自動計算偏移地址,并填入指令代碼中。在手工匯編時,可用轉(zhuǎn)移目標(biāo)地址減轉(zhuǎn)移指令所在的源地址,再減轉(zhuǎn)移指令字節(jié)數(shù)2得到偏移字節(jié)數(shù)rel。例假設(shè)標(biāo)號“NEWADD〞表示轉(zhuǎn)移目標(biāo)地址0123H,PC的當(dāng)前值為0100H。執(zhí)行指令SJMPNEWADD后,程序?qū)⑥D(zhuǎn)向0123H處執(zhí)行〔此時rel=0123H-〔0100+2〕=21H〕。4.散轉(zhuǎn)移JMP@A+DPTR;PC←〔PC〕+1,PC←〔A〕+〔DPTR〕該指令具有散轉(zhuǎn)功能,可以代替許多判別跳轉(zhuǎn)指令。其轉(zhuǎn)移地址由數(shù)據(jù)指針DPTR的16位數(shù)和累加器A的8位數(shù)進(jìn)行無符號數(shù)相加形成,并直接裝入PC。該指令執(zhí)行時對標(biāo)志位無影響。例有一段程序如下:MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3當(dāng)〔A〕=00H時,程序?qū)⑥D(zhuǎn)到ROUT0處執(zhí)行;當(dāng)〔A〕=02H時,程序?qū)⑥D(zhuǎn)到ROUT1處執(zhí)行;其余類推。3.6.2條件轉(zhuǎn)移
1.累加器判0轉(zhuǎn)移
指令的功能是對累加器A的內(nèi)容為0和不為0進(jìn)行檢測并轉(zhuǎn)移。當(dāng)不滿足各自的條件時,程序繼續(xù)往下執(zhí)行。當(dāng)各自的條件滿足時,程序轉(zhuǎn)向指定的目標(biāo)地址。目標(biāo)地址的計算與SJMP指令情況相同。指令執(zhí)行時對標(biāo)志位無影響。例假設(shè)累加器A原始內(nèi)容為00H,那么:JNZL1;由于A的內(nèi)容為00H,所以程序往下執(zhí)行INCA;JNZL2;由于A的內(nèi)容已不為0,所以程序轉(zhuǎn)向L2處執(zhí)行2.比較不相等轉(zhuǎn)移這組指令的功能是對指定的目的字節(jié)和源字節(jié)進(jìn)行比較,假設(shè)它們的值不相等那么轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)地址為當(dāng)前的PC值加3后,再加指令的第三字節(jié)偏移量rel;假設(shè)目的字節(jié)的內(nèi)容大于源字節(jié)的內(nèi)容,那么進(jìn)位標(biāo)志清0;假設(shè)目的字節(jié)的內(nèi)容小于源字節(jié)的內(nèi)容,那么進(jìn)位標(biāo)志置1;假設(shè)目的字節(jié)的內(nèi)容等于源字節(jié)的內(nèi)容,程序?qū)⒗^續(xù)往下執(zhí)行。3.減1不為0轉(zhuǎn)移
這組指令每執(zhí)行一次,便將目的操作數(shù)的循環(huán)控制單元的內(nèi)容減1,并判其是否為0。假設(shè)不為0,那么轉(zhuǎn)移到目標(biāo)地址繼續(xù)循環(huán);假設(shè)為0,那么結(jié)束循環(huán),程序往下執(zhí)行。例有一段程序如下:MOV23H,#0AHCLRALOOPX:ADDA,23HDJNZ23H,LOOPXSJMP$該程序執(zhí)行后:〔A〕=10+9+8+7+6+5+4+3+2+1=37H3.6.3調(diào)用與轉(zhuǎn)移
這兩條指令可以實(shí)現(xiàn)子程序的短調(diào)用和長調(diào)用。目標(biāo)地址的形成方式與AJMP和LJMP相似。這兩條指令的執(zhí)行不影響任何標(biāo)志。
1.調(diào)用
ACALL指令執(zhí)行時,被調(diào)用的子程序的首址必須設(shè)在包含當(dāng)前指令〔即調(diào)用指令的下一條指令〕的第一個字節(jié)在內(nèi)的2K字節(jié)范圍內(nèi)的程序存儲器中。LCALL指令執(zhí)行時,被調(diào)用的子程序的首址可以設(shè)在64K字節(jié)范圍內(nèi)的程序存儲器空間的任何位置。例假設(shè)〔SP〕=07H,標(biāo)號“XADD〞表示的實(shí)際地址為0345H,PC的當(dāng)前值為0123H。執(zhí)行指令A(yù)CALLXADD后,〔PC〕+2=0125H,其低8位的25H壓入堆棧的08H單元,其高8位的01H壓入堆棧的09H單元。〔PC〕=0345H,程序轉(zhuǎn)向目標(biāo)地址0345H處執(zhí)行。RET指令的功能是從堆棧中彈出由調(diào)用指令壓入堆棧保護(hù)的斷點(diǎn)地址,并送入指令計數(shù)器PC,從而結(jié)束子程序的執(zhí)行。程序返回到斷點(diǎn)處繼續(xù)執(zhí)行。2.返回
RETI指令是專用于中斷效勞程序返回的指令,除正確返回中斷斷點(diǎn)處執(zhí)行主程序以外,并有去除內(nèi)部相應(yīng)的中斷狀態(tài)存放器〔以保證正確的中斷邏輯〕的功能。3.6.4空操作
NOP
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年貴州事業(yè)單位聯(lián)考上海交通大學(xué)醫(yī)學(xué)院附屬上海兒童醫(yī)學(xué)中心貴州醫(yī)院招聘16人備考題庫含答案詳解(奪分金卷)
- 2026廣清經(jīng)濟(jì)特別合作區(qū)廣佛(佛岡)產(chǎn)業(yè)園管委會采購和財政評審監(jiān)管崗雇員招聘1人備考題庫(廣東)帶答案詳解(培優(yōu))
- 2026上半年安徽事業(yè)單位聯(lián)考合肥市巢湖市招聘22人備考題庫附參考答案詳解(能力提升)
- 2026四川綿陽市三臺縣潼川第四幼兒園教師招聘備考題庫附答案詳解(黃金題型)
- 2026屆廣東省廣州市天河區(qū)高一數(shù)學(xué)第一學(xué)期期末統(tǒng)考試題含解析
- 加氣混凝土配料澆注工崗前內(nèi)部控制考核試卷含答案
- 速錄師安全生產(chǎn)規(guī)范評優(yōu)考核試卷含答案
- 強(qiáng)化地板備料工保密知識考核試卷含答案
- 化工添加劑生產(chǎn)工沖突解決測試考核試卷含答案
- 機(jī)械手表裝配工崗前基礎(chǔ)應(yīng)用考核試卷含答案
- 農(nóng)投集團(tuán)安全生產(chǎn)制度
- 近五年貴州中考物理真題及答案2025
- 2025年黑龍江省大慶市中考數(shù)學(xué)試卷
- 山東煙草2026年招聘(197人)考試備考試題及答案解析
- 二級醫(yī)院的DRGs培訓(xùn)課件
- 空芯光纖行業(yè)分析報告
- 置業(yè)顧問崗位招聘考試試卷及答案
- 大眾試駕協(xié)議書
- 2026年醫(yī)療行業(yè)患者滿意度改善方案
- GB/T 4605-2025滾動軸承推力滾針和保持架組件及推力墊圈
- 老年機(jī)構(gòu)養(yǎng)老心理健康評估方案
評論
0/150
提交評論