




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第三章單片機(jī)的指令系統(tǒng)與匯編語言程序設(shè)計3.1MCS-51指令系統(tǒng)與尋址方式
3.2匯編語言程序設(shè)計
3.3匯編程序設(shè)計與調(diào)試第三章單片機(jī)的指令系統(tǒng)與匯編語言程序設(shè)計13.1MCS-51指令系統(tǒng)與尋址方式指令的基本概念單片機(jī)指令與分類51單片機(jī)的尋址方式不同空間的數(shù)據(jù)傳輸方法
作業(yè)題P55-1、23.1MCS-51指令系統(tǒng)與尋址方式指令的基本概念21指令的基本概念指令是計算機(jī)能夠識別的二進(jìn)制數(shù)代碼,指令系統(tǒng)的好壞決定計算機(jī)的性能和靈活性。指令集計算機(jī)能夠識別的指令的集合1指令的基本概念指令是計算機(jī)能夠識別的二進(jìn)制數(shù)代碼,指令3指令的組成指令由操作碼和操作對象組成。操作碼指明執(zhí)行什么操作,如數(shù)據(jù)傳送、加、減運算等操作對象可以是一個數(shù),或者是一個數(shù)所在的內(nèi)存地址。51指令有單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令。單字節(jié)指令和雙字節(jié)指令的操作對象隱含在操作碼之中。例如:MOVA,#0AH740A操作碼MOV和A合并在一字節(jié)中74H指令的組成指令由操作碼和操作對象組成。操作碼指明執(zhí)行什么操作42單片機(jī)指令與分類51系列單片機(jī)采用8位二進(jìn)制數(shù)作為操作碼,最多可有256種操作碼實際有111條指令,7種尋址方式42種助記符,說明33種操作功能這些指令可分為四大類:1數(shù)據(jù)傳送指令;2算術(shù)運算與邏輯運算指令;3控制轉(zhuǎn)移指令;4位操作指令.2單片機(jī)指令與分類51系列單片機(jī)采用8位二進(jìn)制數(shù)作為操作5指令和助記符
為了容易記憶這些符號一般采用英文單詞的縮寫構(gòu)成,這些符號稱為指令助記符;由這些助記符描述的計算機(jī)語言稱為匯編語言。指令有指令代碼和操作對象構(gòu)成。例:指令代碼助記符操作對象功能
740AMOVA,#0AH將十六進(jìn)制數(shù)0AH放入累加器A中指令和助記符 為了容易記憶這些符號一般采用英文單詞的縮寫構(gòu)63尋址方式 尋址方式是計算機(jī)尋找操作數(shù)的具體辦法。51系列單片機(jī)有7種尋址方式:源操作數(shù)目的操作數(shù)1立即尋址 2直接尋址3寄存器尋址4寄存器間接尋址5變址尋址6相對尋址 7位尋址3尋址方式 尋址方式是計算機(jī)尋找操作數(shù)的具體辦法。1立即尋7.1立即尋址
指令中直接給出操作數(shù)的尋址方式。立即操作數(shù)用前面加有#號的8位或16位數(shù)來表示。
例:
MOV A,#30H
;A←#30HMOV DPTR,#3400H;DPTR←#3400H
.1立即尋址 指令中直接給出操作數(shù)的尋址方式。立8立即尋址演示74H30H74H40H30H31H32H33H34H35H累加器AMOVA#30H源地址寄存器指令寄存器23H24H25H27H33H34HPC→74HZ總線30H55HROMRAM74H23H目的地址寄存器E0H立即尋址演示74H30H74H40H30H累加器AMOV9.2直接尋址
指令中直接給出操作數(shù)地址的尋址方式,能進(jìn)行直接尋址的存儲空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM。
例:
MOV PSW,#20H;PSW←#20HMOV A,30H ;A←(30H).2直接尋址指令中直接給出操作數(shù)地址的尋址方式10直接尋址演示74H30H74H40H30H31H32H33H34H35H累加器AMOVA30H源地址寄存器指令寄存器23H24H25H27H33H34HPC→74HZ總線30H55HROMRAM74H23H目的地址寄存器E0H直接尋址演示74H30H74H40H30H累加器AMOV11.3寄存器尋址
以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。寄存器包括:通用寄存器R0~R7和特殊功能寄存器A、B、DPTR等。
例:
MOVA,R0;A←(R0).3寄存器尋址以通用寄存器的內(nèi)容為操作數(shù)的尋址12.4寄存器間接尋址以寄存器中內(nèi)容為地址的尋址方式。間接尋址的存儲空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于寄存器間接尋址的寄存器有R0,R1和DPTR。表示方式是在寄存器名稱前面加一個符號@。例:
MOVA,@R0;A←((R0))MOVX@DPTR,A;外部RAM(DPTR)←A.4寄存器間接尋址以寄存器中內(nèi)容為地址的尋址方式。間接尋址的13.5變址尋址變址尋址是以某個寄存器的內(nèi)容為基本地址,加上偏移量作為操作數(shù)地址的尋址方式。
例:
MOVCA,@A+DPTR;A←(A+DPTR)
MOVCA,@A+PC;A←(A+PC)這些指令的用途主要是查表,寄存器存放表首地址,A存放偏移量.5變址尋址變址尋址是以某個寄存器的內(nèi)容為基本地址,加上偏14程序存儲器DPTR0211H11HA+MOVCA,@A+DPTR
操作示意圖變址尋址舉例1EH0200H0211H0200H11H地址寄存器1EH0200H程序存儲器DPTR0211H11HA+MOVCA,@15.6相對尋址 以當(dāng)前程序計數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的一字節(jié)補碼數(shù)(偏移量)形成新的PC值的尋址方式。相對尋址用于修改PC值,主要用于實現(xiàn)程序的分支轉(zhuǎn)移。例:SJMP08H
;PC←PC+2+08H
.6相對尋址 以當(dāng)前程序計數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給16SJMP08H
操作示意圖程序存儲器SJMP200AH08H2000H+208H執(zhí)行前PC2000H執(zhí)行后PC相對尋址舉例SJMP08H操作示意圖程序存儲器SJMP200A17.7位尋址位尋址是可位尋址單元的位操作。位尋址其實是一種直接尋址方式,不過其操作對象是指定的1位。例:
SETB10H;將10H位置1MOV32H,C;32H←進(jìn)位位CCLRPSW.4;將RS1位清0.7位尋址位尋址是可位尋址單元的位操作。位尋址其實是一種直18操作數(shù)尋址方式總結(jié)尋址方式尋址空間立即數(shù)尋址程序存儲器ROM直接尋址片內(nèi)RAM低128B和特殊功能寄存器寄存器尋址工作寄存器R0—R7和A,B,C,DPTR寄存器間接尋址片內(nèi)RAM低128B[@R0];片外RAM(@R0,@R1,@DPTR)變址尋址程序存儲器(@A+PC,@A+DPTR相對尋址程序存儲器256B范圍(PC+偏移量)位尋址片內(nèi)RAM的20H—2FH字節(jié)地址部分特殊功能寄存器操作數(shù)尋址方式總結(jié)尋址方式尋址空間立19
助記符說明
MOV、MOVX、MOVC傳送操作
XCH、XCHD、SWAP交換操作
PUSH、POP堆棧操作4數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令有以下三種類型MOVX片外RAM空間MOVCROM空間其他片內(nèi)RAM空間助記符說明4數(shù)據(jù)傳送類指20直接地址direct累加器A直接地址direct間接地址@Ri寄存器Rn立即數(shù)#dataROM寄存器DPTR單片機(jī)片內(nèi)傳送圖直接地址累加器直接地址間接地址寄存器立即數(shù)寄存器單片機(jī)片內(nèi)傳21
1以累加器為目的操作數(shù)的指令(4條)
MOVA,Rn
MOVA,direct
MOVA,@Ri
MOVA,#data
這組指令功能將源操作數(shù)指定內(nèi)容送到A中。
.1 1以累加器為目的操作數(shù)的指令(4條) MOVA,Rn22.2
MOVRn,A
MOVRn,direct
MOVRn,#data
這組指令功能是把源操作數(shù)指定的內(nèi)容送入當(dāng)前工作寄存器,源操作數(shù)不變。2以寄存器Rn為目的操作數(shù)的指令(3條).2MOVRn,A2以寄存器Rn為目的23
3以直接地址為目的操作數(shù)的指令(5條)
MOVdirect,A
MOVdirect,Rn MOVdirect1,direct2 MOVdirect,@Ri MOVdirect,#data
這組指令功能是把源操作數(shù)指定的內(nèi)容送入由直接地址指出的片內(nèi)存儲單元。.33以直接地址為目的操作數(shù)的指令(5條) MOVdire244以間接地址為目的操作數(shù)的指令(3條)
MOV@Ri,A
MOV@Ri,direct
MOV@Ri,#data
功能:把源操作數(shù)指定的內(nèi)容送入以R0或R1中內(nèi)容為地址的片內(nèi)存儲單元。.44以間接地址為目的操作數(shù)的指令(3條) MOV@Ri,255十六位數(shù)的傳遞指令(1條)
MOVDPTR,#data16這是唯一的一條16位立即數(shù)傳遞指令。功能:將一個16位的立即數(shù)送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOVDPTR,#1234H執(zhí)行完了之后DPH中的值為12H,DPL中的值為34H。如果我們分別向DPH,DPL送數(shù),則結(jié)果也一樣。如下面兩條指令:MOVDPH,#35H
MOVDPL,#12H。相當(dāng)于執(zhí)行了MOVDPTR,#3512H。.55十六位數(shù)的傳遞指令(1條) MOVDPTR,#da26程序舉例:把片內(nèi)RAM中地址為30H~3FH的字節(jié)單元內(nèi)容復(fù)制到地址為60H~6FH的字節(jié)單元中去。程序如下:
COPY:MOVR0,#30HMOVR1,#60HMOVR2,#10HLP1:MOVA,@R0MOV@R1,AINCR0INCR1DJNZR2,LP1RET
采用了間址尋址采用了間址尋址276A與片外RAM間的數(shù)據(jù)傳遞類指令(4條)
MOVXA,@Ri
MOVX@Ri,A
MOVXA,@DPTR
MOVX@DPTR,A說明:
1與外部RAM存儲器打交道的只可以是累加器A。所有需要送入外部RAM的數(shù)據(jù)必需要通過A送去,而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過A讀入。內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行。.6片外RAM操作6A與片外RAM間的數(shù)據(jù)傳遞類指令(4條)28
2.要讀或?qū)懲獠縍AM,必須要知道RAM的地址,采用DPTR時,地址被直接放在DPTR中的。采用Ri(R0或R1)時,由于Ri只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。
3.使用時應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫命令。.6續(xù)將外部RAM中100H單元中的內(nèi)容送入外部200H單元中。例:這段程序做了什么事?左右兩塊等價嗎?
MOVDPTR,#0100HMOVP2,#01H MOVXA,@DPTRMOVR0,#00H MOVDPTR,#0200HMOVXA,@R0 MOVX@DPTR,AMOVP2,#02HMOVX@R0,A2.要讀或?qū)懲獠縍AM,必須要知道RAM的地址,采用DP29舉例:1、讀入片外RAM中0080H地址單元的內(nèi)容2、向端口號為8FFEH的端口寫入0
或:MOVP2,#00HMOVR0,#80HMOVXA,@R0MOVDPTR,#80HMOVXA,@DPTRMOVA,#0MOVDPTR,8FFEHMOVX@DPTR,A舉例:或:MOVP2,#00HMOVDPTR,#8307讀程序存儲器指令(2條)
MOVCA,@A+DPTRMOVCA,@A+PC
本組指令是將ROM中的數(shù)送入A中,也被稱為查表指令,常用此指令來查一個已做好在ROM中的表格例:如果R0=3程序執(zhí)行后累加器A的值是多少? MOVDPTR,#100H MOVA,R0 MOVCA,@A+DPTR …… ORG0100H DB0,1,4,9,16,25.7ROM操作有一個數(shù)在R0中,要求用查表的方法確定它的平方值(此數(shù)的取值范圍是0-5)7讀程序存儲器指令(2條)MOVCA,@31
8堆棧操作(2條)
PUSHdirect POPdirect(不能為Rn)第一條為壓入指令,將direct中的內(nèi)容送入堆棧中,第二條為彈出指令,將堆棧中的內(nèi)容送回到direct中。例:
MOVSP,#10H MOV40H,#50H PUSH40H POP30H
執(zhí)行第一條PUSH40H指令是這樣的:將SP中的值加1,變?yōu)?1H,然后將40H中的值送到11H單元中,因此執(zhí)行完本條指令后,內(nèi)存11H單元的值是50H,同樣,執(zhí)行POP30H時,是將11H中的值送入到30H單元中,即執(zhí)行完本條指令后,30H單元中的值變?yōu)?0H。.8堆棧操作8堆棧操作(2條) PUSHdirect.8堆32
9交換指令(5條)
XCHA,Rn
XCHA,direct
XCHA,@Ri
XCHDA,@Ri
SWAPA
例:已知A中的內(nèi)容為34H;AR6 MOVR6,#29H;34H29H XCHA,R6;29H34H SWAPA;92H34H XCHA,R6;34H92H
.9交換指令9交換指令(5條) XCHA,Rn .9交換指令33判斷以下指令對錯,并改正錯誤的指令:1、MOVX@DPTR,02、MOVR4,R03、MOV@R1,R24、MOVA,@R25、MOV38H,60H6、MOVCB,@A+DPTR7、POPR18、XCH10H,20H9、XCHDA,50H×MOVX@DPTR,A
×不允許RnRn×不允許Rn@Ri×只有R0、R1可用于間接尋址
√×MOVCA,@A+DPTR×Rn不可作為POP的操作數(shù)
×XCH必須以A為源操作數(shù)
×XCHDA,@Ri
判斷以下指令對錯,并改正錯誤的指令:×345算術(shù)運算指令包括加、減、乘、除運算;第一操作數(shù)一般為A;一般影響標(biāo)志位CY、AC、OV和P。共24條指令,分成七個小類。一、不帶進(jìn)位加法指令(4條)ADDA,Rn;(A)+(Rn)AADDA,direct;(A)+(direct)AADDA,@Ri;(A)+((Ri))AADDA,#data;(A)+#dataA例3-1(A)=0C3H,(R0)=0AAH執(zhí)行“ADDA,R0”的和為
?,標(biāo)志位CY=
?,OV=
?,AC=
?。OV=C7C6對第6、第7位的進(jìn)位位C7、C6異或。6DH1105算術(shù)運算指令6D35二、帶進(jìn)位加法指令(4條)ADDCA,Rn;(A)+(Rn)+CYAADDCA,direct;(A)+(direct)+CYAADDCA,@Ri;(A)+((Ri))+CYAADDCA,#data;(A)+#data+CYA
三、帶借位減法指令(4條)SUBBA,Rn;(A)-CY-(Rn)ASUBBA,direct;(A)-CY-(direct)ASUBBA,@Ri;(A)-CY-((Ri))ASUBBA,#data;(A)-CY-#dataA注意!
無不帶借位的減法指令二、帶進(jìn)位加法指令(4條)注意36例:編寫雙字節(jié)加法指令
設(shè)一個加數(shù)高字節(jié)、低字節(jié)分別放在片內(nèi)31H、30H中,另一個加數(shù)高字節(jié)、低字節(jié)分別放在片內(nèi)41H、40H中,要求其加法結(jié)果高、低字節(jié)分別放入51H、50H中。試編寫該程序。
MOVA,30HADDA,40HMOV50H,AMOVA,31HADDCA,41HMOV51H,A例:編寫雙字節(jié)加法指令37四、乘除法指令(2條)1、乘法指令(8位無符號數(shù)乘法)
MULAB;(A)×(B)B15~8,A7~0說明:若結(jié)果的B≠0,則OV=1,若B=0,則OV=0;
CY總是為0。2、除法指令(8位無符號數(shù)除法)
DIVAB;(A)/(B)的商A,余數(shù)B說明:若除數(shù)B=0,則OV=1,若B≠0,則OV=0;
CY=0。四、乘除法指令(2條)38舉例:
1、編程序?qū)崿F(xiàn)將片內(nèi)RAM中38H單元的16進(jìn)制數(shù)轉(zhuǎn)換成非壓縮BCD碼,放在30H、31H、32H中。程序如下:MOVA,38HMOVB,#10DIVABMOV32H,BMOVB,#10DIVABMOV31H,BMOV30H,A舉例:程序如下:39五、加1指令(5條)INCA;(A)+1AINCRn;(Rn)+1Rn
INCdirect;(direct)+1direct
INC@Ri;((Ri))+1(Ri)INCDPTR;(DPTR)+1DPTR說明:此類指令不影響標(biāo)志CY、AC和OV五、加1指令(5條)40六、減1指令(4條)DECA;(A)-1ADECRn;(Rn)-1Rn
DECdirect;(direct)-1direct
DEC@Ri;((Ri))-1(Ri)說明:此類指令不影響標(biāo)志CY、AC和OV
注意:
無DECDPTR
指令六、減1指令(4條41七、十進(jìn)制數(shù)調(diào)整指令(1條)DAA
;把A中按二進(jìn)制相加后的結(jié)果調(diào)整成按;BCD相加的結(jié)果什么是BCD加法?
說明:(1)此指令常跟在ADD或ADDC指令之后,將A中的和調(diào)整為BCD碼,并且ADD或ADDC的兩個操作數(shù)是BCD碼;(2)調(diào)整方法:若(A0~3)>9或AC=1,則(A0~3)+6(A0~3);若(A4~7)>9或CY=1,則(A4~7)+6(A4~7);
(3)對標(biāo)志的影響:若結(jié)果A>99,則CY=1;不影響OV。比如:37H+25H=62H
七、十進(jìn)制數(shù)調(diào)整指令(1條)比如:37H+42作業(yè):P563.13
兩個4位BCD碼數(shù)相加,設(shè)被加數(shù)和加數(shù)分別存于片內(nèi)RAM的40H~41H、45H~46H單元中,和數(shù)存于50H、51H中(均是低位在前,高位在后),試編寫程序。
作業(yè):436邏輯操作指令
包括清除、求反、移位、與、或、異或等操作。這類指令一般不影響標(biāo)志位CY、AC和OV。共24條指令,分成五個小類。一、累加器A清0與取反指令(2條)1、累加器A清0指令CLRA
;0A
說明:只影響標(biāo)志位P。2、累加器A取反指令(按位取反)CPLA
;(/A)A,相當(dāng)于0FFH-AA
說明:不影響標(biāo)志位。如:(A)=56HCPLA;結(jié)果為0A9H注意只能以A為操作數(shù)6邏輯操作指令注44二、移位指令(4條)1、累加器A循環(huán)左移RLA;2、累加器A循環(huán)右移RRA;3、累加器A帶進(jìn)位位循環(huán)左移RLCA;4、累加器A帶進(jìn)位位循環(huán)右移RRCA;說明:(1)各條指令每次只移動一位;(2)左移一位相當(dāng)于乘以2;右移一位相當(dāng)于除以2;(3)帶進(jìn)位移動影響標(biāo)志位CY和P。只能以A為操作數(shù)二、移位指令(4條)只能45三、邏輯“與”指令(6條)ANLA,Rn;(A)∧(Rn)AANLA,direct;(A)∧(direct)AANLA,@Ri;(A)∧((Ri))AANLA,#data;(A)∧#dataAANLdirect,A;(direct)∧(A)directANLdirect,#data;(direct)∧#datadirect說明:(1)目的操作數(shù)只能是A或者direct;(2)沒有ANLdirect,directANLdirect,Rn或ANLdirect,@Ri
的形式。三、邏輯“與”指令(6條46(3)前4條指令僅影響標(biāo)志位P;后兩條不影響標(biāo)志位;(4)與運算常用于使某些位清0。21-51單片機(jī)的指令系統(tǒng)課件47例1:試編寫程序,將片內(nèi)RAM中45H單元內(nèi)容的高4位清0。
例2:試編寫程序,將片外RAM中1045H單元內(nèi)容的高4位清0。
ANL45H,#0FH
MOVDPTR,#1045HMOVXA,@DPTRANLA,#0FHMOVX@DPTR,AANL45H,#0FH48四、邏輯“或”指令(6條)ORLA,Rn;(A)∨(Rn)AORLA,direct;(A)∨(direct)AORLA,@Ri;(A)∨((Ri))AORLA,#data;(A)∨#dataAORLdirect,A;(direct)∨(A)directORLdirect,#data;(direct)∨#datadirect
說明:(1)目的操作數(shù)只能是A或者direct;(2)沒有ORLdirect,directORLdirect,Rn或ORLdirect,@Ri
的形式。四、邏輯“或”指令(649(2)前4條指令僅影響標(biāo)志位P;后兩條不影響標(biāo)志位。(3)或運算常用于使某些位置1。21-51單片機(jī)的指令系統(tǒng)課件50例1:試編寫程序,將片內(nèi)RAM中45H單元內(nèi)容的低4位置1。
例2:試編寫程序,將片外RAM中1045H單元內(nèi)容的低4位置1。
ORL45H,#0FH
MOVDPTR,#1045HMOVXA,@DPTRORLA,#0FHMOVX@DPTR,AORL45H,#0FHMOV51五、邏輯“異或”指令(6條)XRLA,Rn;(A)∨(Rn)AXRLA,direct;(A)∨(direct)AXRLA,@Ri;(A)∨((Ri))AXRLA,#data;(A)∨#dataAXRLdirect,A;(direct)∨(A)directXRLdirect,#data;(direct)∨#datadirect
說明:(1)目的操作數(shù)只能是A或者direct;(2)沒有XRLdirect,directXRLdirect,Rn或XRLdirect,@Ri
的形式。
(3)用1異或使對應(yīng)位取反,用0異或使對應(yīng)位不變,異或運算常用于使某些位取反。五、邏輯“異或”指令(6條52
例:試編寫程序,將片外RAM中2100H單元內(nèi)容的奇數(shù)位變反,偶數(shù)位不變
MOVDPTR,#2100HMOVXA,@DPTRXRLA,#10101010BMOVX@DPTR,AMOVDPTR,#2100H537控制程序轉(zhuǎn)移類指令
包括無條件轉(zhuǎn)移、條件轉(zhuǎn)移、子程序調(diào)用和返回指令等,共17條。只有比較轉(zhuǎn)移指令影響標(biāo)志位。
7控制程序轉(zhuǎn)移類指令541、AJMP
絕對轉(zhuǎn)移2、LJMP
長轉(zhuǎn)移3、SJMP
相對轉(zhuǎn)移4、JMP@A+DPTR
間接轉(zhuǎn)移程序一、無條件轉(zhuǎn)移指令(4條)正常執(zhí)行1、AJMP程序551、短轉(zhuǎn)移(絕對轉(zhuǎn)移)指令A(yù)JMPaddr11(2字節(jié))舉例:AJMPA1…..A1:MOVA,#0說明:應(yīng)用時必須保證目標(biāo)地址與下一條指令首地址的高5位相同,即目標(biāo)地址與下一條指令在同一個2KB范圍,否則出錯。(PC)(PC)562、長轉(zhuǎn)移指令LJMPaddr16;addr16PC(3字節(jié)指令)如:LJMPNEXT
……NEXT:……(PC)說明:轉(zhuǎn)移范圍是64KB全程序空間任何單元,即目標(biāo)地址可以是0000H~FFFFH任意值。
57
3、相對轉(zhuǎn)移指令SJMPrel(2字節(jié))如:SJMPNEXT
……NEXT:……說明:應(yīng)用時應(yīng)保證目標(biāo)地址在距離轉(zhuǎn)移指令的下一條指令的-128~+127字節(jié)距離范圍內(nèi)。例如:SJMP$
;無限循環(huán)執(zhí)行本指令,3、相對轉(zhuǎn)58
4、間接轉(zhuǎn)移指令JMP@A+DPTR;(A)+(DPTR)PC
目的地址為A+DPTR說明:(1)具有多分枝轉(zhuǎn)移功能,即散轉(zhuǎn)功能,又叫散轉(zhuǎn)指令;(2)轉(zhuǎn)移范圍:是以DPTR為首地址的256B。
4、間59例3-11根據(jù)累加器A中的命令鍵鍵值,設(shè)計命令鍵操作跳轉(zhuǎn)程序。MOVDPTR,#JPTABJMP@A+DPTRJPTAB:AJMPCCS0AJMPCCS1AJMPCCS2
:21-51單片機(jī)的指令系統(tǒng)課件60二、條件轉(zhuǎn)移指令(8條)
均為相對尋址方式。
1、累加器A為零(非零)轉(zhuǎn)移指令JZrel;當(dāng)A=0時,轉(zhuǎn)移;;當(dāng)A≠0時,順序執(zhí)行。JNZrel;當(dāng)A≠0時,轉(zhuǎn)移;;當(dāng)A=0時,順序執(zhí)行。二、條件轉(zhuǎn)移指令(8條)61
2、比較轉(zhuǎn)移指令
4條,均為三字節(jié)指令。一般形式為:
CJNE(目的操作數(shù)),(源操作數(shù)),rel
不等則轉(zhuǎn)移,同時置CY,等則順序執(zhí)行。(1)CJNEA,direct,rel
;若A>(direct),則(PC)+relPC,且0CY;
;若A<(direct),則(PC)+relPC,且1CY;
;若A=(direct),則順序執(zhí)行,且0CY。(2)CJNEA,#data,rel
;若A>#data,則(PC)+relPC,且0CY;
;若A<#data,則(PC)+relPC,且1CY;
;若A=#data,則順序執(zhí)行,且0CY。
62(3)CJNERn,#data,rel
;若(Rn)>#data,則(PC)+relPC,且0CY;
;若(Rn)<#data,則(PC)+relPC,且1CY;
;若(Rn)=#data,則順序執(zhí)行,且0CY。(4)CJNE@Ri,#data,rel
;若((Ri))>#data,則(PC)+relPC,且0CY;
;若((Ri))<#data,則(PC)+relPC,且1CY;
;若((Ri))=#data,則順序執(zhí)行,且0CY。21-51單片機(jī)的指令系統(tǒng)課件63
說明:×CY,實際是A-(direct)操作的借位值送CY;
CY可以作為進(jìn)一步操作的依據(jù)。如:CJNEA,38H,F(xiàn)IRSTCJNEA,#56H,SECONDCJNER2,#32,THIRDCJNE@R1,#48H,F(xiàn)OURTH
64
3、循環(huán)轉(zhuǎn)移指令DJNZRn,rel;(Rn)-1Rn;
;若(Rn)≠0,則轉(zhuǎn)移;;若(Rn)=0,則結(jié)束循環(huán),順序執(zhí)行DJNZdirect,rel;(direct
)-1direct;
;若(direct)≠0,則轉(zhuǎn)移;;若(direct)=0,則結(jié)束循環(huán),順序執(zhí)行說明:(1)PC的含義同上;(2)Rn、direct相當(dāng)于控制循環(huán)的計數(shù)器。計數(shù)器=0?計數(shù)器-1(PC)+relPC結(jié)束循環(huán),順序執(zhí)行YN3、循環(huán)轉(zhuǎn)65舉例:統(tǒng)計片內(nèi)RAM區(qū)的60H~70H地址單元中30的個數(shù)。程序:
TJ:
MOVR2,#10H;計數(shù)器
MOVR0,#60H;給指針賦初值
MOVR3,#0;統(tǒng)計30個數(shù)計數(shù)器LP1:CJNE@R0,#30,NEXTINCR3NEXT:INCR0DJNZR2,LP1RET舉例:統(tǒng)計片內(nèi)RAM區(qū)的60H~70H地址單元中30的個66三、子程序調(diào)用和返回指令(3條)
CALL指令執(zhí)行子程序RET指令程序子程序調(diào)用指令可完成保護(hù)斷點的工作,以便正確返回ACALL子函數(shù)名、LCALL子函數(shù)名、RET子程序返回RETI中斷子程序返回三、子程序調(diào)用和返回指令(367三、子程序調(diào)用和返回指令(3條)
1、短(絕對)調(diào)用指令A(yù)CALLaddr11
說明:要求與絕對調(diào)用指令同,即目的地址要與轉(zhuǎn)移指令下一條指令地址在同一個2KB范圍,即高5位地址相同。如:ACALLSUB……SUB:……RET三、子程序調(diào)用和返回指令68
2、長調(diào)用指令LCALLaddr16
說明:轉(zhuǎn)移范圍是整個程序存儲空間,64KB范圍,即目標(biāo)地址可為0000H~FFFFH范圍任意值。如:LCALLSUB……SUB:……RET如:LCALLSUB69
3、返回指令
RET:子程序返回指令,與子程序調(diào)用指令配合使用;((SP))PC8~15,(SP)-1SP
;((SP))PC0~7,(SP)-1SPRETI:中斷服務(wù)子程序返回指令,處于中斷服務(wù)子程序末尾處。;((SP))PC8~15,(SP)-1SP
;((SP))PC0~7,(SP)-1SP
;清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存;器狀態(tài)(該寄存器由CPU相應(yīng)中斷時置位)注意:二者不可混用。3、703.3.5位操作類指令
包括位變量傳送、邏輯運算、控制轉(zhuǎn)移等指令,共17條,分成4個小類。只有部分指令影響CY標(biāo)志。
位地址的表示方法(1)直接用位地址如:D4H(2)用特殊功能寄存器名加位數(shù)如:PSW.4(3)用位名稱如:RS1(4)用bit定義的有名字的位地址3.3.5位操71一、位數(shù)據(jù)傳送指令(2條)MOVC,bit
;(bit)CMOVbit,C
;(bit)C如:MOVC,TR0MOV08H,C二、位修正指令(6條)
1、位清0指令CLRC
;0CCLRbit
;0(bit)如:CLRTR0
21-51單片機(jī)的指令系統(tǒng)課件72
2、位置1指令SETBC
;1CSETBbit
;1(bit)如:SETBTR0SETB06H3、位取反指令CPLC
;(/C)CCPLbit
;(/bit)bit如:CPLTR0CPLEA
73三、位邏輯運算指令(4條)
1、位邏輯“與”指令A(yù)NLC,bit
;(C)∧(bit)CANLC,/bit
;(C)∧(/bit)C如:ANLC,P1.0ANLC,/P1.22、位邏輯“或”指令ORLC,bit
;(C)∨(bit)CORLC,/bit
;(C)∨(/bit)C如:ORLC,P1.0ORLC,/P1.2都以C為目的操作數(shù)三、位邏輯運算指令(474四、位條件轉(zhuǎn)移類指令(5條)
1、判斷C值轉(zhuǎn)移指令JCrel
;(PC)+2PC
;(C)=1,則(PC)+relPC
;(C)=0,則順序向下執(zhí)行JNCrel
;(PC)+2PC
;(C)=0,則(PC)+relPC
;(C)=1,則順序向下執(zhí)行如:JCNEXT1JNCFIRST
四、位條件轉(zhuǎn)移類指令(75
2、判斷位值轉(zhuǎn)移指令JBbit,rel
;(PC)+2PC
;若(bit)=1,則(PC)+relPC
;若(bit)=0,則順序向下執(zhí)行JNBbit,rel
;(PC)+2PC
;若(bit)=0,則(PC)+relPC
;若(bit)=1,則順序向下執(zhí)行如:JB00H,NEXT1JNBTI,$
76
3、判斷位值并清0轉(zhuǎn)移指令JBCbit,rel
;(PC)+2PC
;若(bit)=1,則(PC)+relPC,0bit
;若(bit)=0,則順序向下執(zhí)行如:JBCFLAGRUN,NEXT1
77第三章單片機(jī)的指令系統(tǒng)與匯編語言程序設(shè)計3.1MCS-51指令系統(tǒng)與尋址方式
3.2匯編語言程序設(shè)計
3.3匯編程序設(shè)計與調(diào)試第三章單片機(jī)的指令系統(tǒng)與匯編語言程序設(shè)計783.1MCS-51指令系統(tǒng)與尋址方式指令的基本概念單片機(jī)指令與分類51單片機(jī)的尋址方式不同空間的數(shù)據(jù)傳輸方法
作業(yè)題P55-1、23.1MCS-51指令系統(tǒng)與尋址方式指令的基本概念791指令的基本概念指令是計算機(jī)能夠識別的二進(jìn)制數(shù)代碼,指令系統(tǒng)的好壞決定計算機(jī)的性能和靈活性。指令集計算機(jī)能夠識別的指令的集合1指令的基本概念指令是計算機(jī)能夠識別的二進(jìn)制數(shù)代碼,指令80指令的組成指令由操作碼和操作對象組成。操作碼指明執(zhí)行什么操作,如數(shù)據(jù)傳送、加、減運算等操作對象可以是一個數(shù),或者是一個數(shù)所在的內(nèi)存地址。51指令有單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令。單字節(jié)指令和雙字節(jié)指令的操作對象隱含在操作碼之中。例如:MOVA,#0AH740A操作碼MOV和A合并在一字節(jié)中74H指令的組成指令由操作碼和操作對象組成。操作碼指明執(zhí)行什么操作812單片機(jī)指令與分類51系列單片機(jī)采用8位二進(jìn)制數(shù)作為操作碼,最多可有256種操作碼實際有111條指令,7種尋址方式42種助記符,說明33種操作功能這些指令可分為四大類:1數(shù)據(jù)傳送指令;2算術(shù)運算與邏輯運算指令;3控制轉(zhuǎn)移指令;4位操作指令.2單片機(jī)指令與分類51系列單片機(jī)采用8位二進(jìn)制數(shù)作為操作82指令和助記符
為了容易記憶這些符號一般采用英文單詞的縮寫構(gòu)成,這些符號稱為指令助記符;由這些助記符描述的計算機(jī)語言稱為匯編語言。指令有指令代碼和操作對象構(gòu)成。例:指令代碼助記符操作對象功能
740AMOVA,#0AH將十六進(jìn)制數(shù)0AH放入累加器A中指令和助記符 為了容易記憶這些符號一般采用英文單詞的縮寫構(gòu)833尋址方式 尋址方式是計算機(jī)尋找操作數(shù)的具體辦法。51系列單片機(jī)有7種尋址方式:源操作數(shù)目的操作數(shù)1立即尋址 2直接尋址3寄存器尋址4寄存器間接尋址5變址尋址6相對尋址 7位尋址3尋址方式 尋址方式是計算機(jī)尋找操作數(shù)的具體辦法。1立即尋84.1立即尋址
指令中直接給出操作數(shù)的尋址方式。立即操作數(shù)用前面加有#號的8位或16位數(shù)來表示。
例:
MOV A,#30H
;A←#30HMOV DPTR,#3400H;DPTR←#3400H
.1立即尋址 指令中直接給出操作數(shù)的尋址方式。立85立即尋址演示74H30H74H40H30H31H32H33H34H35H累加器AMOVA#30H源地址寄存器指令寄存器23H24H25H27H33H34HPC→74HZ總線30H55HROMRAM74H23H目的地址寄存器E0H立即尋址演示74H30H74H40H30H累加器AMOV86.2直接尋址
指令中直接給出操作數(shù)地址的尋址方式,能進(jìn)行直接尋址的存儲空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM。
例:
MOV PSW,#20H;PSW←#20HMOV A,30H ;A←(30H).2直接尋址指令中直接給出操作數(shù)地址的尋址方式87直接尋址演示74H30H74H40H30H31H32H33H34H35H累加器AMOVA30H源地址寄存器指令寄存器23H24H25H27H33H34HPC→74HZ總線30H55HROMRAM74H23H目的地址寄存器E0H直接尋址演示74H30H74H40H30H累加器AMOV88.3寄存器尋址
以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。寄存器包括:通用寄存器R0~R7和特殊功能寄存器A、B、DPTR等。
例:
MOVA,R0;A←(R0).3寄存器尋址以通用寄存器的內(nèi)容為操作數(shù)的尋址89.4寄存器間接尋址以寄存器中內(nèi)容為地址的尋址方式。間接尋址的存儲空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于寄存器間接尋址的寄存器有R0,R1和DPTR。表示方式是在寄存器名稱前面加一個符號@。例:
MOVA,@R0;A←((R0))MOVX@DPTR,A;外部RAM(DPTR)←A.4寄存器間接尋址以寄存器中內(nèi)容為地址的尋址方式。間接尋址的90.5變址尋址變址尋址是以某個寄存器的內(nèi)容為基本地址,加上偏移量作為操作數(shù)地址的尋址方式。
例:
MOVCA,@A+DPTR;A←(A+DPTR)
MOVCA,@A+PC;A←(A+PC)這些指令的用途主要是查表,寄存器存放表首地址,A存放偏移量.5變址尋址變址尋址是以某個寄存器的內(nèi)容為基本地址,加上偏91程序存儲器DPTR0211H11HA+MOVCA,@A+DPTR
操作示意圖變址尋址舉例1EH0200H0211H0200H11H地址寄存器1EH0200H程序存儲器DPTR0211H11HA+MOVCA,@92.6相對尋址 以當(dāng)前程序計數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的一字節(jié)補碼數(shù)(偏移量)形成新的PC值的尋址方式。相對尋址用于修改PC值,主要用于實現(xiàn)程序的分支轉(zhuǎn)移。例:SJMP08H
;PC←PC+2+08H
.6相對尋址 以當(dāng)前程序計數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給93SJMP08H
操作示意圖程序存儲器SJMP200AH08H2000H+208H執(zhí)行前PC2000H執(zhí)行后PC相對尋址舉例SJMP08H操作示意圖程序存儲器SJMP200A94.7位尋址位尋址是可位尋址單元的位操作。位尋址其實是一種直接尋址方式,不過其操作對象是指定的1位。例:
SETB10H;將10H位置1MOV32H,C;32H←進(jìn)位位CCLRPSW.4;將RS1位清0.7位尋址位尋址是可位尋址單元的位操作。位尋址其實是一種直95操作數(shù)尋址方式總結(jié)尋址方式尋址空間立即數(shù)尋址程序存儲器ROM直接尋址片內(nèi)RAM低128B和特殊功能寄存器寄存器尋址工作寄存器R0—R7和A,B,C,DPTR寄存器間接尋址片內(nèi)RAM低128B[@R0];片外RAM(@R0,@R1,@DPTR)變址尋址程序存儲器(@A+PC,@A+DPTR相對尋址程序存儲器256B范圍(PC+偏移量)位尋址片內(nèi)RAM的20H—2FH字節(jié)地址部分特殊功能寄存器操作數(shù)尋址方式總結(jié)尋址方式尋址空間立96
助記符說明
MOV、MOVX、MOVC傳送操作
XCH、XCHD、SWAP交換操作
PUSH、POP堆棧操作4數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令有以下三種類型MOVX片外RAM空間MOVCROM空間其他片內(nèi)RAM空間助記符說明4數(shù)據(jù)傳送類指97直接地址direct累加器A直接地址direct間接地址@Ri寄存器Rn立即數(shù)#dataROM寄存器DPTR單片機(jī)片內(nèi)傳送圖直接地址累加器直接地址間接地址寄存器立即數(shù)寄存器單片機(jī)片內(nèi)傳98
1以累加器為目的操作數(shù)的指令(4條)
MOVA,Rn
MOVA,direct
MOVA,@Ri
MOVA,#data
這組指令功能將源操作數(shù)指定內(nèi)容送到A中。
.1 1以累加器為目的操作數(shù)的指令(4條) MOVA,Rn99.2
MOVRn,A
MOVRn,direct
MOVRn,#data
這組指令功能是把源操作數(shù)指定的內(nèi)容送入當(dāng)前工作寄存器,源操作數(shù)不變。2以寄存器Rn為目的操作數(shù)的指令(3條).2MOVRn,A2以寄存器Rn為目的100
3以直接地址為目的操作數(shù)的指令(5條)
MOVdirect,A
MOVdirect,Rn MOVdirect1,direct2 MOVdirect,@Ri MOVdirect,#data
這組指令功能是把源操作數(shù)指定的內(nèi)容送入由直接地址指出的片內(nèi)存儲單元。.33以直接地址為目的操作數(shù)的指令(5條) MOVdire1014以間接地址為目的操作數(shù)的指令(3條)
MOV@Ri,A
MOV@Ri,direct
MOV@Ri,#data
功能:把源操作數(shù)指定的內(nèi)容送入以R0或R1中內(nèi)容為地址的片內(nèi)存儲單元。.44以間接地址為目的操作數(shù)的指令(3條) MOV@Ri,1025十六位數(shù)的傳遞指令(1條)
MOVDPTR,#data16這是唯一的一條16位立即數(shù)傳遞指令。功能:將一個16位的立即數(shù)送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOVDPTR,#1234H執(zhí)行完了之后DPH中的值為12H,DPL中的值為34H。如果我們分別向DPH,DPL送數(shù),則結(jié)果也一樣。如下面兩條指令:MOVDPH,#35H
MOVDPL,#12H。相當(dāng)于執(zhí)行了MOVDPTR,#3512H。.55十六位數(shù)的傳遞指令(1條) MOVDPTR,#da103程序舉例:把
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智能家電合伙退出協(xié)議
- 二零二五年度新型商業(yè)街門面租賃管理合同
- 二零二五年度綠色養(yǎng)殖魚塘承包協(xié)議書合同
- 2025年度服裝廠員工勞動保障與權(quán)益維護(hù)合同
- 二零二五年度砂石場勞務(wù)人員績效評價與激勵機(jī)制合同
- 2025年度炊事員職業(yè)規(guī)劃聘用合同
- 2025年度旅游設(shè)施建設(shè)承包合同解除書
- 二零二五年度互聯(lián)網(wǎng)企業(yè)股權(quán)結(jié)構(gòu)調(diào)整與投資協(xié)議書
- 二零二五年度教育培訓(xùn)機(jī)構(gòu)兼職教師合作協(xié)議
- 保險業(yè)務(wù)知識培訓(xùn)課件
- 警察叔叔是怎樣破案的演示文稿課件
- 2019石景山初三一模語文試題及答案
- 外固定架課件
- 尿液有形成分形態(tài)學(xué)檢查與臨床意義課件
- 保密風(fēng)險評估報告
- 09式 新擒敵拳 教學(xué)教案 教學(xué)法 圖解
- CAD術(shù)語對照表
- 《橋梁工程計算書》word版
- 學(xué)術(shù)論文的寫作與規(guī)范課件
- 香港牛津新魔法Newmagic3AUnit4Mycalendar單元檢測試卷
- 中考《紅星照耀中國》各篇章練習(xí)題及答案(1-12)
評論
0/150
提交評論