浙江大學(xué)微機(jī)原理與接口技術(shù)第三章 80C51單片微機(jī)的指令系統(tǒng)_第1頁(yè)
浙江大學(xué)微機(jī)原理與接口技術(shù)第三章 80C51單片微機(jī)的指令系統(tǒng)_第2頁(yè)
浙江大學(xué)微機(jī)原理與接口技術(shù)第三章 80C51單片微機(jī)的指令系統(tǒng)_第3頁(yè)
浙江大學(xué)微機(jī)原理與接口技術(shù)第三章 80C51單片微機(jī)的指令系統(tǒng)_第4頁(yè)
浙江大學(xué)微機(jī)原理與接口技術(shù)第三章 80C51單片微機(jī)的指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩102頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 80C51單片微機(jī)的指令系統(tǒng)浙江大學(xué)電氣學(xué)院彭勇剛第三章第三章 單片微機(jī)的基本結(jié)構(gòu)單片微機(jī)的基本結(jié)構(gòu)一、一、MCS-51系列單片機(jī)匯編指令基本情況系列單片機(jī)匯編指令基本情況51系列單片機(jī)指令集含有系列單片機(jī)指令集含有111條條指令指令 三 指令格式及常用符號(hào)一)、單字節(jié)指令一)、單字節(jié)指令1 1、8 8位編碼僅為操作碼位編碼僅為操作碼:如:如:INC A。該指令的編碼為:該指令的編碼為:0000 0100B,其十六進(jìn)制表示為其十六進(jìn)制表示為04H,累加器,累加器A隱含在操作碼隱含在操作碼中。指令的功能是累加器中。指令的功能是累加器A的內(nèi)容加的內(nèi)容加1。 注意:在指令中用注意:在指令中用

2、“A”表示累加器,而用表示累加器,而用“ACC”表示累加器對(duì)應(yīng)的地址(表示累加器對(duì)應(yīng)的地址(E0H)。)。 高高5位位為操作碼,為操作碼,低低3位位為存放操作數(shù)的寄存器編為存放操作數(shù)的寄存器編碼。如:碼。如:MOV A,R0 編碼編碼為為1110 1000B,其十六進(jìn)制表示為,其十六進(jìn)制表示為E8H(低(低3位位000為寄存器為寄存器R0的編碼)。的編碼)。功能功能是將當(dāng)前是將當(dāng)前工作寄存器工作寄存器R0中的數(shù)據(jù)傳送到累加器中的數(shù)據(jù)傳送到累加器A中。中。 28位編碼含有操作碼和寄存器編碼位編碼含有操作碼和寄存器編碼二)、雙字節(jié)指令二)、雙字節(jié)指令 第一字節(jié)第一字節(jié)表示操作碼,表示操作碼,第二個(gè)

3、字節(jié)第二個(gè)字節(jié)表示參表示參與操作的數(shù)據(jù)或數(shù)據(jù)存放的地址。與操作的數(shù)據(jù)或數(shù)據(jù)存放的地址。如:如:MOV A,#50H 編碼編碼為為0111 0100B,0101 0000B。其十。其十六進(jìn)制表示為六進(jìn)制表示為74H,50H。功能功能是將立即數(shù)是將立即數(shù)“50H”傳送到累加器傳送到累加器A中。中。 三、三字節(jié)指令三、三字節(jié)指令 指令的第一字節(jié)指令的第一字節(jié)表示該指令的操作碼,表示該指令的操作碼,后后兩個(gè)字節(jié)兩個(gè)字節(jié)表示參與操作的數(shù)據(jù)或數(shù)據(jù)存放的表示參與操作的數(shù)據(jù)或數(shù)據(jù)存放的地址。如:地址。如:MOV 20HMOV 20H,#50H#50H 編碼編碼為為0111 0101B0111 0101B,00

4、10 0000B0010 0000B,0101 0101 0000B0000B。其十六進(jìn)制表示為。其十六進(jìn)制表示為75H75H,20H20H,50H50H。功能功能是將立即數(shù)是將立即數(shù)“50H”50H”傳送到內(nèi)部傳送到內(nèi)部RAM RAM 的的20H20H單元中單元中。四、常用符號(hào)四、常用符號(hào) RnRidirect #data #data16 addr16 addr11 由由尋址的單元中的內(nèi)容為地址的這尋址的單元中的內(nèi)容為地址的這個(gè)單元中的內(nèi)容個(gè)單元中的內(nèi)容 3.2 3.2 匯編語(yǔ)言的尋址方式匯編語(yǔ)言的尋址方式指令執(zhí)行過(guò)程中大多數(shù)指令執(zhí)行過(guò)程中大多數(shù)情況要用到操作數(shù),情況要用到操作數(shù),操作數(shù)在哪

5、里?操作數(shù)在哪里?如何找到操作數(shù)?如何找到操作數(shù)?確定確定“操作數(shù)操作數(shù)”或或“操操作數(shù)的地址作數(shù)的地址”的基本方的基本方式式七種尋址方式:七種尋址方式:立即尋址立即尋址直接尋址直接尋址寄存器尋址寄存器尋址寄存器間接尋址寄存器間接尋址變址尋址變址尋址相對(duì)尋址相對(duì)尋址位尋址位尋址該尋址方式下的指令中會(huì)該尋址方式下的指令中會(huì)直接給出操作數(shù)直接給出操作數(shù),稱(chēng)為,稱(chēng)為立立即操作數(shù),即操作數(shù),可以是可以是 8位或位或16位數(shù),前綴符號(hào)是位數(shù),前綴符號(hào)是“#”例如:例如:MOV A,# 3AH;A#3AH 74HA 操作碼操作碼立即數(shù)立即數(shù)程序存儲(chǔ)器程序存儲(chǔ)器PCPC+13AH3AHMOV DPTR,#

6、0123H ;DPTR#0123H90H01H23H01H23HPCPC+1PC+2操作碼操作碼高位立即數(shù)高位立即數(shù)低位立即數(shù)低位立即數(shù)程序存儲(chǔ)器程序存儲(chǔ)器SFRDPHDPL該尋址方式下的指令中會(huì)該尋址方式下的指令中會(huì)直接給出操作數(shù)地址直接給出操作數(shù)地址,能進(jìn)行直接尋址的存儲(chǔ)空間有能進(jìn)行直接尋址的存儲(chǔ)空間有SFRSFR寄存器和內(nèi)部寄存器和內(nèi)部數(shù)據(jù)數(shù)據(jù)RAM(00H-7FH)RAM(00H-7FH)。例如:例如:MOV PSW,# 20H; PSW#20H例如:例如:MOV A,70H ;A(70H)74H70HPCPC+1操作碼操作碼直接地址直接地址程序存儲(chǔ)器程序存儲(chǔ)器內(nèi)部?jī)?nèi)部RAM70HAX

7、XXX操作數(shù)在指定的操作數(shù)在指定的寄存器寄存器中,只要在語(yǔ)句中指明寄存中,只要在語(yǔ)句中指明寄存器,就找到了操作數(shù)。器,就找到了操作數(shù)。 例如:例如:MOV A, R5 ; A(R5)101PC操作碼操作碼程序存儲(chǔ)器程序存儲(chǔ)器內(nèi)部?jī)?nèi)部RAMR5AXXXXR6R71101以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操作數(shù)以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操作數(shù)的尋址方式的尋址方式 例如:例如:MOV A, R1 ; A(R1)將將R1R1的內(nèi)容送作為地址,將該地址所對(duì)應(yīng)的的內(nèi)容送作為地址,將該地址所對(duì)應(yīng)的RAMRAM單單元的內(nèi)容送元的內(nèi)容送累加器累加器。1PC操作碼操作碼程序存儲(chǔ)器程序存儲(chǔ)器內(nèi)部?jī)?nèi)部

8、RAMR1AXX68H111001XX68HMOV R0,A ;(;(R0)A MOVX A,R1 ;A(R1) MOVX DPTR,A ;外部;外部RAM(DPTR)APUSH A;SP(SP)+1,(,(SP)(A)把把A A的內(nèi)容送到以的內(nèi)容送到以R0R0的內(nèi)容為地址的內(nèi)部的內(nèi)容為地址的內(nèi)部RAMRAM單元中單元中把以把以R1R1的內(nèi)容為地址的的內(nèi)容為地址的片外數(shù)據(jù)片外數(shù)據(jù)RAMRAM單元(小于單元(小于256B256B)中)中的內(nèi)容送到的內(nèi)容送到A A中。中。把把A A中的內(nèi)容送到以中的內(nèi)容送到以DPTRDPTR的內(nèi)容為地址的的內(nèi)容為地址的片外數(shù)據(jù)片外數(shù)據(jù)RAMRAM中中變址尋址是以某

9、個(gè)寄存器的內(nèi)容為變址尋址是以某個(gè)寄存器的內(nèi)容為基本地址基本地址,然后,然后在這個(gè)基本地址的基礎(chǔ)上加上在這個(gè)基本地址的基礎(chǔ)上加上地址偏移量地址偏移量才是真正才是真正的操作數(shù)所在單元的地址的操作數(shù)所在單元的地址 一般采用一般采用DPTRDPTR或者或者PCPC的內(nèi)的內(nèi)容作為容作為基本地址基本地址累加器累加器A A的內(nèi)容作為的內(nèi)容作為地址地址偏移量偏移量實(shí)際操作數(shù)的地址實(shí)際操作數(shù)的地址=(DPTR)+(A)或)或?qū)嶋H操作數(shù)的地址實(shí)際操作數(shù)的地址=(PC)+(A)例如:例如:MOVC A, A+DPTR 操作碼操作碼程序存儲(chǔ)器程序存儲(chǔ)器SFRA100100111EH02H030FHXXDPHDPLF1

10、H02F1H02F1H+1EH=030FHXXA(A)+(DPTR)主要實(shí)現(xiàn)程序的分支轉(zhuǎn)移主要實(shí)現(xiàn)程序的分支轉(zhuǎn)移 。相對(duì)尋址是以相對(duì)尋址是以PC當(dāng)前值當(dāng)前值為基址(為基址( PCPC當(dāng)前值是執(zhí)當(dāng)前值是執(zhí)行完當(dāng)前指令后的值,也就是當(dāng)前指令的行完當(dāng)前指令后的值,也就是當(dāng)前指令的PCPC值值+ +指指令所占的字節(jié)數(shù)令所占的字節(jié)數(shù)),加上指令中給出的相對(duì)偏移),加上指令中給出的相對(duì)偏移量量rel形成有效的轉(zhuǎn)移地址,即:形成有效的轉(zhuǎn)移地址,即:目的地址目的地址 = 源地址源地址 + 轉(zhuǎn)移指令字節(jié)數(shù)轉(zhuǎn)移指令字節(jié)數(shù) + rel60HPC操作碼操作碼程序存儲(chǔ)器程序存儲(chǔ)器PC0102H30HXX0100H010

11、1H0102HPC0132H偏移量偏移量0102H +30H= 0132Hrel=30H0132H例如:例如: JZ 30H當(dāng)當(dāng)A=0時(shí),時(shí),PCPC+2+rel當(dāng)當(dāng)A0時(shí),時(shí),PCPC+2 /程序順序執(zhí)行程序順序執(zhí)行MCS-51系列單片機(jī)中有專(zhuān)用的位運(yùn)算指令,可以系列單片機(jī)中有專(zhuān)用的位運(yùn)算指令,可以對(duì)位尋址區(qū)的每一個(gè)位進(jìn)行數(shù)據(jù)傳送、邏輯運(yùn)算等對(duì)位尋址區(qū)的每一個(gè)位進(jìn)行數(shù)據(jù)傳送、邏輯運(yùn)算等操作操作該指令屬于位操作指令,作用是將該指令屬于位操作指令,作用是將位地址為位地址為07H07H的位單元的位單元( (字字節(jié)地址節(jié)地址20H20H單元的單元的D7D7位位) )傳送到傳送到位累加器位累加器C C

12、中中例如:例如:MOV C, 07H ; C(07H)PC操作碼操作碼程序存儲(chǔ)器程序存儲(chǔ)器20HA2H00PC+107HPSWX07SFRX3.3 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令(28條條)將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源源操作數(shù)不變操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。,目的操作數(shù)被源操作數(shù)取代。 片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送: (MOV16條條)訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器: (MOVX4條條)讀程序存儲(chǔ)器讀程序存儲(chǔ)器: (MOVC2條條)數(shù)據(jù)交換數(shù)據(jù)交換: (XCH,XCHD,SWAP5條條)堆棧操作堆棧操作: (PUSH,PO

13、P2條條)片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令: (MOV16條條)一、以累加器一、以累加器A為目的操作數(shù)指令為目的操作數(shù)指令MOV A,Rn;A (Rn)MOV A,direct;A(direct)MOV A,Ri ;A(Ri)MOV A,#data;A #data源操作數(shù)尋源操作數(shù)尋址方式?址方式?這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入累這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入累加器加器A,源操作數(shù)不變?cè)床僮鲾?shù)不變,目的操作數(shù),目的操作數(shù)A被源操作數(shù)被源操作數(shù)取代,所以這個(gè)取代,所以這個(gè)“送送”的過(guò)程實(shí)質(zhì)上是的過(guò)程實(shí)質(zhì)上是復(fù)制復(fù)制 練一練:若(練一練:若(A)= 8CH,

14、(,(R0)=(35H),),(R6) = 57H,(,(35H)=7AH,(,(70H)=F3H,執(zhí)行下列指令后,累加器,執(zhí)行下列指令后,累加器A的內(nèi)容各的內(nèi)容各為多少?為多少?MOV A,R6 ;MOV A,70H ;MOV A,R0 ;MOV A,#78H ;A = 57HA = F3HA = 7AHA = 78H片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令: (MOV16條條)片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令: (MOV16條條)二、以寄存器二、以寄存器Rn為目的操作數(shù)的指令為目的操作數(shù)的指令MOV Rn,A;Rn AMOV Rn,direct;Rn (direct

15、) MOV Rn,#data;Rn #data這組指令的功能是把源操作數(shù)指定的內(nèi)容復(fù)制到當(dāng)這組指令的功能是把源操作數(shù)指定的內(nèi)容復(fù)制到當(dāng)前的工作寄存器組的寄存器前的工作寄存器組的寄存器R0R7中的某一個(gè)中的某一個(gè) 源操作數(shù)尋源操作數(shù)尋址方式?址方式?片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令: (MOV16條條)三、以直接地址三、以直接地址direct為目的操作數(shù)的指令為目的操作數(shù)的指令MOV direct,A; direct AMOV direct,direct; direct(direct)MOV direct,#data; direct #dataMOV direct,Rn;dire

16、ct (Rn)MOV direct,Ri;direct (Ri)源操作數(shù)尋源操作數(shù)尋址方式?址方式?這組指令的功能是把源操作數(shù)所指定的內(nèi)容復(fù)制到由這組指令的功能是把源操作數(shù)所指定的內(nèi)容復(fù)制到由直接地址指出的片內(nèi)直接地址指出的片內(nèi)RAM單元和特殊功能寄存器中單元和特殊功能寄存器中 片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令: (MOV16條條)練一練:若練一練:若R1=30H,(,(30H)=13H,R3 = 15H,分別分析執(zhí)行以下指令后的,分別分析執(zhí)行以下指令后的結(jié)果。結(jié)果。MOV 60H,R3 MOV 40H,R1 ;(;(60H)=15H;(;(40H)=13H片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送

17、指令片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令: (MOV16條條)四、以間接地址四、以間接地址Ri為目的操作數(shù)的指令為目的操作數(shù)的指令MOV Ri,A;(;(Ri) AMOV Ri,direct;(;(Ri) (direct)MOV Ri,#data;(;(Ri) #data這組指令的功能是把源操作數(shù)所指定的內(nèi)容復(fù)制到以這組指令的功能是把源操作數(shù)所指定的內(nèi)容復(fù)制到以R0或或R1的內(nèi)容為地址的片內(nèi)的內(nèi)容為地址的片內(nèi)RAM的單元中的單元中 源操作數(shù)尋源操作數(shù)尋址方式?址方式?片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令: (MOV16條條)例如:設(shè)(例如:設(shè)(30H)=6FH,R1=40H,分析,分析執(zhí)行執(zhí)行

18、MOV R1,30H后的結(jié)果。后的結(jié)果。30H單元中數(shù)據(jù)取出送入單元中數(shù)據(jù)取出送入R1間接尋址的間接尋址的40H單元,單元,故指令執(zhí)行的結(jié)果是(故指令執(zhí)行的結(jié)果是(40H)=6FH 片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令片內(nèi)數(shù)據(jù)存儲(chǔ)器間傳送指令: (MOV16條條)五、以五、以DPTR為目的操作數(shù)的指令為目的操作數(shù)的指令 MOV DPTR,#data16 ;DPTR #data16這條指令的功能是把這條指令的功能是把16位常數(shù)送入位常數(shù)送入DPTR,高,高8為送為送DPH,低,低8位送位送DPL。這是唯一一條這是唯一一條16位立即數(shù)傳位立即數(shù)傳送指令送指令 。例如執(zhí)行例如執(zhí)行 MOV DPTR,#2000H

19、 后,后,(DPTR)= 2000H 目的操作數(shù)目的操作數(shù)尋址方式?尋址方式?訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器指令:訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器指令: (MOVX4條條)這類(lèi)指令實(shí)現(xiàn)對(duì)片外這類(lèi)指令實(shí)現(xiàn)對(duì)片外RAM的的訪問(wèn),這些指令的的的訪問(wèn),這些指令的特點(diǎn):特點(diǎn):(1)必須通過(guò)累加器)必須通過(guò)累加器A;(;(2)操作碼助記)操作碼助記符是符是MOVXMOVX A,DPTR;A (DPTR)MOVX DPTR,A;(;(DPTR) ADPTR作為片外作為片外RAM的的16位地址指針位地址指針,尋址范圍,尋址范圍64KB,通過(guò),通過(guò)P0和和P2進(jìn)行訪問(wèn)。進(jìn)行訪問(wèn)。Ri是用來(lái)訪問(wèn)低位片外是用來(lái)訪問(wèn)低位片外RAM的的地址指針

20、地址指針,尋址范圍,尋址范圍是片外是片外RAM的低的低256個(gè)字節(jié),通過(guò)個(gè)字節(jié),通過(guò)P0口進(jìn)行訪問(wèn)??谶M(jìn)行訪問(wèn)。MOVX A,Ri ;A (Ri)MOVX Ri,A ;(;(Ri) A訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器指令:訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器指令: (MOVX4條條)練習(xí)練習(xí)1:若(:若(R1) = 26H,片外(,片外(26H)= 48H,分析指令:分析指令:MOVX A,R1執(zhí)行之后的結(jié)果。執(zhí)行之后的結(jié)果。練習(xí)練習(xí)2:若(:若(DPTR)= 2034H,(,(A)= 10H,分析,分析執(zhí)行指令:執(zhí)行指令:MOVX DPTR,A 之后的結(jié)果。之后的結(jié)果。把片外把片外RAM的的26H單元的內(nèi)容送入累加器,單元

21、的內(nèi)容送入累加器,(A)=48H把把A的內(nèi)容送入片外的內(nèi)容送入片外RAM中地址為中地址為2034H的單元的單元讀程序存儲(chǔ)器指令:讀程序存儲(chǔ)器指令: (MOVC2條條)這類(lèi)指令用于這類(lèi)指令用于讀讀片內(nèi)或者片外片內(nèi)或者片外ROM,源操作數(shù)采用,源操作數(shù)采用變址尋址方式變址尋址方式 MOVC A,A+DPTR;A (A)+(DPTR)MOVC A,A+PC;PC (PC)+1,A (A)+(PC) 2、分析以下程序的結(jié)果。、分析以下程序的結(jié)果。 MOV A,#01H MOV DPTR,#TABLE MOVC A,A+DPTR TABLE:DB 41H DB 42H以上指令執(zhí)行的的結(jié)果以上指令執(zhí)行的的

22、結(jié)果A=( )。)。讀程序存儲(chǔ)器指令:讀程序存儲(chǔ)器指令: (MOVC2條條)練習(xí):練習(xí):1、已知、已知A=30H,DPTR=3000H,程序,程序存儲(chǔ)器單元(存儲(chǔ)器單元(3030H)=50H,執(zhí)行,執(zhí)行MOVC A, A+DPTR后,后,A=( )。)。 50H;(;(A)=01H;(;(DPTR)=TABLE;A(TABLE+01H)42H 地址地址 機(jī)器代碼機(jī)器代碼 源程序源程序0100 7402 MOV A,#02H 0102 83 MOVC A,A+PC0103 00 NOP0104 00 NOP0105 32 DB 32H 讀程序存儲(chǔ)器指令:讀程序存儲(chǔ)器指令: (MOVC2條條);(

23、;(A) = 02H;(;(PC)=0103H, A(0105)以上指令執(zhí)行結(jié)果以上指令執(zhí)行結(jié)果A=( )32H數(shù)據(jù)交換指令:數(shù)據(jù)交換指令: (XCH,XCHD,SWAP5條條)1、字節(jié)交換:、字節(jié)交換:XCH A,Rn;A RnXCH A ,direct;A(direct)XCH A,Ri ;A(Ri) 2、半字節(jié)交換、半字節(jié)交換XCHD A,Ri;A03(Ri)03 3、累加器、累加器A的低的低4位與高位與高4位交換位交換SWAP A ;A03A47 (A)=45H,(,(30H)=7AH數(shù)據(jù)交換指令:數(shù)據(jù)交換指令: (XCH,XCHD,SWAP5條條)堆棧操作指令:堆棧操作指令: (PU

24、SH,POP2條條)數(shù)據(jù)的進(jìn)棧出棧由指針數(shù)據(jù)的進(jìn)棧出棧由指針SP統(tǒng)一管理統(tǒng)一管理。堆棧的操。堆棧的操作有兩條專(zhuān)用指令:作有兩條專(zhuān)用指令: PUSH direct;SP(SP)+1,(,(SP)(direct)POP direct;(;(direct)(SP),),SP SP-1堆棧操作指令:堆棧操作指令: (PUSH,POP2條條)圖3-7 指令PUSH操作示意圖片內(nèi)RAM30H11H10HSP片內(nèi)RAM50H40H11H10HSP圖3-8 指令POP操作示意圖40H30H片內(nèi)RAM50H40H11H10H50HSP30H片內(nèi)RAM40H11H10H34HSP30H34H34H執(zhí)行前執(zhí)行前執(zhí)行

25、前PUSH指令后執(zhí)行POP指令后PUSH 40HPOP 30H總結(jié):總結(jié):MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送途徑單片機(jī)片內(nèi)數(shù)據(jù)傳送途徑 直接地址直接地址direct累加器累加器A直接地址直接地址direct間接地址間接地址Ri寄存器寄存器Rn立即數(shù)立即數(shù)#data寄存器寄存器DPTRMCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送圖單片機(jī)片內(nèi)數(shù)據(jù)傳送圖課堂練習(xí)課堂練習(xí)1.MCS-51單片機(jī)在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),其單片機(jī)在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),其地址指針可采用地址指針可采用( )。A.DPTRB.PCC.PSWD.SP2、已知、已知A=10H,DPTR=2000H,程序存儲(chǔ)器單,程序存儲(chǔ)器單元(元(2010H)=4

26、0H,執(zhí)行,執(zhí)行MOVC A, A+DPTR后,后,A=( )。)。A、10H B、40H C、2000H D、2010H課堂練習(xí)課堂練習(xí) C、 D、 課堂練習(xí)課堂練習(xí)4、若(、若(SP)=28H,(,(A)=55H,(,(B)=66H執(zhí)行指令執(zhí)行指令 PUSH A PUSH B 對(duì)指令執(zhí)行結(jié)果的描述,下列選項(xiàng)正確的是:對(duì)指令執(zhí)行結(jié)果的描述,下列選項(xiàng)正確的是:A、(、(SP)=30H,(,(SP)=55HB、(、(SP)=30H,(,(SP)=66HC、(、(SP)=2AH,(,(SP)=55HD、(、(SP)=2AH,(,(SP)=66H3.4 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令(24條條)MCS-5

27、1MCS-51指令系統(tǒng)中,算術(shù)指令都是針對(duì)指令系統(tǒng)中,算術(shù)指令都是針對(duì)8 8位無(wú)符號(hào)數(shù)位無(wú)符號(hào)數(shù)的,如的,如要進(jìn)行帶符號(hào)或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫(xiě)程序,通過(guò)要進(jìn)行帶符號(hào)或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫(xiě)程序,通過(guò)執(zhí)行程序來(lái)實(shí)現(xiàn)。執(zhí)行程序來(lái)實(shí)現(xiàn)。加法指令:加法指令: (ADD4條條)帶進(jìn)位加法指令帶進(jìn)位加法指令: (ADDC4條條)帶借位減法指令帶借位減法指令: (SUBB4條條)加加1/減減1操作:操作: (INC,DEC9條條)單字節(jié)乘單字節(jié)乘/除法指令除法指令: (MUL,DIV2條條)十進(jìn)制調(diào)整:十進(jìn)制調(diào)整: (DA A1條條)一、一、加法指令:加法指令: (ADD4條條)ADD A,#da

28、ta ; A(A)+data ADD A, direct ;A(A)+(direct)ADD A, Ri ;A(A)+(Ri)ADD A, Rn ;A(A)+(Rn)這組指令的功能是使得這組指令的功能是使得累加器累加器A可以和可以和內(nèi)部?jī)?nèi)部RAM的的任何單元的內(nèi)容進(jìn)行相加,也可以和一個(gè)任何單元的內(nèi)容進(jìn)行相加,也可以和一個(gè)8位立即數(shù)位立即數(shù)相加,相加相加,相加結(jié)果存放在結(jié)果存放在A 加法運(yùn)算:加法運(yùn)算: (ADD4條條)例例 若(若(A)=84H,(,(30H)=8DH,執(zhí)行指,執(zhí)行指令令 ADD A,30H 之后,由于:之后,由于: 即:(即:(A)=11H,(,(CY)=1,(,(AC)=1

29、,(OV)=1(D7有進(jìn)位,有進(jìn)位,D6無(wú)進(jìn)位),(無(wú)進(jìn)位),(P)=0。 (A):1 0 0 0 0 1 0 0 + (30H):1 0 0 0 1 1 0 1 進(jìn)位:1 1 1 結(jié)果: 1 0 0 0 1 0 0 0 1練一練:(練一練:(A)=0C3H,(,(R0)=0AAH,分,分析指令析指令A(yù)DD A,R0執(zhí)行后的結(jié)果以及對(duì)各標(biāo)執(zhí)行后的結(jié)果以及對(duì)各標(biāo)志位的影響。志位的影響。加法運(yùn)算:加法運(yùn)算: (ADD4條條)運(yùn)算結(jié)果:運(yùn)算結(jié)果:A = 6DH,C = 1,OV = 1,AC = 0,P = 1 二、二、帶進(jìn)位加法指令:帶進(jìn)位加法指令: (ADDC4條條)ADDC A,Rn ;A(A

30、)+(Rn)+(C)ADDC A,direct ;A (A)+(direct)+(C)ADDC A,Ri ;A (A) +(Ri)+(C)ADDC A,#data ;A (A) + #data +(C) C為來(lái)自為來(lái)自PSW中的進(jìn)位位中的進(jìn)位位C。這里的進(jìn)位標(biāo)志。這里的進(jìn)位標(biāo)志C是指是指令令執(zhí)行前已經(jīng)存在的進(jìn)位標(biāo)志的內(nèi)容執(zhí)行前已經(jīng)存在的進(jìn)位標(biāo)志的內(nèi)容。 帶進(jìn)位加法帶進(jìn)位加法(ADDC):(A) (A)+(Cy)+(第二操作數(shù)第二操作數(shù))帶進(jìn)位加法指令:帶進(jìn)位加法指令: (ADDC4條條)練一練:設(shè)(練一練:設(shè)(A)= 0AEH,(,(R0)= 81H,(C)= 1,分析執(zhí)行指令,分析執(zhí)行指令A(yù)

31、DDC A,R0后的結(jié)后的結(jié)果及對(duì)各標(biāo)志位的影響。果及對(duì)各標(biāo)志位的影響。運(yùn)算結(jié)果:運(yùn)算結(jié)果: = 30H,C = 1,OV = 1,AC = 1,P = 0 三、三、帶借位減法指令帶借位減法指令: (SUBB4條條)SUBB A,Rn ;A(A)-(Rn)-(C)SUBB A,direct ;A(A)-(direct)-(C)SUBB A,Ri ;A (A) -(Ri)-(C)SUBB A,#data ;A (A)- #data(C) 帶借位減法帶借位減法(SUBB):A (A)- (Cy)- (第二操作數(shù)第二操作數(shù))例例 若(若(A)=C9H,(,(R2)=54H,(,(CY)=1,執(zhí)行指令

32、,執(zhí)行指令 SUBB A,R2 之后,由于:之后,由于: 即:(即:(A)=74H,(,(CY)=0,(,(AC)=0,(OV)=1(位(位6有借位,位有借位,位7無(wú)借位),(無(wú)借位),(P)=0。 四、四、加加1操作:操作: (INC 5條條)INC A;A(A) + 1INC Rn;Rn(Rn) + 1INC direct ;(;(direct)(direct)+ 1INC Ri ;(;(Ri)(Ri)+ 1INC DPTR ;DPTR DPTR + 1INC指令是把所指的寄存器內(nèi)容指令是把所指的寄存器內(nèi)容加加1,結(jié)果仍送,結(jié)果仍送回原寄存器回原寄存器 注意:若原來(lái)寄存器的內(nèi)容為注意:若原

33、來(lái)寄存器的內(nèi)容為0FFH,則加,則加1后后將為將為00H,運(yùn)算結(jié)果不影響任何標(biāo)志位。,運(yùn)算結(jié)果不影響任何標(biāo)志位。五、五、減減1操作:操作: (DEC4條條)DEC A;A(A)- 1DEC Rn ;Rn(Rn)- 1DEC direct;direct (direct)- 1DEC Ri;(;(Ri)(Ri)- 1 DEC指令是把所指的寄存器內(nèi)容指令是把所指的寄存器內(nèi)容減減1,結(jié)果仍送,結(jié)果仍送回原寄存器回原寄存器 注意:若原來(lái)寄存器的內(nèi)容為注意:若原來(lái)寄存器的內(nèi)容為00H,則減,則減1后將后將為為0FFH,運(yùn)算結(jié)果不影響任何標(biāo)志位。,運(yùn)算結(jié)果不影響任何標(biāo)志位。六、 乘法指令指令 功能 編碼 M

34、UL AB A與B中8位無(wú)符號(hào)數(shù)相乘 A4 這條指令的功能是把累加器A和寄存器B中的兩個(gè)8位無(wú)符號(hào)數(shù)相乘,所得結(jié)果的低低8位放在累加器位放在累加器A中,高中,高8位放在寄存器位放在寄存器B中中。 當(dāng)乘積大于FFH(大于8位),則OV 置1,否則清0。標(biāo)志位CY總是被清0的。 六、 除法指令 指令 功能 編碼 DIV AB 8位無(wú)符號(hào)數(shù)A除以B 84 該指令的功能是進(jìn)行(A)除以(B)的運(yùn)算,A和B中的內(nèi)容均為8位無(wú)符號(hào)整數(shù)。指令操作后,商存于商存于A中,余數(shù)存于中,余數(shù)存于B中中,標(biāo)志位CY和OV均被清0。但若B中原有的內(nèi)容為00H,則除法結(jié)果將無(wú)確定值,此時(shí)OV標(biāo)志位置1,CY標(biāo)志位仍然為0

35、。 七 .十進(jìn)制調(diào)整指令(1條)指令 功能 編碼 對(duì)中的結(jié)果進(jìn)行十進(jìn)制調(diào)整 其規(guī)則如下:執(zhí)行加法操作后,當(dāng)累加器A中低4位的BCD數(shù)進(jìn)入進(jìn)入了無(wú)效碼區(qū)(了無(wú)效碼區(qū)(1010-1111)或低)或低4位產(chǎn)生進(jìn)位位產(chǎn)生進(jìn)位(AC=1),則在低4位進(jìn)行加6調(diào)整。 執(zhí)行加法操作后,當(dāng)累加器A中高4位的BCD數(shù)進(jìn)入進(jìn)入了無(wú)效碼區(qū)(了無(wú)效碼區(qū)(1010-1111)或高)或高4位產(chǎn)生進(jìn)位位產(chǎn)生進(jìn)位(CY=1),則在高4位進(jìn)行加6調(diào)整。在調(diào)整過(guò)程中若有進(jìn)位,進(jìn)位標(biāo)志位在調(diào)整過(guò)程中若有進(jìn)位,進(jìn)位標(biāo)志位CY置置1,若無(wú),若無(wú)進(jìn)位,進(jìn)位標(biāo)志位進(jìn)位,進(jìn)位標(biāo)志位CY不變,不變,AC和和OV標(biāo)志位不受此標(biāo)志位不受此指令的影

36、響。指令的影響。例例 若(若(A)0101 0110B,表示的,表示的BCD碼為碼為56H,(R2)0110 0111B,表示的,表示的BCD碼為碼為67H,(,(CY)0。執(zhí)行以下指令:。執(zhí)行以下指令:ADD A,R2DA A由于(由于(A)0010 0011B,即,且(,即,且(CY)1,即,即結(jié)果為結(jié)果為BCD數(shù)數(shù)123。應(yīng)該注意,應(yīng)該注意,DA指令不能對(duì)減法進(jìn)行十進(jìn)制調(diào)整指令不能對(duì)減法進(jìn)行十進(jìn)制調(diào)整。3.5 邏輯運(yùn)算與循環(huán)類(lèi)指令(24條) 邏輯運(yùn)算指令邏輯運(yùn)算指令可以完成與、或、異或、清可以完成與、或、異或、清0和取反操作,當(dāng)以累加器和取反操作,當(dāng)以累加器A為目的操作數(shù)時(shí),為目的操作數(shù)

37、時(shí),對(duì)對(duì)P標(biāo)志有影響;標(biāo)志有影響; 累加器清累加器清0操作對(duì)操作對(duì)P標(biāo)志有影響。標(biāo)志有影響。 循環(huán)指令循環(huán)指令是對(duì)累加器是對(duì)累加器A的循環(huán)移位操作,的循環(huán)移位操作,包括左、右方向以及帶與不帶進(jìn)位位等移位包括左、右方向以及帶與不帶進(jìn)位位等移位方式,移位操作時(shí),帶進(jìn)位的循環(huán)移位對(duì)方式,移位操作時(shí),帶進(jìn)位的循環(huán)移位對(duì)CY和和P標(biāo)志有影響;標(biāo)志有影響; 3.5.1 3.5.1 邏輯與邏輯與 前前2條指令的功能是把源操作數(shù)與直接地址指示的條指令的功能是把源操作數(shù)與直接地址指示的單元內(nèi)容相與,結(jié)果送入直接地址指示的單元。單元內(nèi)容相與,結(jié)果送入直接地址指示的單元。 后后4條指令的功能是把源操作數(shù)與累加器條指

38、令的功能是把源操作數(shù)與累加器A的內(nèi)容相的內(nèi)容相與,結(jié)果送入累加器與,結(jié)果送入累加器A中。中。datadirectdirect data# Adirectdirect A direct ANL)(;)()(;,dataAA data# RiAA Ri directAA direct RnA A Rn A ANL)(;)()(;)()(;)()(;,例例 若(若(A)=C3H,(,(R0)=AAH,執(zhí)行指令,執(zhí)行指令 ANL A,R0 之后,(之后,(A)=82H。前前2條指令的功能是把源操作數(shù)與直接地址指示的單元條指令的功能是把源操作數(shù)與直接地址指示的單元內(nèi)容相或,結(jié)果送入直接地址指示的單元。內(nèi)

39、容相或,結(jié)果送入直接地址指示的單元。后后4條指令的功能是把源操作數(shù)與累加器條指令的功能是把源操作數(shù)與累加器A的內(nèi)容相或,的內(nèi)容相或,結(jié)果送入累加器結(jié)果送入累加器A中。中。3.5.2 3.5.2 邏輯或邏輯或datadirectdirect data# Adirectdirect A direct ORL)(;)()(;,dataAA data# RiAA Ri directAA direct RnA A Rn A ORL)(;)()(;)()(;)()(;,例例 若(若(A)=C3H,(,(R0)=55H,執(zhí)行指令,執(zhí)行指令ORL A,R0 之后,(之后,(A)=D7H。 3.5.3 3.5.

40、3 邏輯異或邏輯異或 datadirectdirect data# Adirectdirect A direct XRL)(;)()(;,dataAA data# RiAA Ri directAA direct RnA A Rn A XRL)(;)()(;)()(;)()(;, 前前2條指令的功能是把源操作數(shù)與直接地址指示的單元內(nèi)條指令的功能是把源操作數(shù)與直接地址指示的單元內(nèi)容異或,結(jié)果送入直接地址指示的單元。容異或,結(jié)果送入直接地址指示的單元。 后后4條指令的功能是把源操作數(shù)與累加器條指令的功能是把源操作數(shù)與累加器A的內(nèi)容異或,結(jié)的內(nèi)容異或,結(jié)果送入累加器果送入累加器A中。中。例例 若(若(

41、A)=C3H,(,(R0)=AAH,執(zhí)行指令,執(zhí)行指令 XRL A,R0 之后,(之后,(A)=69H。 CLR A CPLA3.5.4 3.5.4 累加器清累加器清0 0和取反和取反 ;A 0 ;A 這兩條指令的功能分別是把累加器這兩條指令的功能分別是把累加器A的內(nèi)容清的內(nèi)容清 0 和取反,結(jié)果仍在和取反,結(jié)果仍在A中。中。 例例 若(若(A)=A5H,執(zhí)行指令,執(zhí)行指令 CLR A 之后,之后,(A)=00H。 RRRRC A RLRLC3.5.5 3.5.5 累加器循環(huán)移位累加器循環(huán)移位 有時(shí)有時(shí)“累加器累加器A內(nèi)容乘內(nèi)容乘2”的任務(wù)可以的任務(wù)可以利用指令利用指令RLC A方便地完成。方

42、便地完成。 例:若(例:若(A)= BDH = 1011 1101B,(,(CY)0。執(zhí)行指令。執(zhí)行指令RLC A后,(后,(CY)=1,(,(A)= 0111 1010B = 7AH,(,(CY)1。 結(jié)果為:結(jié)果為:17AH(378)2BDH(189)。)。 3.6 控制轉(zhuǎn)移類(lèi)指令(17條) 通常情況下,程序的執(zhí)行是順序進(jìn)行通常情況下,程序的執(zhí)行是順序進(jìn)行的,但也可以根據(jù)需要的,但也可以根據(jù)需要改變程序的執(zhí)行改變程序的執(zhí)行順序順序,這種情況,這種情況稱(chēng)作程序轉(zhuǎn)移稱(chēng)作程序轉(zhuǎn)移。 控制程序的轉(zhuǎn)移要利用轉(zhuǎn)移指令??刂瞥绦虻霓D(zhuǎn)移要利用轉(zhuǎn)移指令。80C51的轉(zhuǎn)移指令有的轉(zhuǎn)移指令有無(wú)條件轉(zhuǎn)移、條件無(wú)條

43、件轉(zhuǎn)移、條件轉(zhuǎn)移及子程序調(diào)用與返回等轉(zhuǎn)移及子程序調(diào)用與返回等。一、一、 短跳轉(zhuǎn)短跳轉(zhuǎn)3.6.1 無(wú)條件轉(zhuǎn)移無(wú)條件轉(zhuǎn)移 AJMP addr11 ; PC (PC)+ 2, ; PC100 addr11 該指令執(zhí)行時(shí),先將該指令執(zhí)行時(shí),先將PC的內(nèi)容加的內(nèi)容加2(這是(這是PC指向指向的是的是AJMP的下一條指令),然后把指令中的下一條指令),然后把指令中11位地址位地址碼傳送到碼傳送到PC100,而,而PC1511保持原內(nèi)容不變。保持原內(nèi)容不變。v在目標(biāo)地址的在目標(biāo)地址的11位中,前位中,前3位為頁(yè)地址,后位為頁(yè)地址,后8位為頁(yè)位為頁(yè)內(nèi)地址(每頁(yè)含內(nèi)地址(每頁(yè)含256個(gè)單元)。個(gè)單元)。 當(dāng)前當(dāng)

44、前PC的高的高5位(即下條指令的存儲(chǔ)地址的高位(即下條指令的存儲(chǔ)地址的高5位)位)可以確定可以確定32個(gè)個(gè)2KB段之一。所以,段之一。所以,AJMP指令的轉(zhuǎn)移指令的轉(zhuǎn)移范圍為包含范圍為包含AJMP下條指令在內(nèi)的下條指令在內(nèi)的2KB區(qū)間。區(qū)間。二、二、 長(zhǎng)跳轉(zhuǎn)長(zhǎng)跳轉(zhuǎn) LJMP addr16 ;PC addr16 第一字節(jié)為操作碼,該指令執(zhí)行時(shí),將指令的第一字節(jié)為操作碼,該指令執(zhí)行時(shí),將指令的第二、三字節(jié)地址碼分別裝入指令計(jì)數(shù)器第二、三字節(jié)地址碼分別裝入指令計(jì)數(shù)器PC的的高高8位和低位和低8位中,程序無(wú)條件地轉(zhuǎn)移到指定的目位中,程序無(wú)條件地轉(zhuǎn)移到指定的目標(biāo)地址去執(zhí)行。標(biāo)地址去執(zhí)行。 LJMP提供的

45、是提供的是16位地址,因此程序可以轉(zhuǎn)向位地址,因此程序可以轉(zhuǎn)向64KB的程序存儲(chǔ)器地址空間的任何單元。的程序存儲(chǔ)器地址空間的任何單元。 例例 若標(biāo)號(hào)若標(biāo)號(hào)“NEWADD”表示轉(zhuǎn)移目標(biāo)地址表示轉(zhuǎn)移目標(biāo)地址1234H。執(zhí)。執(zhí)行指令行指令 LJMP NEWADD 時(shí),兩字節(jié)的目標(biāo)地址將裝入時(shí),兩字節(jié)的目標(biāo)地址將裝入PC中,使程序轉(zhuǎn)向目標(biāo)地址中,使程序轉(zhuǎn)向目標(biāo)地址 1234H 處運(yùn)行。處運(yùn)行。三、三、 相對(duì)轉(zhuǎn)移相對(duì)轉(zhuǎn)移 SJMP rel ;PC (PC)+ 2,PC (PC)+ rel 第一字節(jié)為操作碼,第二字節(jié)為相對(duì)偏移量第一字節(jié)為操作碼,第二字節(jié)為相對(duì)偏移量 rel,rel 是一是一個(gè)帶符號(hào)的偏移

46、字節(jié)數(shù)(個(gè)帶符號(hào)的偏移字節(jié)數(shù)(2的補(bǔ)碼),取值范圍為的補(bǔ)碼),取值范圍為 127 128(00H7FH對(duì)應(yīng)表示對(duì)應(yīng)表示0 127,80HFFH對(duì)應(yīng)表示對(duì)應(yīng)表示1281)。負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。)。負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。 rel 可以是一個(gè)轉(zhuǎn)移目標(biāo)地址的標(biāo)號(hào)可以是一個(gè)轉(zhuǎn)移目標(biāo)地址的標(biāo)號(hào),由匯編程序在匯編過(guò),由匯編程序在匯編過(guò)程中自動(dòng)計(jì)算偏移地址,并填入指令代碼中。在手工匯編時(shí),程中自動(dòng)計(jì)算偏移地址,并填入指令代碼中。在手工匯編時(shí),可用轉(zhuǎn)移目標(biāo)地址減轉(zhuǎn)移指令所在的源地址,再減轉(zhuǎn)移指令字可用轉(zhuǎn)移目標(biāo)地址減轉(zhuǎn)移指令所在的源地址,再減轉(zhuǎn)移指令字節(jié)數(shù)節(jié)數(shù)2得到偏移字節(jié)數(shù)得到偏移

47、字節(jié)數(shù)rel。 例例 若標(biāo)號(hào)若標(biāo)號(hào)“NEWADD”表示轉(zhuǎn)移目標(biāo)地址表示轉(zhuǎn)移目標(biāo)地址0123H,PC的的當(dāng)前值為當(dāng)前值為0100H。執(zhí)行指令。執(zhí)行指令 SJMP NEWADD 后,程序?qū)⑥D(zhuǎn)向后,程序?qū)⑥D(zhuǎn)向 0123H 處執(zhí)行(此時(shí)處執(zhí)行(此時(shí)re l= 0123H(01002)= 21H)。)。四、四、 散轉(zhuǎn)移散轉(zhuǎn)移 JMP A+DPTR ;PC (PC)+ 1,PC (A)+(DPTR) 該指令具有散轉(zhuǎn)功能,可以代替許多判別跳轉(zhuǎn)指令。其轉(zhuǎn)移地址該指令具有散轉(zhuǎn)功能,可以代替許多判別跳轉(zhuǎn)指令。其轉(zhuǎn)移地址由數(shù)據(jù)指針由數(shù)據(jù)指針DPTR的的16位數(shù)和累加器位數(shù)和累加器A的的8位數(shù)進(jìn)行無(wú)符號(hào)數(shù)相加形位數(shù)進(jìn)

48、行無(wú)符號(hào)數(shù)相加形成,并直接裝入成,并直接裝入PC。該指令執(zhí)行時(shí)對(duì)標(biāo)志位無(wú)影響。該指令執(zhí)行時(shí)對(duì)標(biāo)志位無(wú)影響。例例 有一段程序如下:有一段程序如下: MOV DPTR,#TABLE JMP A+DPTRTABLE:AJMP ROUT0 AJMP ROUT1 AJMP ROUT2 AJMP ROUT3v當(dāng)(當(dāng)(A)=00H時(shí),程序?qū)⑥D(zhuǎn)到時(shí),程序?qū)⑥D(zhuǎn)到 ROUT0處執(zhí)行;當(dāng)(處執(zhí)行;當(dāng)(A)=02H時(shí),時(shí),程序?qū)⑥D(zhuǎn)到程序?qū)⑥D(zhuǎn)到 ROUT1處執(zhí)行;其余類(lèi)推。處執(zhí)行;其余類(lèi)推。 3.6.2 條件轉(zhuǎn)移條件轉(zhuǎn)移 一、一、 累加器判累加器判0轉(zhuǎn)移轉(zhuǎn)移 指令的功能是對(duì)累加器指令的功能是對(duì)累加器A的內(nèi)容為的內(nèi)容為

49、0 和不為和不為 0 進(jìn)行檢測(cè)并轉(zhuǎn)移。進(jìn)行檢測(cè)并轉(zhuǎn)移。當(dāng)當(dāng)不滿(mǎn)足各自的條件時(shí),程序繼續(xù)往下執(zhí)行。當(dāng)各自的條件滿(mǎn)足時(shí),程不滿(mǎn)足各自的條件時(shí),程序繼續(xù)往下執(zhí)行。當(dāng)各自的條件滿(mǎn)足時(shí),程序轉(zhuǎn)向指定的目標(biāo)地址。目標(biāo)地址的計(jì)算與序轉(zhuǎn)向指定的目標(biāo)地址。目標(biāo)地址的計(jì)算與SJMP指令情況相同。指令指令情況相同。指令執(zhí)行時(shí)對(duì)標(biāo)志位無(wú)影響。執(zhí)行時(shí)對(duì)標(biāo)志位無(wú)影響。例例 若累加器若累加器A原始內(nèi)容為原始內(nèi)容為00H,則:,則: JNZ L1 ;由于;由于A的內(nèi)容為的內(nèi)容為00H,所以程序往下執(zhí)行,所以程序往下執(zhí)行 INC A ; JNZ L2 ;由于;由于A的內(nèi)容已不為的內(nèi)容已不為0,所以程序轉(zhuǎn)向,所以程序轉(zhuǎn)向L2 處

50、執(zhí)行處執(zhí)行 二、二、 比較不相等轉(zhuǎn)移比較不相等轉(zhuǎn)移 這組指令的功能是對(duì)指定的目的字節(jié)和源字節(jié)進(jìn)行比這組指令的功能是對(duì)指定的目的字節(jié)和源字節(jié)進(jìn)行比較,若它們的值不相等則轉(zhuǎn)移較,若它們的值不相等則轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)地址為當(dāng)前的PC值加3后,再加指令的第三字節(jié)偏移量rel;若目的字節(jié)的內(nèi)若目的字節(jié)的內(nèi)容大于源字節(jié)的內(nèi)容,則進(jìn)位標(biāo)志清容大于源字節(jié)的內(nèi)容,則進(jìn)位標(biāo)志清0;若目的字節(jié)的內(nèi)容;若目的字節(jié)的內(nèi)容小于源字節(jié)的內(nèi)容,則進(jìn)位標(biāo)志置小于源字節(jié)的內(nèi)容,則進(jìn)位標(biāo)志置1;若目的字節(jié)的內(nèi)容等于源字節(jié)的內(nèi)容,程序?qū)⒗^續(xù)往下執(zhí)行。三、三、 減減1不為不為0轉(zhuǎn)移轉(zhuǎn)移 這組指令每執(zhí)行一次,便將目的操作數(shù)的循環(huán)控制單元的

51、這組指令每執(zhí)行一次,便將目的操作數(shù)的循環(huán)控制單元的內(nèi)容減內(nèi)容減1,并判其是否為,并判其是否為 0。若不為。若不為0,則轉(zhuǎn)移到目標(biāo)地址繼,則轉(zhuǎn)移到目標(biāo)地址繼續(xù)循環(huán);若為續(xù)循環(huán);若為0,則結(jié)束循環(huán),程序往下執(zhí)行。,則結(jié)束循環(huán),程序往下執(zhí)行。例例 有一段程序如下:有一段程序如下: MOV 23H,#0AH CLR ALOOPX:ADD A,23H DJNZ 23H,LOOPX SJMP $ 該程序執(zhí)行后該程序執(zhí)行后: (A)=10+9+8+7+6+5+4+3+2+1=37H3.6.3 調(diào)用與轉(zhuǎn)移調(diào)用與轉(zhuǎn)移 這兩條指令可以實(shí)現(xiàn)子程序的短調(diào)用和長(zhǎng)調(diào)用。這兩條指令可以實(shí)現(xiàn)子程序的短調(diào)用和長(zhǎng)調(diào)用。目標(biāo)地址的

52、形成方式與目標(biāo)地址的形成方式與AJMP和和LJMP相似。這兩相似。這兩條指令的執(zhí)行不影響任何標(biāo)志。條指令的執(zhí)行不影響任何標(biāo)志。 一、一、 調(diào)用調(diào)用 vACALL指令執(zhí)行時(shí),被調(diào)用的子程序的首址必須設(shè)指令執(zhí)行時(shí),被調(diào)用的子程序的首址必須設(shè)在包含當(dāng)前指令(即調(diào)用指令的下一條指令)的第一在包含當(dāng)前指令(即調(diào)用指令的下一條指令)的第一個(gè)字節(jié)在內(nèi)的個(gè)字節(jié)在內(nèi)的2K字節(jié)范圍內(nèi)字節(jié)范圍內(nèi)的程序存儲(chǔ)器中。的程序存儲(chǔ)器中。vLCALL指令執(zhí)行時(shí),被調(diào)用的子程序的首址可以指令執(zhí)行時(shí),被調(diào)用的子程序的首址可以設(shè)在設(shè)在64K字節(jié)范圍字節(jié)范圍內(nèi)的程序存儲(chǔ)器空間的任何位置。內(nèi)的程序存儲(chǔ)器空間的任何位置。 例例 若(若(S

53、P)=07H,標(biāo)號(hào),標(biāo)號(hào)“XADD”表示的實(shí)際地表示的實(shí)際地址為址為0345H,PC的當(dāng)前值為的當(dāng)前值為0123H。執(zhí)行指令。執(zhí)行指令 ACALL XADD 后,(后,(PC)+2=0125H,其低,其低8位的位的25H壓入堆棧的壓入堆棧的08H單元,其高單元,其高8位的位的01H壓入堆棧的壓入堆棧的09H單元。(單元。(PC)=0345H,程序轉(zhuǎn)向目標(biāo)地址,程序轉(zhuǎn)向目標(biāo)地址0345H 處執(zhí)行。處執(zhí)行。vRET指令的功能是從堆棧中彈出由調(diào)用指令壓入堆棧保護(hù)指令的功能是從堆棧中彈出由調(diào)用指令壓入堆棧保護(hù)的斷點(diǎn)地址,并送入指令計(jì)數(shù)器的斷點(diǎn)地址,并送入指令計(jì)數(shù)器PC,從而結(jié)束子程序的執(zhí),從而結(jié)束子程

54、序的執(zhí)行。程序返回到斷點(diǎn)處繼續(xù)執(zhí)行。行。程序返回到斷點(diǎn)處繼續(xù)執(zhí)行。二、二、 返回返回 vRETI指令是專(zhuān)用于中斷服務(wù)程序返回的指令,除正確返指令是專(zhuān)用于中斷服務(wù)程序返回的指令,除正確返回中斷斷點(diǎn)處執(zhí)行主程序以外,并有清除內(nèi)部相應(yīng)的中斷回中斷斷點(diǎn)處執(zhí)行主程序以外,并有清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器(以保證正確的中斷邏輯)的功能。狀態(tài)寄存器(以保證正確的中斷邏輯)的功能。3.6.4 空操作空操作 NOP ;PC (PC)+ 1 v這條指令不產(chǎn)生任何控制操作,只是將程這條指令不產(chǎn)生任何控制操作,只是將程序計(jì)數(shù)器序計(jì)數(shù)器PC的內(nèi)容加的內(nèi)容加1。該指令在執(zhí)行時(shí)間。該指令在執(zhí)行時(shí)間上要消耗上要消耗1個(gè)機(jī)器周

55、期,在存儲(chǔ)空間上可以個(gè)機(jī)器周期,在存儲(chǔ)空間上可以占用一個(gè)字節(jié)。因此,常用來(lái)實(shí)現(xiàn)較短時(shí)間占用一個(gè)字節(jié)。因此,常用來(lái)實(shí)現(xiàn)較短時(shí)間的延時(shí)。的延時(shí)。3.7 位操作類(lèi)指令(17條) 位操作位操作又稱(chēng)布爾操作,它是又稱(chēng)布爾操作,它是以位為單位進(jìn)行的各以位為單位進(jìn)行的各種操作種操作。位操作指令中的位地址有。位操作指令中的位地址有4 種表示形式:種表示形式:v 直接地址方式(如,直接地址方式(如,0D5H););v點(diǎn)操作符方式(如,點(diǎn)操作符方式(如,0D0H.5、PSW.5等);等);v位名稱(chēng)方式(如,位名稱(chēng)方式(如,F(xiàn)0););v偽指令定義方式(如,偽指令定義方式(如,MYFLAG BIT F0)。)。以上

56、幾種形式表示的都是以上幾種形式表示的都是PSW中的位中的位5。 與字節(jié)操作指令中累加器與字節(jié)操作指令中累加器ACC用字符用字符“A”表示表示類(lèi)似的是,在位操作指令中,位累加器要用字符類(lèi)似的是,在位操作指令中,位累加器要用字符“C”表示(注:在位操作指令中表示(注:在位操作指令中CY與具體的直接與具體的直接位地址位地址D7H對(duì)應(yīng))。對(duì)應(yīng))。 MOV bit,C ;bit(CY) MOV C ,bit ;CY (bit) v這兩條指令可以實(shí)現(xiàn)指定位地址中的內(nèi)容與位累加器這兩條指令可以實(shí)現(xiàn)指定位地址中的內(nèi)容與位累加器CY的的內(nèi)容的相互傳送。內(nèi)容的相互傳送。3.7.1 位傳送位傳送 例例 若(若(CY

57、)=1,(,(P3)=1100 0101B,(,(P1)=0011 0101B。執(zhí)行以下指令:。執(zhí)行以下指令: MOV P1.3,C MOV C,P3.3 MOV P1.2,C 結(jié)果為:(結(jié)果為:(CY)=0,P3的內(nèi)容未變,的內(nèi)容未變,P1的內(nèi)容變?yōu)榈膬?nèi)容變?yōu)?0011 1001B。一、位清一、位清03.7.2 位狀態(tài)設(shè)置位狀態(tài)設(shè)置 0bit bit 0CY C CLR; 這兩條指令可以實(shí)現(xiàn)位地址內(nèi)容和位累加這兩條指令可以實(shí)現(xiàn)位地址內(nèi)容和位累加器內(nèi)容的清器內(nèi)容的清0。 例例 若(若(P1)=1001 1101B。執(zhí)行指令。執(zhí)行指令CLR P1.3 后,結(jié)果為:后,結(jié)果為:( P1 )=100

58、1 0101B。二、位置位二、位置位 1bit bit 1CY C SETB; 這兩條指令可以實(shí)現(xiàn)地址內(nèi)容和位累加器內(nèi)這兩條指令可以實(shí)現(xiàn)地址內(nèi)容和位累加器內(nèi)容的置位。容的置位。 例例 若(若(P1)=1001 1100B。執(zhí)行指令。執(zhí)行指令SETB P1.0 后,(后,(P1)1001 1101B。一、位邏輯一、位邏輯“與與”3.7.3 位邏輯運(yùn)算位邏輯運(yùn)算 bit)CYCY /bit bitCYCY bit C ANL()(;)(;, 例例 若(若(P1)=1001 1100B,(,(CY)1。執(zhí)行指。執(zhí)行指令令A(yù)NL C, P1.0 后,結(jié)果為:后,結(jié)果為:P1 內(nèi)容不變,而內(nèi)容不變,而(

59、CY)0。 這兩條指令可以實(shí)現(xiàn)位地址單元內(nèi)容或取反后的這兩條指令可以實(shí)現(xiàn)位地址單元內(nèi)容或取反后的值與位累加器的內(nèi)容值與位累加器的內(nèi)容“與與”操作,操作的結(jié)果送位操作,操作的結(jié)果送位累加器累加器C。二、位邏輯二、位邏輯“或或” bit)CYCY /bit bitCYCY bit C ORL()(;)(;, 這兩條指令可以實(shí)現(xiàn)位地址單元內(nèi)容或取反這兩條指令可以實(shí)現(xiàn)位地址單元內(nèi)容或取反后的值與位累加器的內(nèi)容后的值與位累加器的內(nèi)容“或或”操作,操作的操作,操作的結(jié)果送位累加器結(jié)果送位累加器C。三、位取反三、位取反 bit)bit bit CYCY C CPL(;)(; 這兩條指令可以實(shí)現(xiàn)位地址單元內(nèi)容

60、和位累這兩條指令可以實(shí)現(xiàn)位地址單元內(nèi)容和位累加器內(nèi)容的取反。加器內(nèi)容的取反。一、判一、判CY轉(zhuǎn)移轉(zhuǎn)移3.7.4 位判跳(條件轉(zhuǎn)移)位判跳(條件轉(zhuǎn)移) 這兩條指令的功能是對(duì)進(jìn)位標(biāo)志位這兩條指令的功能是對(duì)進(jìn)位標(biāo)志位CY進(jìn)行進(jìn)行檢測(cè),當(dāng)(檢測(cè),當(dāng)(CY)=1(第一條指令)或(第一條指令)或(CY)=0(第二條指令),程序轉(zhuǎn)向(第二條指令),程序轉(zhuǎn)向PC當(dāng)前值與當(dāng)前值與rel之和的目標(biāo)地址去執(zhí)行,否則程序?qū)㈨樞驁?zhí)行。之和的目標(biāo)地址去執(zhí)行,否則程序?qū)㈨樞驁?zhí)行。 二、判二、判bit轉(zhuǎn)移轉(zhuǎn)移 這三條指令的功能是對(duì)指定位這三條指令的功能是對(duì)指定位bit進(jìn)行檢測(cè),進(jìn)行檢測(cè),當(dāng)(當(dāng)(bit)=1(第一和第二條指令

溫馨提示

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

評(píng)論

0/150

提交評(píng)論