第三與第四章 MCS-51指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第1頁
第三與第四章 MCS-51指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第2頁
第三與第四章 MCS-51指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第3頁
第三與第四章 MCS-51指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第4頁
第三與第四章 MCS-51指令系統(tǒng)與匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

內(nèi)容安排3.1MCS-51單片機(jī)指令格式3.2MCS-51指令尋址方式3.3MCS-51單片機(jī)指令系統(tǒng)第3章MCS-51單片機(jī)指令系統(tǒng)

指令:是計(jì)算機(jī)用于控制某個(gè)功能部件完成某一指定動(dòng)作的指示和命令指令系統(tǒng):所有指令的集合指令由兩部分組成,即操作碼和操作數(shù)。

操作碼用來規(guī)定指令進(jìn)行什么操作

操作數(shù)則是指令操作的對(duì)象3.1MCS-51單片機(jī)指令格式

單字節(jié)指令、雙字節(jié)指令、三字節(jié)不同長(zhǎng)度的指令,格式不同:(1)單字節(jié)指令:指令只有一個(gè)字節(jié),操作碼和操作數(shù)同在一個(gè)字節(jié)中。(2)雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù)。

(3)三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)占二個(gè)字節(jié)。其中操作數(shù)既可能是數(shù)據(jù),也可能是地址。3.1MCS-51單片機(jī)指令格式3.2MCS-51指令尋址方式尋址方式:指CPU尋找操作數(shù)或操作數(shù)地址的方法尋址方式寄存器尋址寄存器間接尋址基址加變址寄存器間接尋址立即尋址直接尋址位尋址相對(duì)尋址1.立即尋址操作數(shù)直接由指令給出,通常緊跟指令操作碼之后的字節(jié)是操作數(shù),該操作數(shù)被稱為立即數(shù)

立即數(shù):8/16位二進(jìn)制數(shù)如:MOV A,#2AH MOV DPTR,#1324H3.2MCS-51指令尋址方式

2.直接尋址操作數(shù)直接以單元地址形式給出尋址范圍:

(1)內(nèi)部RAM的128個(gè)單元

(2)特殊功能寄存器。除了以單元地址的形式外,還可用寄存器符號(hào)的形式給出。

如:MOVA,P0;

MOVR0,TH0;3.2MCS-51指令尋址方式

3.寄存器尋址

寄存器尋址是指指令中的操作數(shù)為寄存器中的內(nèi)容。

可用寄存器有:(1)四組工作寄存器R0~R7共32個(gè)工作寄存器,由PSW中的RS1、RS2兩位狀態(tài)來選擇當(dāng)前寄存器組(2)SFR中有A、AB、DPTR及CY

如: MOVR3,#12H;

MOVA,R3;(A)←(R3)3.2MCS-51指令尋址方式

4.寄存器間接尋址方式

寄存器中存放的是操作數(shù)的地址在寄存器的名稱前面加前綴標(biāo)志“@”

訪問內(nèi)部RAM或外部數(shù)據(jù)存儲(chǔ)器的低256個(gè)字節(jié)時(shí),只能采用R0或R1作為間址寄存器。例如:

MOVA,@Ri

;i=0或1

尋址范圍:(1)訪問內(nèi)部RAM低128個(gè)單元,其通用形式為@Ri(2)對(duì)片外數(shù)據(jù)存儲(chǔ)器的64K字節(jié)的間接尋址,例如: MOVXA,@DPTR

3.2MCS-51指令尋址方式(3)片外數(shù)據(jù)存儲(chǔ)器的低256字節(jié)例如:MOVXA,@Ri(4)堆棧區(qū)堆棧操作指令PUSH(壓棧)和POP(出棧)使用堆棧指針(SP)作間址寄存器3.2MCS-51指令尋址方式

5.基址加變址寄存器間接尋址以DPTR或PC為基址寄存器,以A為變址寄存器,以兩者相加形成的16位地址為操作數(shù)的地址。尋址方式的指令只有3條:

MOVCA,@A+DPTR MOVCA,@A+PC JMP@A+DPTR3.2MCS-51指令尋址方式

6.相對(duì)尋址

相對(duì)尋址方式是以程序計(jì)數(shù)器PC的當(dāng)前值為基準(zhǔn),加上指令中給出的相對(duì)偏移量rel以形成目標(biāo)地址。目的地址=轉(zhuǎn)移指令所在地址+轉(zhuǎn)移指令字節(jié)數(shù)?+rel

操作數(shù)rel為程序轉(zhuǎn)移的偏移量,是一帶符號(hào)的8位二進(jìn)制數(shù)補(bǔ)碼數(shù)。

例:

3.2MCS-51指令尋址方式PC值不變→PC值變MOVCA,@A+PCMOVCA,@A+DPTRJMP@A+DPTR7.位尋址

位尋址是指對(duì)片內(nèi)RAM的位尋址區(qū)(20H~2FH)和可以位尋址的特殊功能寄存器的各位進(jìn)行位操作的尋址方式。

MCS-51單片機(jī)片內(nèi)RAM有兩個(gè)區(qū)域可以位尋址:

(1)20H~2FH單元的128個(gè)位;

(2)特殊功能寄存器中字節(jié)地址能被整除的寄存器中的各位。

3.2MCS-51指令尋址方式

特殊功能寄存器PSW中的可尋址位在指令中有如下4種的表示方法:

(1)直接使用位地址。例如PSW.5的位地址為0D5H。

(2)位名稱的表示方法。例如:PSW.5是F0標(biāo)志位,可使用F0表示該位。

(3)單元地址加位數(shù)的表示方法。例如:(0D0H).5。

(4)特殊功能寄存器符號(hào)加位數(shù)的表示方法。例如:PSW.53.2MCS-51指令尋址方式CY

AC

F0RS1RS0

OV—PD7D6D5D4D3D2D1D0PSWD0H3.2MCS-51指令尋址方式MCS-51的基本指令共111條,按指令所占的字節(jié)來分:

(1)單字節(jié)指令49條;

(2)雙字節(jié)指令45條;

(3)三字節(jié)指令17條。按功能分類,可分為下面5大類:(1)數(shù)據(jù)傳送類(28條)

(2)算術(shù)操作類(24條(3)邏輯運(yùn)算類(25條)

(4)控制轉(zhuǎn)移類(17條)

(5)位操作類(17條)3.3MCS-51單片機(jī)指令系統(tǒng)

數(shù)據(jù)傳送指令位操作把某一單元中內(nèi)容傳送到另一單元中去。一般傳送類指令的通用指令格式為

MOV<目的操作數(shù)>,<源操作數(shù)>

源操作數(shù)可以是累加器A、通用寄存器Rn、直接地址direct、間址寄存器@Ri和立

即數(shù)。

目的操作數(shù)可以是累加器A、通用寄存器Rn、直接地址direct和間址寄存器@Ri。

3.3.1數(shù)據(jù)傳送指令位操作1.片內(nèi)RAM數(shù)據(jù)傳送指令組

該類指令共有16條。

(1)以A為目的操作數(shù)的指令:

MOVA,Rn;(Rn)→A,n=0~7MOVA,@Ri;((Ri))→A,i=0,1MOVA,direct;(direct)→AMOVA,#data;#data→A3.3.1數(shù)據(jù)傳送指令位操作例MOVA,#38H;A←38H

MOVA,R0 ;A←(R0)

設(shè)(33H)=7AH;R0=33H,則

MOV

A,@R0;將R0指定的33H中的數(shù)7AH送A中

執(zhí)行結(jié)果:A=((R0))=(33H)=7AH。3.3.1數(shù)據(jù)傳送指令位操作2.以Rn為目標(biāo)的操作數(shù)的指令:

MOVRn,A;(A)→Rn,n=0~7 MOVRn,direct;(direct)→Rn,n=0~7MOVRn,#dat;#data→Rn,n=0~7例MOVR1,#10H;將立即數(shù)10H送R1寄存器,

3.3.1數(shù)據(jù)傳送指令位操作3.以直接地址direct為目的操作數(shù)的指令

MOVdirect,A;(A)→directMOV direct,Rn;(Rn)→direct,n=0~7MOVdirect1,direct2; MOVdirect,@Ri;((Ri))→direct MOV direct,#data;#data→direct

MOV

30H,31H;30H←(31H)

MOV

P2,R2;寄存器R2內(nèi)容送P2口

3.3.1數(shù)據(jù)傳送指令位操作4.以寄存器間接地址為目的操作數(shù)的指令

MOV@Ri,A;(A)→((Ri)),i=0,1MOV@Ri,direct;(direct)→((Ri))MOV@Ri,#data;#data→((Ri))例:設(shè)(A)=33H,(R0)=56H,則執(zhí)行指令:

MOV@R0,A;(R0)←(A),即(56H)=33H3.3.1數(shù)據(jù)傳送指令位操作5.16位數(shù)傳送指令

MOVDPTR,#data16;#data16→DPTR

唯一的16位數(shù)據(jù)的傳送指令,立即數(shù)的高8位送入DPH,立即數(shù)的低8位送入DPL。例MOVDPTR,#1011HDPTR←1011H,

結(jié)果為(DPH)=10H,(DPL)=11H3.3.1數(shù)據(jù)傳送指令位操作6.累加器A與外部數(shù)據(jù)存儲(chǔ)器傳送指令

MOVXA,@DPTR;((DPTR))→A,讀外部RAM/IOMOVXA,@Ri;((Ri))→A,讀外部RAM/IOMOVX@DPTR,A;(A)→((DPTR)),寫外部RAM/IOMOVX@Ri,A;(A)→((Ri)),寫外部RAM/IO功能:讀外部RAM存儲(chǔ)器或I/O中的一個(gè)字節(jié),或把A中一個(gè)字節(jié)的數(shù)據(jù)寫到外部RAM存儲(chǔ)器或I/O中。3.3.1數(shù)據(jù)傳送指令位操作7.堆棧操作指令(PUSH、POP):2條功能:分別用于保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng) 進(jìn)棧指令PUSH用于保護(hù)片內(nèi)某個(gè)單元內(nèi)容 出棧指令POP用于恢復(fù)片內(nèi)某個(gè)單元內(nèi)容

PUSH

direct;(SP)+1→(SP),(direct)→(SP)

POP

direct

;(SP)→(direct),(SP)-1→(SP)3.3.1數(shù)據(jù)傳送指令位操作入棧指令PUSH

direct例:

(SP)=60H,(A)=30H,(B)=70H時(shí),執(zhí)行

PUSHAcc;(SP)+1=61H→SP,(A)→61HPUSHB;(SP)+1=62H→SP,(B)→62H結(jié)果:(61H)=30H,(62H)=70H,(SP)=62H退棧指令POPdirect例:

(SP)=62H,(62H)=70H,(61H)=30H時(shí),執(zhí)行

POPDPH;((SP))→DPH,(SP)-1=61H→SPPOPDPL;((SP))→DPL,(SP)-1=60H→SP結(jié)果:(DPTR)=7030H,(SP)=60H3.3.1數(shù)據(jù)傳送指令位操作8.查表指令

用于讀程序存儲(chǔ)器中的數(shù)據(jù)表格的指令,均采用基址寄存器加變址寄存器間接尋址方式。共兩條

(1)MOVCA,@A+PC

(A)=30H,執(zhí)行地址1000H處的指令

1000H:MOVCA,@A+PC

本指令占用一個(gè)字節(jié),執(zhí)行結(jié)果將程序存儲(chǔ)器中1031H的內(nèi)容送入A。3.3.1數(shù)據(jù)傳送指令位操作

(2)MOVCA,@A+DPTR例:在ROM1000H開始存有5個(gè)字節(jié)數(shù),編程將第二個(gè)字節(jié)數(shù)取出送片內(nèi)RAM30H單元中。程序段如下:MOVDPTR,#1000H;置ROM地址指針(基址)DPTR←1000HMOVA,#01H;表內(nèi)序號(hào)送A(變址),A←01HMOVCA,@A+DPTR;從ROM1001H單元中取數(shù)送到AMOV30H,A ;再存入片內(nèi)RAM30H中

ORG1000H;偽指令,定義數(shù)表起始地址

TAB:DB55H,67H,9AH,34H,57H;在ROM1000H開始的空間定義5個(gè)單字節(jié)數(shù)執(zhí)行結(jié)果:(30H)=67H。3.3.1數(shù)據(jù)傳送指令位操作9.字節(jié)交換指令(1)整字節(jié)交換指令

XCHA,Rn XCHA,direct XCHA,@Ri功能:將累加器A的內(nèi)容與內(nèi)部RAM、SFR中的內(nèi)容互換,影響標(biāo)志位

(2)低半字節(jié)交換指令(XCHD)

XCHDA,@Ri;(A)3~0

((Ri))3~0功能:累加器A的低四位與片內(nèi)RAM某單元的低四位交換,高四位不變3.3.1數(shù)據(jù)傳送指令位操作(3)累加器A高低半字節(jié)交換指令(SWAP)

SWAPA;A7~4A3~0功能:將累加器A中的高4位與低4位內(nèi)容互換,不影響標(biāo)志位例若(A)=45H,(R0)=20H,(20H)=69H,單獨(dú)執(zhí)行下列指令后:

SWAPA ;(A)=54H

XCHA,R0 ;(A)=20H,(R0)=45H

XCHDA,@R0 ;(A)=49H,(20H)=65H3.3.1數(shù)據(jù)傳送指令位操作功能:執(zhí)行加、減、乘、除法四則運(yùn)算和加1、減1操作以及十進(jìn)制的調(diào)整特點(diǎn):支持8位無符號(hào)數(shù)操作,借助溢出標(biāo)志可對(duì)帶符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算算術(shù)運(yùn)算類指令執(zhí)行結(jié)果影響PSW3.3.2算術(shù)運(yùn)算類指令加法指令帶借位減法指令(4)加1、減1指令(9)算術(shù)運(yùn)算類指令乘法和除法指令(2)十進(jìn)制調(diào)整指令(1)不帶進(jìn)位加法指令(4)帶進(jìn)位加法指令(4)1.加法指令

共有4條加法運(yùn)算指令:

ADDA,Rn;(A)+(Rn)→A,n=0~7ADDA,direct;(A)+(direct)→AADDA,@Ri;(A)+((Ri))→A,i=0,1

ADDA,#data;(A)+#data→A3.3.2算術(shù)運(yùn)算類指令8位二進(jìn)制數(shù)加法運(yùn)算指令的一個(gè)加數(shù)總是累加器A,第二加數(shù)可用4種不同尋址方式得到,其相加結(jié)果再送回累加器A中,同時(shí)影響AC、CY、OV、P位。注意:累加器A中的值前后是不一樣的。影響程序狀態(tài)字PSW中的OV、C、AC和P的情況如下:(Di,i=0,1,…,7)

進(jìn)位標(biāo)志C:和的D7位有進(jìn)位時(shí),C=1;否則,C=0。

輔助進(jìn)位標(biāo)志AC:和的D3位有進(jìn)位時(shí),AC=1;否則,AC=0。

溢出標(biāo)志OV:和的D7、D6位只有一個(gè)有進(jìn)位時(shí),OV=1;否則,OV=0。溢出表示運(yùn)算的結(jié)果超出了數(shù)值所允許的范圍。3.3.2算術(shù)運(yùn)算類指令

例:兩個(gè)8位無符號(hào)數(shù)相加的和仍是8位。例如內(nèi)部RAM中40H和41H單元分別存放兩個(gè)加數(shù),相加結(jié)果存放42H單元。程序設(shè)計(jì)為:

MOV R0,#40H ;設(shè)置數(shù)據(jù)指針

MOV A,@R0 ;取第一個(gè)加數(shù)

INC R0 ;修改數(shù)據(jù)指針

ADD A,@R0 ;兩數(shù)相加

INC R0 ;修改數(shù)據(jù)指針

MOV @R0,A ;存結(jié)果

假設(shè)(40H)=53H;(41H)=FCH。結(jié)果為:(A)=4FH,(CY)=1,(AC)=0,(OV)=0,(P)=13.3.2算術(shù)運(yùn)算類指令

2.帶進(jìn)位加法指令標(biāo)志位Cy參加運(yùn)算,因此是三個(gè)數(shù)相加。共4條:

ADDCA,Rn ;(A)+(Rn)+C→A,n=0~7ADDCA,direct;(A)+(direct)+C→AADDC A,@Ri ;(A)+(Ri)+C→A,i=0,1ADDC A,#data ;(A)+#data+C→A

例:(A)=85H,(20H)=FFH,Cy=1,執(zhí)行指令:

ADDCA,20H結(jié)果為:(A)=85H,Cy=1,Ac=1,OV=0,P=1(A中1的位數(shù)為奇數(shù))3.3.2算術(shù)運(yùn)算類指令加1指令I(lǐng)NCA;A←(A)+1INCRi;Ri←(A)+1INCdirect;direct←(direct)+1INC@Ri;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1對(duì)標(biāo)志位不產(chǎn)生影響若:(A)=0FFH,(Cy)=0執(zhí)行:INCA結(jié)果:(A)=00H,(Cy)=03.3.2算術(shù)運(yùn)算類指令4.十進(jìn)制調(diào)整指令

DAA

用途:緊跟在BCD碼加法指令(不包括減法)之后,進(jìn)行十進(jìn)制調(diào)整。(96H為壓縮BCD碼,表示十位為9,個(gè)位為6)如兩BCD碼加:

MOVA,#35HADDA,#46H(A)=7BH,并不是81H

但:DAA后,(A)=81H3.3.2算術(shù)運(yùn)算類指令5.帶借位的減法指令

4條指令:

SUBBA,Rn;(A)-(Rn)-Cy→A,n=0~7SUBBA,direct;(A)-(direct)-Cy→A

SUBBA,@Ri;(A)-((Ri))-Cy→A,i=0,1SUBBA,#data;(A)-#data-Cy→A

功能:從累加器A中的內(nèi)容減去指定的變量和進(jìn)位標(biāo)志Cy的值,結(jié)果存在累加器A中。如果位7需借位則置“1”Cy,否則清“0”Cy;如果位3需借位則置“1”Ac,否則清“0”Ac;如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,則置“1”溢出標(biāo)志位OV,否則清“0”O(jiān)V。3.3.2算術(shù)運(yùn)算類指令6.減1指令減1類指令共4條,其功能是將操作數(shù)指定單元內(nèi)容減1。

DECA ;A-1→A,A中內(nèi)容減1 DECRn;Rn-1→Rn,Rn中內(nèi)容減1 DECdirect;(direct)-1→(direct),

直接地址中內(nèi)容減1 DEC@Ri;(Ri)-1→(Ri),Ri間址中的內(nèi)容減13.3.2算術(shù)運(yùn)算類指令7.乘法指令

MULAB;(A)×(B)低8位→A

高8位→BA、B中都是無符號(hào)整數(shù)如果積大于255,OV=1,否則OV=0;進(jìn)位標(biāo)志總是清零CY=0。3.3.2算術(shù)運(yùn)算類指令8.除法指令

DIVAB;(A)÷(B)商→A,余數(shù)→BA、B中都是無符號(hào)整數(shù)如果除數(shù)B為“0”,OV=1,否則OV=0;進(jìn)位標(biāo)志總是清零Cy=0。3.3.2算術(shù)運(yùn)算類指令

此類指令共24條,包括或、與、異或、求反、清0、循環(huán)移位。其共同特點(diǎn)是當(dāng)A作目的操作數(shù)(第一操作數(shù))時(shí),影響P位;帶進(jìn)位的移位指令影響CY位,其余都不影響PSW3.3.3邏輯運(yùn)算及移位類指令1.邏輯與指令

ANLA,RnANLA,directANLA,#dataANLA,@RiANLdirect,AANLdirect,#data

“有0即0,全1為1”3.3.3邏輯運(yùn)算及移位類指令2.邏輯或指令

ORLA,RnORLA,directORLA,#dataORLA,@RiORLdirect,AORLdirect,#data

“有1即1,全0為0”00000110∨)0110110101101111B=6FH3.3.3邏輯運(yùn)算及移位類指令3.邏輯異或指令

XRLA,RnXRLA,directXRLA,#dataXRLA,@RiXRLdirect,AXRLdirect,#data

相異為1,相同為0”

3.3.3邏輯運(yùn)算及移位類指令4.求反指令(1條)

CPL

A;對(duì)累加器A的內(nèi)容各位求反,結(jié)果送回A中,影響P位

5.清0指令(1條)

CLR A;將累加器A的內(nèi)容清0

注意:MCS-51的指令系統(tǒng)中對(duì)字節(jié)操作求反、清0,只有這2條指令,其他單元要求反、清0操作,則要用其他的指令或通過累加器A中進(jìn)行。3.3.3邏輯運(yùn)算及移位類指令3.3.3邏輯運(yùn)算及移位類指令6.循環(huán)移位指令(4條)

RLARLCA

RRA

RRCA控制轉(zhuǎn)移類指令共計(jì)17條無條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令子程序調(diào)用及返回指令功能:有了豐富的控制轉(zhuǎn)移類指令,就能很方便地實(shí)現(xiàn)程序的向前、向后跳轉(zhuǎn),并根據(jù)條件分支運(yùn)行、循環(huán)運(yùn)行、調(diào)用子程序等。3.3.4控制轉(zhuǎn)移類指令

1.無條件轉(zhuǎn)移指令①長(zhǎng)轉(zhuǎn)移指令

LJMPaddr16;

PC←addr16

本指令為三字節(jié)指令。指令功能是將16位值送入PC中,CPU轉(zhuǎn)向地址為addr16的單元處取令執(zhí)行。

②短轉(zhuǎn)移指令

AJMP addr11;

PC←PC+2,PC10~0←addr10~0

短轉(zhuǎn)移指令為雙字節(jié)指令。是用指令提供的11位地址替換PC的低11位,所形成的新的PC值作為目的地址

.3.3.4控制轉(zhuǎn)移類指令

③間接轉(zhuǎn)移指令JMP@A+DPTR;PC←A+DPTR

該指令為1字節(jié)指令。目的地址由DPTR與A相加形成。④相對(duì)轉(zhuǎn)移指令SJMPrel ;PC←PC+2+rel

本指令為雙字節(jié)指令。SJMP指令可用來使程序原地踏步:HERE:SJMPHERE或SJMP$($表示PC的當(dāng)前值)。rel=HERE-HERE-2=FEH,故機(jī)器碼為80FE。

單片機(jī)沒有可使CPU停止運(yùn)行的指令。

3.3.4控制轉(zhuǎn)移類指令

2.條件轉(zhuǎn)移指令①累加器判零轉(zhuǎn)移指令

JZ rel;PC←PC+2,若A=0,則PC←PC+relJNZrel;PC←PC+2,若A≠0,則PC←PC+rel②比較轉(zhuǎn)移指令

CJNEA,direct,rel;PC←PC+3,若A≠(direct),則PC←PC+relCJNEA,#data,rel ;PC←PC+3,若A≠data,則PC←PC+relCJNERn,#data,rel ;PC←PC+3,若Rn≠data,則PC←PC+relCJNE@Ri,#data,rel;PC←PC+3,若(Ri)≠data,則PC←PC+rel3.3.4控制轉(zhuǎn)移類指令

③循環(huán)轉(zhuǎn)移指令

DJNZRn,rel;PC←PC+2,Rn←Rn-1,若Rn≠0,則PC←PC+relDJNZdirect,rel ;PC←PC+3,(direct)←(direct)-1,

若(direct)≠0,則PC←PC+rel3.3.4控制轉(zhuǎn)移類指令

4.調(diào)用子程序指令(1)短調(diào)用指令

ACALLaddrllACALLaddr11;(PC)←(PC)+2,addr10~810001addr7~0(SP)←(SP)+1,((SP))←(PC7~0)(SP)←(SP)+1,((SP))←(PC15~8)(PC)10~0←addr11

(2)長(zhǎng)調(diào)用指令

LCALLaddr16LCALLaddr16;(PC)←(PC)+3,12addr15~8addr7~0(SP)←(SP)+1,((SP))←(PC7~0)(SP)←(SP)+1,((SP))←(PC15~8)(PC)←addr15~0

3.3.4控制轉(zhuǎn)移類指令

5.子程序的返回指令返回指令共有兩條:一條是對(duì)應(yīng)兩條調(diào)用指令的子程序返回指令RET;另一條是對(duì)應(yīng)從中斷服務(wù)程序的返回指令RETI。

RET;(PC15~8←((SP)),(SP)←(SP)-1,

(PC7~0)←((SP)),(SP)←(SP)-1RETI;(PC15~8)←((SP)),(SP)←(SP)-1,

(PC7~0)←((SP)),(SP)←(SP)-1

3.3.4控制轉(zhuǎn)移類指令

4.空操作指令

NOP;(PC)←(PC)+1,

空操作指令是一條單字節(jié)單周期指令。它控制CPU不做任何操作,僅僅是消耗這條指令執(zhí)行所需要的一個(gè)機(jī)器周期的時(shí)間,不影響任何標(biāo)志,故稱為空操作指令。但由于執(zhí)行一次該指令需要一個(gè)機(jī)器周期,所以常在程序中加上幾條NOP指令用于設(shè)計(jì)延時(shí)程序,拼湊精確延時(shí)時(shí)間或產(chǎn)生程序等待等。

3.3.4控制轉(zhuǎn)移類指令

在單片機(jī)硬件結(jié)構(gòu)中還附有一個(gè)位處理機(jī),又稱布爾處理機(jī),專門用于對(duì)一位數(shù)碼(布爾變量)進(jìn)行操作,稱作位操作。累加器(借用進(jìn)位標(biāo)志CY)存儲(chǔ)器(即位尋址區(qū)中的各位)完成位操作的運(yùn)算器等。

3.3.5位操作指令

1.數(shù)據(jù)位傳送指令

MOVC,bit MOVbit,C

MOVC,06H

;(20H).6→Cy 06H是內(nèi)部RAM20H字節(jié)位6的位地址。

MOVP1.0,C

;Cy→P1.0

2.位變量修改指令

CLRC ;清“0”Cy CLRbit ;清“0”bit位

CPLC ;Cy求反

3.3.5位操作指令

1.數(shù)據(jù)位傳送指令

MOVC,bit MOVbit,C

例寫出指令,將00H位的值送01H位

MOVC,00HMOV 01H,C

2.位變量修改指令

CLRC ;清“0”Cy CLRbit ;清“0”bit位

CPLC ;Cy求反

3.3.5位操作指令

CPLbit ;bit位求反

SETBC ;置“1”Cy SETBbit ;置“1”bit位這組指令將操作數(shù)指出的位清“0”、求反、置“1”,不影響其它標(biāo)志。例將P1口的P1.7置位,并清進(jìn)位位的程序如下:SETBP1.7;(P1.7)←1CLRC;(CY)←0當(dāng)(P1)=00001111B時(shí),執(zhí)行完上述指令后,(P1)=10001111B,(CY)=0。

3.3.5位操作指令

3.位邏輯指令位邏輯指令包含“與”ANL、“或”O(jiān)RL、“非”CPL位邏輯運(yùn)算操作,共有如下6條指令:ANLC,bit;(CY)←(CY)∧(bit),82bitANLC,/bit;(CY)←(CY)∧(bit),B0bitORLC,bit;(CY)←(CY)∨(bit),72bitORLC,/bit;(CY)←(CY)∨(bit),A0bit

CPLbit;(bit)←(bit),B2bitCPLC;(CY)←(C),B3

3.3.5位操作指令

4.位條件轉(zhuǎn)移指令

JCrel;PC←PC+2,若C=1則PC←PC+relJNCrel;PC←PC+2,若C≠1則PC←PC+relJBbit,rel;PC←PC+2,若(bit)=1則

PC←PC+relJNB bit,rel;PC←PC+2,若(bit)≠1則

PC←PC+relJBC bit,rel;PC←PC+3,若(bit)=1則

PC←PC+rel且(bit)←0

3.3.5位操作指令

3.3.6偽指令

前面所學(xué)的指令都會(huì)使計(jì)算機(jī)進(jìn)行一定的操作,都有與之對(duì)應(yīng)的機(jī)器碼。除此之外,單片機(jī)還提供了一些注釋性指令,這些指令,僅在匯編時(shí)向匯編程序提供信息,使其準(zhǔn)確而順利地完成匯編任務(wù)。這種指令沒有相應(yīng)的機(jī)器碼,因而不會(huì)被CPU所執(zhí)行,故稱為偽指令。

1.賦值指令常量名EQU表達(dá)式

AA EQU03HBB EQU AA*32.起始指令

ORG addr163.

3.結(jié)束指令END該指令用于源程序末尾,表示程序的結(jié)束。

4.字節(jié)定義指令

標(biāo)號(hào):DB該指令表示以標(biāo)號(hào)為起始地址,依次存放數(shù)據(jù)表中的字節(jié)數(shù)據(jù),各數(shù)據(jù)間用逗號(hào)分開

3.3.6偽指令5.字定義指令

標(biāo)號(hào):DW該指令表示以標(biāo)號(hào)為起始地址,依次存放數(shù)據(jù)表中的字?jǐn)?shù)據(jù)。

6.位定義指令

標(biāo)號(hào)

BIT 位該指令的作用類似EQU指令,不過定義的是位。

3.3.6偽指令主要內(nèi)容4.1匯編語言程序設(shè)計(jì)概述4.2匯編語言程序設(shè)計(jì)步驟4.3匯編語言程序設(shè)計(jì)第四章MCS-51匯編語言程序設(shè)計(jì)4.1匯編語言程序設(shè)計(jì)概述匯編語言程序:用匯編語言編寫的、完成特定功能的指令序列

。

匯編程序:能將匯編語言源程序轉(zhuǎn)換成機(jī)器語言目標(biāo)程序的系統(tǒng)軟件。4.1匯編語言程序設(shè)計(jì)概述匯編語言程序到機(jī)器語言程序的轉(zhuǎn)換過程稱為匯編。1.手工匯編:人工查指令表匯編。用于設(shè)計(jì)短小程序或調(diào)試程序的場(chǎng)合。2.機(jī)器匯編:用匯編程序進(jìn)行匯編。4.1匯編語言程序設(shè)計(jì)概述匯編源程序經(jīng)匯編程序匯編得到機(jī)器語言程序4.1匯編語言程序設(shè)計(jì)概述匯編的主要任務(wù):1)確定程序中每條匯編語言指令的指令機(jī)器碼。2)確定每條指令在存儲(chǔ)器中的存放地址。3)提供錯(cuò)誤信息。 4)提供目標(biāo)執(zhí)行文件(*.OBJ/*.HEX)和列表文件(*.LST)。4.1匯編語言程序設(shè)計(jì)概述一、匯編語言語句的種類和格式1.指令性語句:

指令系統(tǒng)中的全部指令,每條指令有對(duì)應(yīng)的機(jī)器代碼。2.偽指令:

匯編控制指令,僅提供匯編信息,沒有對(duì)應(yīng)的機(jī)器代碼。4.1匯編語言程序設(shè)計(jì)概述MCS-51的匯編語言的四分段格式如下:標(biāo)號(hào)字段操作碼字段操作數(shù)字段注釋字段規(guī)則:(1)標(biāo)號(hào)字段和操作字碼段之間要有冒號(hào)“:”相隔;(2)操作碼字段和操作數(shù)字段間的分界符是空格;(3)雙操作數(shù)之間用逗號(hào)相隔;(4)操作數(shù)字段和注釋字段之間的分界符用分號(hào)“;”相隔。其中,操作碼字段為必選項(xiàng),其余各段為任選項(xiàng)。4.1匯編語言程序設(shè)計(jì)概述下面是一段匯編語言程序的四分段書寫格式例:把片外存儲(chǔ)器2200H單元中的數(shù)送入片內(nèi)70H單元中。標(biāo)號(hào)域操作碼域操作數(shù)域注釋域BEGIN:MOVDPTR,#2200H;DPTR)=2200HMOVR0,#70H;(R0)=70HMOVXA,@DPTR;(A)=((DPTR)MOV@R0,A;((R0))=(A)HERE:SJMPHERE4.1匯編語言程序設(shè)計(jì)概述基本語法規(guī)則:1.標(biāo)號(hào)字段是語句所在地址的標(biāo)志符號(hào)(1)標(biāo)號(hào)后邊必須跟以冒號(hào)“:”(2)由1~8個(gè)ASCII字符組成(3)同一標(biāo)號(hào)在一個(gè)程序中只能定義一次(4)不能使用匯編語言已經(jīng)定義的符號(hào)作為標(biāo)號(hào)4.1匯編語言程序設(shè)計(jì)概述2.操作碼字段

是匯編語言指令中唯一不能空缺的部分。匯編程序就是根據(jù)這一字段來生成機(jī)器代碼的。3.操作數(shù)字段通常有單操作數(shù)、雙操作數(shù)和無操作數(shù)三種情況。如果是雙操作數(shù),則操作數(shù)之間,要以逗號(hào)隔開。4.1匯編語言程序設(shè)計(jì)概述(1)十六進(jìn)制、二進(jìn)制和十進(jìn)制形式的操作數(shù)表示。(2)工作寄存器和特殊功能寄存器的表示采用工作寄存器和特殊功能寄存器的代號(hào)來表示,也可用其地址來表示。4.注釋字段必須以分號(hào)“;”開頭,換行書寫,但必須注意也要以分號(hào)“;”開頭。4.1匯編語言程序設(shè)計(jì)概述二、偽指令

常用偽指令及其功能:1.ORG—起始地址指令:指明程序和數(shù)據(jù)塊起始地址。指令地址機(jī)器碼 源程序

ORG 2000H 2000H7830 MAIN:MOVR0,#30H2002HE6 MOVA,@R0… ORG3000H3000H23 DB23H,100,‘A’4.1匯編語言程序設(shè)計(jì)概述2.DB

—在程序存儲(chǔ)器的連續(xù)單元中定義字節(jié)數(shù)據(jù)。

例:DB12H,100,‘A’3.DW—在程序存儲(chǔ)器的連續(xù)單元中定義字?jǐn)?shù)據(jù)。

例:DW1234H,5678H4.EQU—等值。為標(biāo)號(hào)或標(biāo)識(shí)符賦值。

X1 EQU2000H

X2 EQU0FH

… 5.END—結(jié)束匯編指令。4.2匯編語言程序設(shè)計(jì)步驟1.分析問題,確定算法2.根據(jù)算法,畫出程序流程圖3.分配內(nèi)存工作區(qū)及有關(guān)端口地址4.編寫程序養(yǎng)成在程序的適當(dāng)位置上加上注釋的好習(xí)慣。5.上機(jī)調(diào)試編寫完畢的程序,必須“匯編”成機(jī)器代碼,才能調(diào)試和運(yùn)行,調(diào)試與硬件有關(guān)程序還要借助于仿真開發(fā)工具并與硬件連接。4.3匯編語言程序設(shè)計(jì)常采用以下幾種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),再加上廣泛使用的子程序和中斷服務(wù)子程序。

1.順序結(jié)構(gòu)

2.分支結(jié)構(gòu)程序中含有轉(zhuǎn)移指令,有分無條件分支、有條件分支。

3.循環(huán)結(jié)構(gòu)

4.子程序4.3匯編語言程序設(shè)計(jì)一、順序結(jié)構(gòu)也稱直線程序,程序走向只有一條路徑。例雙字節(jié)變補(bǔ)程序(設(shè)數(shù)據(jù)在R4R5中):MOV A,R5;取低字節(jié)CPL AADD A,#1;低字節(jié)變補(bǔ)MOV R5,AMOV A,R4;取高字節(jié)CPL AADDCA,#0 ;高字節(jié)變補(bǔ)MOV R4,A4.3匯編語言程序設(shè)計(jì)例:將壓縮式BCD碼分解成為單字節(jié)BCD碼。MOV R0,#40H ;設(shè)指針MOV A,@R0 ;取一個(gè)字節(jié)MOV R2,A ;暫存ANL A,#0FH ;清0高半字節(jié)INC R0MOV @R0,A ;保存數(shù)據(jù)個(gè)位MOV A,R2SWAPA ;十位換到低半字節(jié)ANL A,#0FHINC R0MOV @R0,A ;保存數(shù)據(jù)十位4.3匯編語言程序設(shè)計(jì)二、分支結(jié)構(gòu)

由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。1、單重分支程序一個(gè)判斷決策框,程序有兩條出路。條件滿足?N影響條件Y處理段4.3匯編語言程序設(shè)計(jì)例求R2中補(bǔ)碼絕對(duì)值,正數(shù)不變,負(fù)數(shù)變補(bǔ)。

MOVA,R2 JNBACC.7,NEXT;為正數(shù)?

CPLA ;負(fù)數(shù)變補(bǔ)

INCA MOVR2,ANEXT:SJMPNEXT

;結(jié)束4.3匯編語言程序設(shè)計(jì)2、多重分支程序

多次使用條件轉(zhuǎn)移指令,形成兩個(gè)以上判斷框。指令系統(tǒng)提供了非常有用的兩種多分支選擇指令:

間接轉(zhuǎn)移指令:JMP@A+DPTR;

比較轉(zhuǎn)移指令:CJNEA,direct,rel;

CJNEA,#data,rel;

CJNERn,#data,rel;

CJNE@Ri,#data,rel;4.3匯編語言程序設(shè)計(jì)例求符號(hào)函數(shù)Y=SGN(X)+1當(dāng)X>0SGN(X)=0當(dāng)X=0-1當(dāng)X<04.3匯編語言程序設(shè)計(jì)SYMB:MOVA,40H ;取X JZ STOR ;X=0,Y=X JB ACC7,MINUS;X<0 MOVA,#1 ;X>0,Y=+1 SJMPSTORMINUS:MOVA,#0FFH;X<0,Y=-1STOR:MOV41H,A ;保存Y RET4.3匯編語言程序設(shè)計(jì)三、循環(huán)程序

包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。

循環(huán)程序的構(gòu)成1.循環(huán)初始化完成循環(huán)前的的準(zhǔn)備工作。如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。循環(huán)控制?循環(huán)工作循環(huán)結(jié)束循環(huán)初始化YN4.3匯編語言程序設(shè)計(jì)2.循環(huán)處理

循環(huán)程序結(jié)構(gòu)的核心部分,完成實(shí)際的處理工作,是需反復(fù)循環(huán)執(zhí)行的部分,故又稱循環(huán)體。這部分程序的內(nèi)容,取決于實(shí)際處理問題的本身。3.循環(huán)控制

在重復(fù)執(zhí)行循環(huán)體的過程中,不斷修改循環(huán)控制變量,直到符合結(jié)束條件,就結(jié)束循環(huán)程序的執(zhí)行。循環(huán)結(jié)束控制方法分為循環(huán)計(jì)數(shù)控制法和條件控制法。4.3匯編語言程序設(shè)計(jì)4.循環(huán)結(jié)束對(duì)循環(huán)程序執(zhí)行的結(jié)果進(jìn)行分析、處理和存放。4.3匯編語言程序設(shè)計(jì)計(jì)數(shù)循環(huán)結(jié)構(gòu)

設(shè)循環(huán)計(jì)數(shù)器,控制循環(huán)次數(shù)。正計(jì)數(shù)和倒計(jì)數(shù)兩種方式。圖4-8是計(jì)數(shù)循環(huán)控制結(jié)構(gòu)。

例:為一串7位ASCII碼數(shù)據(jù)的D7位加上奇校驗(yàn),設(shè)數(shù)據(jù)存放在片外RAM的2101H起始單元,數(shù)據(jù)長(zhǎng)度在2100H單元。4.3匯編語言程序設(shè)計(jì)條件控制結(jié)構(gòu):設(shè)定循環(huán)結(jié)束標(biāo)志實(shí)現(xiàn)循環(huán)控制。圖4-9是條件控制結(jié)構(gòu)。例:找正數(shù)表最小值。正數(shù)表存在片外RAM中以LIST為起始單元,用-1作為結(jié)束標(biāo)志。4.3匯編語言程序設(shè)計(jì)START:MOV DPTR,#LIST;數(shù)表首地址

MOV B,#127;預(yù)置最小值NEXT:MOVXA,@DPTR ;取數(shù)

INC DPTR ;修改指針

CJNEA,#-1,NEXT1;是否為表結(jié)尾?

SJMPDONE ;循環(huán)結(jié)束NEXT1:CJNEA,B,NEXT2 ;比較NEXT2:JNC NEXT MOV B,A ;保存較小值

SJMPNEXTDONE:SJMPDONE4.3匯編語言程序設(shè)計(jì)例:求n個(gè)單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在43H起始單元,數(shù)據(jù)串長(zhǎng)度在42H單元,累加和不超過2個(gè)字節(jié)。單重循環(huán)

簡(jiǎn)單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。4.3匯編語言程序設(shè)計(jì)SUM:MOV R0,#42H;設(shè)指針

MOV A,@R0 MOV R2,A ;循環(huán)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論