第3章指令系統(tǒng)_第1頁
第3章指令系統(tǒng)_第2頁
第3章指令系統(tǒng)_第3頁
第3章指令系統(tǒng)_第4頁
第3章指令系統(tǒng)_第5頁
已閱讀5頁,還剩97頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章MCS-51指令系統(tǒng)內(nèi)容提要尋址方式數(shù)據(jù)傳送指令算術(shù)運算、邏輯運算指令和移位指令控制轉(zhuǎn)移指令位操作指令

3-1概述3.1.1指令格式

計算機通過執(zhí)行程序完成人們指定的任務(wù),程序由一條一條指令構(gòu)成,能為CPU識別并執(zhí)行的指令的集合就是該CPU的指令系統(tǒng)。

MCS-51單片機匯編語言指令格式:

操作碼

目的操作數(shù),源操作數(shù)操作碼指明該指令完成什么操作;

操作數(shù)是指明該指令的操作對象。

目的操作數(shù)是存放結(jié)果的。

3.1.2指令的字節(jié)數(shù)指令長度:1字節(jié)(49),2字節(jié)(46),3字節(jié)(16)。MOVA,Rn1.一字節(jié)指令:2.二字節(jié)指令:第一字節(jié):操作碼第二字節(jié):操作數(shù)MOVA,#data立即數(shù)3.三字節(jié)指令:第一字節(jié):操作碼第二、三字節(jié):操作數(shù)(數(shù)據(jù)、地址)MOVdirect,#dataMCS-51單片機指令系統(tǒng)共有111條指令,分5大類:1)數(shù)據(jù)傳送類指令(28條);2)算術(shù)運算類指令(24條);3)邏輯運算及移位類指令(25條);4)控制轉(zhuǎn)移類指令(17條);5)位操作類指令(17條)。3.1.3指令的分類

3.1.4指令中的常用符號Rn:n=(0~7),表示當前工作寄存器R0~R7中的一個。@Ri:i=(0、1),代表R0和R1寄存器中的一個,用作間接尋址寄存器。direct:8位直接字節(jié)地址(片內(nèi)RAM和SFR)#data:8位立即數(shù),即8位常數(shù)。通常使用00-FFH中的一個。#data16:表示16位立即數(shù),即16位常數(shù),取值范圍為0000H~FFFFH@DPTR:以DPTR為數(shù)據(jù)指針的間接尋址,用于對片外存儲器尋址。addr16:表示16位地址addr11:表示11位地址rel:相對偏移量(為一字節(jié)補碼)用于相對轉(zhuǎn)移指令中bit:位地址,在位地址空間中。

$:表示當前指令的地址。操作數(shù)是指令的重要組成部分,指出了參與操作的數(shù)據(jù)或數(shù)據(jù)的地址。尋找操作數(shù)的方式稱為尋址方式。

MCS-51指令系統(tǒng)共使用了7種尋址方式,包括:寄存器尋址、直接尋址、立即數(shù)尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址等。3.2尋

1.寄存器尋址寄存器尋址是指將操作數(shù)存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。

MOV R1,A采用寄存器尋址的指令如下:

MOVP1,A ;將累加器A的內(nèi)容送到P1口

MOVP1,R4 ;將寄存器R4的內(nèi)容送到P1口

CLRA ;將累加器A清0CPLA ;將累加器A中的內(nèi)容取反

RL A ;將累加器A的內(nèi)容循環(huán)左移

2.直接尋址直接尋址是指把存放操作數(shù)的內(nèi)存單元的地址直接寫在指令中。在MCS-51單片機中,可以直接尋址的存儲器主要有內(nèi)部RAM區(qū)和特殊功能寄存器SFR區(qū)。MOVA,3AH注意:1.若直接尋址的地址是SFR中的某一個時,可用名稱符號MOVA,SPMOVA,81H2.累加器有A、ACC和E0H三種表示形式INCAINCACCINC0E0H3.字節(jié)地址和位地址的區(qū)別MOVA,20HMOVC,20H

3.立即數(shù)尋址立即數(shù)尋址是指將操作數(shù)直接寫在指令中。

MOVA,#3AH

圖3.3立即數(shù)尋址示意圖注意:立即數(shù)前面必須加“#”號,以區(qū)別立即數(shù)和直接地址。采用立即數(shù)尋址的指令如下:

MOV P1,#55H ;將立即數(shù)55H送P1口

MOV 20H,#55H ;將立即數(shù)55H送20H單元

MOV A,#0F0H ;將立即數(shù)0F0H送累加器AMOV R4,#0FH ;將立即數(shù)0FH送寄存器R4中

MOV R0,#20H ;將立即數(shù)20H送寄存器R0口

4.寄存器間接尋址

將存放操作數(shù)的內(nèi)存單元的地址放在寄存器中,指令中只給出該寄存器。執(zhí)行指令時,首先根據(jù)寄存器的內(nèi)容,找到所需要的操作數(shù)地址,再由該地址找到操作數(shù)并完成相應(yīng)操作。在MCS-51指令系統(tǒng)中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱為寄存器間接尋址寄存器。注意:間接尋址寄存器前面必須加上符號“@”。MOVA,@R0

圖3.4寄存器間接尋址示意圖注意:寄存器間址指令可以拓寬尋址范圍。@Ri用于片內(nèi)片外RAM尋址。@DPTR可以覆蓋片外64KB的ROM/RAM.寄存器間址指令不能用于尋址特殊功能寄存器SFR.MOVR0,#81HMOVA,@R0

5.變址尋址變址尋址是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類尋址方式主要用于查表操作。

MOVCA,@A+DPTR

將累加器A和基址寄存器DPTR的內(nèi)容相加,相加結(jié)果作為操作數(shù)存放的地址,再將操作數(shù)取出來送到累加器A中。

MOVCA,@A+DPTR圖3.5變址尋址示意圖

6.相對尋址相對尋址是指程序計數(shù)器PC的當前內(nèi)容與指令中的操作數(shù)相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(也稱目的地址)。該類尋址方式主要用于跳轉(zhuǎn)指令。

SJMPrel

將PC當前的內(nèi)容與rel(-128~127)相加,結(jié)果再送回PC中,成為下一條將要執(zhí)行指令的地址。

SJMP54H圖3.6相對尋址示意圖

7.位尋址位尋址是指按位進行的尋址操作,而上述介紹的指令都是按字節(jié)進行的尋址操作。位尋址區(qū)包括專門安排在內(nèi)部RAM中的兩個區(qū)域:一是內(nèi)部RAM的位尋址區(qū),地址范圍是20H~2FH,共16個RAM單元,位地址為00H~7FH;二是特殊功能寄存器SFR中有11個寄存器可以位尋址,參見有關(guān)章節(jié)中位地址定義。圖3.7位尋址示意圖SETB3DH

3.3數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令是MCS-51單片機匯編語言程序設(shè)計中使用最頻繁的指令。數(shù)據(jù)傳送操作是指把數(shù)據(jù)從源地址傳送到目的地址,源地址內(nèi)容不變。

數(shù)據(jù)目的地址源地址通用格式:

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

<源操作數(shù)>源操作數(shù)可以是:累加器A、通用寄存器Rn、直接地址direct、間接地址和立即數(shù);目的操作數(shù)可以是:累加器A、通用寄存器Rn、直接地址direct和間接地址(1)內(nèi)部RAM數(shù)據(jù)傳送指令(15條)內(nèi)部RAM是數(shù)據(jù)傳送最為頻繁的部分,這其中有寄存器、累加器、RAM單元以及特殊功能寄存器之間的相互數(shù)據(jù)傳送。

dir@Ri

Rn#dataAMOVA,

Rn

#datadir

@RiMOVdir,

ARn,@Ri

#data

dir

MOVRn,MOV@Ri,

A

dir

#data

內(nèi)部RAM、SFR之間的傳送MOV指令

Adir

#data立即尋址型傳送指令MOVA,#data ;AdataMOVRn,#data ;RndataMOVdirect,#data ;directdataMOV@Ri,#data ;(Ri)dataMOVA,direct ;A(direct)MOVdirect,A ;directAMOVRn,direct ;Rn(direct)MOV@Ri

,direct ;(Ri)(direct)MOVdirect2,

direct1;

direct2(direct1)已知:R1=32H、(30H)=AAH、(31H)=BBH、(32H)=CCH,執(zhí)行如下指令后A、50H、R6、32H和P1中的內(nèi)容是什么。MOVA,30HMOV50H,AMOVR6,31HMOV@R1,30HMOVP1,32H直接尋址型傳送指令A(yù)=AAH(50H)=AAHR6=BBH(32H)=AAHP1=AAHMOVA,@RiMOV@Ri,AMOVdirect,@Ri寄存器尋址型傳送指令MOVA,Rn

MOVRn,A MOVdirect,Rn寄存器間址型傳送指令已知:

(40H)=11H、(41H)=22H、R0=40H和R1=41H,執(zhí)行如下指令后A、40H、41H和42H中的內(nèi)容是什么。MOVA,@R0MOV@R1,AMOV42H,@R1A=11H、(40H)=11H、(41H)=11H和(42H)=11H外部程序存儲器ROM數(shù)據(jù)傳送指令MOVCA,@A+DPTR;A

(A+DPTR)MOVCA,@A+PC;PCPC+1,A(A+PC)(2)外部數(shù)據(jù)傳送指令(7條)MOVDPTR,#data16 ;DPTRdata16累加器A中有一個0-9范圍內(nèi)的數(shù),用查表指令找出該數(shù)平方值。MOVDPTR,#2000H;

MOVCA,@A+DPTR(2)ORG1FFBHADDA,#dataMOVCA,@A+PCSJMP$使用Ri進行間接尋址MOVXA,@Ri

;A

(Ri)(i=0,1)MOVX@Ri,A ;(Ri)(A)(i=0,1)Ri尋址范圍:256字節(jié)注:外部RAM數(shù)據(jù)傳送只能通過累加器A進行使用DPTR進行間接尋址MOVXA,@DPTR ;A

(DPTR)MOVX@DPTR,A ;(DPTR)A外部程序存儲器RAM數(shù)據(jù)傳送指令已知外部RAM的88H單元中有一數(shù)x,試編一個能把x傳送到外部RAM的1818H單元的程序。ORG2000HMOVR0,#88HMOVDPTR,#1818HMOVXA,@R0MOVX@DPTR,ASJMP$END(3)堆棧操作指令進棧指令PUSHdirect ;SPSP+1,(SP)(direct)出棧指令POPdirect ;(direct)(SP),SPSP-1設(shè)(30H)=X,(40H)=Y,利用堆棧作為媒體編出30H和40H單元中的內(nèi)容互相交換的程序。MOVSP,#70HPUSH30HPUSH40HPOP30HPOP40H堆棧操作指令是直接尋址指令。PUSHACCPUSH00HPOPACCPOP00HPUSHAPUSHR0POPAPOPR0(4)數(shù)據(jù)交換指令(4條)在內(nèi)部RAM和累加器A之間進行整字節(jié)交換指令XCHA,Rn

;ARnXCHA,direct ;A(direct)XCHA,@Ri

;A(Ri)半字節(jié)交換指令字節(jié)單元與累加器進行低4位的半字節(jié)交換。XCHDA,@Ri

;A3~0(Ri)3~0外部RAM的20H單元有一數(shù)X,內(nèi)部RAM的20H單元有一數(shù)Y,將它們進行交換。MOVR1,#20HMOVXA,@R1XCHA,@R1MOVX@R1,A50H中有一個0~9的數(shù),編程把它變?yōu)橄鄳?yīng)的ASCII碼。MOVR1,#50HMOVA,#30HXCHDA,@R1MOV@R1,A數(shù)據(jù)傳送指令幾個注意的地方:MOVXA,@DPTR(外部RAM內(nèi)容送累加器);執(zhí)行此指令,P3.7引腳上輸出/RD有效信號(低電平),DPTR包含16位地址信息由P0(低8位)、P2口(高8位)提供,數(shù)據(jù)由P0口輸入到累加器。MOVX @DPTR,A執(zhí)行此指令,P3.6引腳上輸出/WR有效信號(低電平),DPTR包含16位地址信息由P0(低8位)、P2口(高8位)提供,數(shù)據(jù)由P0口寫入外部RAM。(1)加ADDADDA,#data;A←A+#data

ADDA,direct;A←A+(direct)ADDA,@Ri;A←A+(Ri)ADDA,Rn;A←A+Rn

3.4算術(shù)與邏輯運算和移位指令運算,CY=1,OV=1,AC=0,(PSW)=85H,(A)=6DH例如:MOVA,#0C3HADDA,#0AAH一、算術(shù)運算指令(24條)1.加法指令(13條)(2)帶進位加ADDCADDCA,#data;A←A+#data+CADDCA,direct;A←A+(direct)+CADDCA,@Ri;A←A+(Ri)+CADDCA,Rn;A←A+Rn+C例如:設(shè)累加器A內(nèi)容為0AAH,R0內(nèi)容為55H,C內(nèi)容為1,執(zhí)行指令:

ADDCA,R0將使(A)=00000000B,AC=1,CY=1,OV=0(3)增量INCINCA;A←A+1INCdirect;direct←(direct)+1INC@Ri;(Ri)←(Ri)+1INCRn;Rn←Rn+1INCDPTR;DPTR←DPTR+1例如:設(shè)R0=7EH,片內(nèi)數(shù)據(jù)RAM中(7EH)=0FFH,(7FH)=40H,則執(zhí)行下列指令:INC@R0INCR0INC@R0執(zhí)行結(jié)果:,(7EH)=00H,R0=7FH,(7FH)=41H(1)帶借位減SUBBSUBBA,#data;A←A-#data-CSUBBA,direct;A←A–(direct)-CSUBBA,@Ri;A←A-(Ri)-CSUBBA,Rn;A←A-Rn-C例1:設(shè)累加器內(nèi)容為D9H,R0內(nèi)容為87H,求兩者相減結(jié)果.

CLRCSUBBA,R0執(zhí)行后(A)=52H,CY=0,OV=0注意:單字節(jié)相減時,須先清借位位,以免相減后結(jié)果出錯.2.減法指令(8條)

例2:

雙字節(jié)無符號數(shù)相減(R0R1)-(R2R3)→(R4R5)。R0、R2、R4存放16位數(shù)的高字節(jié),R1、R3、R5存放低字節(jié),先減低8位,后減高8位和低8位借位。由于低位開始減時沒有借位,所以要先清零。其編程如下:

MOVA,R1;取被減數(shù)低字節(jié)

CLRC;清借位位

SUBBA,R3;低字節(jié)相減

MOVR5,A;保存差低字節(jié)

MOVA,R0;取被減數(shù)高字節(jié)

SUBBA,R2;兩高字節(jié)差減低位借位

MOVR4,A;保存差高字節(jié)(2)減量

DECDECA;A←A-1DECdirect;direct←(direct)-1DEC@Ri;(Ri)←(Ri)-1DECRn;Rn←Rn-1例如:執(zhí)行下述程序

MOVR1,#7FHMOV7EH,#00HMOV7FH,#40HDEC@R1;(7FH)=40H-1DECR1;R1=7FH-1DEC@R1;(7EH)=00H-1結(jié)果:R1=7EH,(7EH)=0FFH,(7FH)=3FH

3.二—十進制調(diào)整

DAA;將A中二進制相加和調(diào)整成BCD碼調(diào)整方法:和低4位大于9或有半進位則低4位加6;和的高4位大于9或有進位,則高4位加6。

指令根據(jù)相加和及標志自行進行判斷,因此該指令應(yīng)緊跟在加指令之后。

例:完成56+17的BCD加法程序。

MOVA,#56H;A存放BCD碼56HMOVB,#17H;B存放BCD碼17HADDA,B;A=6dHDAA;A=73HSJMP$56H17H6dH673H++乘MULMULAB;BA←(A)×(B)除DIVDIVAB;A(商)B(余數(shù))←A/B4.乘法和除法指令已知兩個無符號數(shù)分別在30H和31H中,求出它們的乘積,并把結(jié)果的低八位放在32H中,高八位放在33H中。ORG1000HMOVR0,#30HMOVA,@R0INCR0MOVB,@R0MULABINCR0MOV@R0,AINCR0MOV@R0,BSJMP$END雙操作數(shù)指令A(yù)與立即數(shù)、內(nèi)部數(shù)據(jù)存儲器間的邏輯操作

ANL(ORL,XRL)A,#dataANL(ORL,XRL)A,directANL(ORL,XRL)A,@RiANL(ORL,XRL)A,RnANL(ORL,XRL)direct,AANL(ORL,XRL)direct,#data寄存器R7~R0

累加器AANL,ORL,XRL寄存器間址@R1,@R0立即數(shù)#data直接directANL,ORL,XRL二、邏輯運算指令(20條)例如:設(shè)A的內(nèi)容為0C3H,R0為0AAH,執(zhí)行指令(ANL、ORL、XRL)后,結(jié)果如下:

XRLA,R0;0C3H(11000011B)

0AAH(10101010B)69H(01101001B)ANLA,R0;(A)=82HORLA,R0;(A)=EBH例:

有一雙字節(jié)正數(shù),求其負數(shù)的補碼。解:對于一個16位數(shù),R3存高8位,R2存低8位,求補結(jié)果仍存R3、R2。求補的參考程序如下:MOVA,R2;低8位數(shù)送ACPLA;低8位數(shù)取反

INCA;加1得低8位數(shù)補碼

MOVR2,A;存補碼低8位

MOVA,R3;高8位數(shù)送ACPLA;高8位取反

ADDCA,#00H;加低8位進位

MOVR3,A;存補碼高8位CLRA;A清零CPLA;A求反單操作數(shù)指令RLA;左移RRA;右移RLCA;帶進位左移RRCA;帶進位右移SWAPA三、移位指令(5條)移位指令操作示意圖RLARLCARRARRCACYCYRRARLARLCARRCA1001011000101101AA設(shè)01001011A1CY11001011A000101101A1CYCYSWAPA;4位環(huán)移

指令交換A中低和高半字節(jié),(位3~0和位4~7).例如:MOVA,#A3HSWAPA

結(jié)果:(A)=3AH3.5控制轉(zhuǎn)移和位操作類指令

控制轉(zhuǎn)移類指令的本質(zhì)是改變程序計數(shù)器PC的內(nèi)容,從而改變程序的執(zhí)行方向。控制轉(zhuǎn)移指令分為:無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令和調(diào)用/返回指令。助記符格式機器碼(B)相應(yīng)操作指令說明機器周期LJMPaddr1600000010addr15~8addr7~0PCaddr16程序跳轉(zhuǎn)到地址為addr16開始的地方執(zhí)行2注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②該指令可以轉(zhuǎn)移到64KB程序存儲器中的任意位置。

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

1)長轉(zhuǎn)移指令(1條)某程序起始地址為A080H,用什么辦法使得開機便執(zhí)行該程序。長轉(zhuǎn)移指令?

2)絕對轉(zhuǎn)移指令(1條)助記符格式機器碼(B)相應(yīng)操作指令說明機器周期AJMPaddr11a10a9a800001addr7~0PCPC+2

PC10~0addr11程序跳轉(zhuǎn)到地址為PC15~11addr11開始的地方執(zhí)行,2KB內(nèi)絕對轉(zhuǎn)移2注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②該指令轉(zhuǎn)移范圍是2KB。例

指令KWR:AJMPKWR1的執(zhí)行結(jié)果。解:設(shè)KWR標號地址=1030H,KWR1標號地址=1100H.

該指令執(zhí)行后PC首先加2變?yōu)?032H,然后由1032H的高5位和1100H的低11位拼裝成新的PC值0001000100000000B,即程序從1100H開始執(zhí)行。

3)相對轉(zhuǎn)移指令(1條)助記符格式機器碼(B)相應(yīng)操作指令說明機器周期SJMPrel10000000relPCPC+2PCPC+rel-126~+129短轉(zhuǎn)移2注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。

該指令的轉(zhuǎn)移范圍是以本指令的下一條指令為中心的-126~+129字節(jié)以內(nèi)。③在實際應(yīng)用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用標號來代替的,不一定寫出它們的具體地址。4)變址尋址的無條件轉(zhuǎn)移指令(1條)

助記符格式機器碼(B)相應(yīng)操作指令說明機器周期JMP@A+DPTR01110011PCA+DPTR64KB內(nèi)相對轉(zhuǎn)移2注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。②該指令通常用于散轉(zhuǎn)(多分支)程序。

CM:MOVR1,ARLAADDA,R1MOVDPTR,#PMTB

JMP@A+DPTRPMTB:LJMPPM0LJMPPM1LJMPPM2LJMPPM3LJMPPM4累加器中放有一個編號0~4,程序存儲器中放有起始地址為PMTB的三字節(jié)長轉(zhuǎn)移指令表。編程使機器按照累加器A中的命令編號去執(zhí)行相應(yīng)的命令程序。

1)累加器A判0指令(2條)助記符格式機器碼(B)相應(yīng)操作機器周期JZrel0110000rel若A=0,則PCPC+2+rel,否則程序順序執(zhí)行2JNZrel01110000rel若A≠0,則PCPC+2+rel,否則程序順序執(zhí)行2注意:①以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW。

轉(zhuǎn)移范圍與指令SJMP相同。2.條件轉(zhuǎn)移指令(8條)

外部RAM中以DATA1為起始地址的數(shù)據(jù)塊以零為結(jié)束標志。編程將之傳送到DATA2為起始地址的內(nèi)部RAM區(qū)。

ORG0500HMOVR0,#DATA1MOVR1,#DATA2LOOP:MOVXA,@R0

JZDONEMOV@R1,AINCR0INCR1SJMPLOOPDONE:SJMP$END

2)比較轉(zhuǎn)移指令(4條)

助記符格式機器碼(B)相應(yīng)操作機器周期CJNEA,#data,rel10110100datarel若A≠#data,則PCPC+3+rel,否則順序執(zhí)行;若A<#data,則CY=1,否則CY=02CJNERn,#data,rel10111rrrdatarel若Rn≠#data,則PCPC+3+rel,否則順序執(zhí)行;若Rn<#data,則CY=1,否則CY=02CJNE@Ri,#data,rel1011011idatarel若(Ri)≠#data,則PCPC+3+rel,否則順序執(zhí)行;若(Ri)<#data,則CY=1,否則CY=02CJNEA,direct,rel10110101directrel若A≠(direct),則PCPC+3+rel,否則順序執(zhí)行;若A<(direct),則CY=1,否則CY=02注意:①以上指令結(jié)果影響程序狀態(tài)字寄存器PSW的CY標志。②轉(zhuǎn)移范圍與SJMP指令相同。

3)減1非零轉(zhuǎn)移指令(2條)助記符格式機器碼(B)相應(yīng)操作機器周期DJNZRn,rel11011rrrrelRnRn-1,若Rn≠0,則PCPC+2+rel,否則順序執(zhí)行2DJNZdirect,rel11010101directrel(direct)(direct)-1,若(direct)≠0,則PCPC+3+rel,否則順序執(zhí)行2注意:①DJNZ指令通常用于循環(huán)程序中控制循環(huán)次數(shù)。②轉(zhuǎn)移范圍與SJMP指令相同。③以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW。

編程將片內(nèi)RAM中以DAT為起始地址的數(shù)據(jù)塊中的連續(xù)十個無符號數(shù)相加并將和送回SUM單元。設(shè)和不超過8位。

MOVR2,#0AHMOVR0,#DATCLRALOOP:ADDA,@R0INCR0

DJNZR2,LOOPMOVSUM,ASJMP$END

3.調(diào)用和返回指令(5條)

1)絕對調(diào)用指令(1條)助記符格式機器碼(B)相應(yīng)操作機器周期ACALLaddr11a10a9a810001addr7~0PCPC+2SPSP+1,(SP)PC0~7SPSP+1,(SP)PC8~15PC0~10addr112注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。

調(diào)用范圍與AJMP指令相同。設(shè)ACALLaddr11在程序存儲器中的地址為1FFEH,SP為60H。指出堆棧的變化以及被調(diào)用子程序的地址范圍。?

2)長調(diào)用指令(1條)助記符格式機器碼(B)相應(yīng)操作機器周期LCALLaddr1600010010addr15~8addr7~0PCPC+3SPSP+1,SPPC0~7SPSP+1,SPPC8~15PCaddr162注意:①該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。

②調(diào)用范圍與LJMP指令相同。

MOVSP,#70HMA:LCALL8192H其中MA=0500H,堆棧如何變化,pc的內(nèi)容是什么??3)返回指令(2條)助記符格式機器碼(B)相應(yīng)操作機器周期RET00100010PC8~15

(SP),SPSP-1PC0~7(SP),SPSP-1子程序返回指令2RETI00110010PC8~15

(SP),SPSP-1PC0~7(SP),SPSP-1中斷返回指令2注意:該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。

ORG1000HMOVSP,#70HMOVR0,#20HMOVR2,#0BHACALLZEROMOVR0,#30HMOVR2,#0FHACALLZEROMOVR0,#40HMOVR2,#10HACALLZEROSJMP$ZERO:MOV@R0,#00HINCR0DJNZR2,ZERO

RETEND試利用子程序技術(shù)編出令20H~2AH、30H~3EH和40H~4FH三個子域清零的程序。4)空操作(1條)助記符格式機器碼(B)相應(yīng)操作指令說明NOP00000000PCPC+1消耗1個機器周期注意:該指令結(jié)果不影響程序狀態(tài)字寄存器PSW。位操作類指令位操作指令的操作數(shù)是“位”,其取值只能是0或1,故又稱之為布爾操作指令。位操作指令的操作對象是片內(nèi)RAM的位尋址區(qū)(即20H~2FH)和特殊功能寄存器SFR中的11個可位尋址的寄存器。片內(nèi)RAM的20H~2FH共16個單元128個位,我們?yōu)檫@128個位的每個位均定義一個名稱:00H~7FH,稱為位地址。對于特殊功能寄存器SFR中可位尋址的寄存器的每個位也有名稱定義。

對于位尋址,有以下三種不同的寫法。第一種是直接地址寫法,如MOVC,0D2H,其中,0D2H表示PSW中的OV位地址。第二種是點操作符寫法,如MOVC,0D0H.2(PSW.2)。第三種是位名稱寫法,如MOVC,OV。助記符格式機器碼(B)相應(yīng)操作指令說明機器周期MOVC,bit10100010CYbit位傳送指令,結(jié)果影響CY標志2MOVbit,C10010010bitCY位傳送指令,結(jié)果不影響PSW2注意:位傳送指令的操作數(shù)中必須有一個是進位位C,不能在其它兩個位之間直接傳送。進位位C也稱為位累加器。

1.位傳送指令(2條)

2.位置位和位清零指令(4條)助記符格式機器碼(B)相應(yīng)操作指令說明機器周期CLRC11000011CY0位清0指令,結(jié)果影響CY標志1CLRbit11000010bitbit0位清0指令,結(jié)果不影響PSW1SETBC11010011CY1位置1指令,結(jié)果影響CY標志1SETBbit11010010bitbit1位置1指令,結(jié)果不影響PSW1ANLC,bitANLC,/bitORLC,bitORLC,/bitCPLCCPLbit

3.位運算指令(6條)例用位操作指令實現(xiàn)X=X0⊕X1,設(shè)X0為P1.0,X1為P1.1,X為ACC.0。解:因位操作指令中無異或指令,依據(jù)X=X0⊕X1=X0/X1+/X0X1用與、或指令完成,編程如下:

XBITACC.0X0BITP1.0X1BITP1.1;位定義

MOVC,X0ANLC,/X1;C=X0∧/X1MOV20H,C;暫存于20H單元

MOVC,X1ANLC,/X0;C=/X0∧X1ORLC,20H;C=X0X1+X0X1MOVX,CSJMP$4.位控制轉(zhuǎn)移指令(1)判CY標志指令(2條)

助記符格式機器碼(B)相應(yīng)操作機器周期JCrel01000000rel若CY=1,則PCPC+2+rel,否則順序執(zhí)行2JNCrel01010000rel若CY=0,則PCPC+2+rel,否則順序執(zhí)行2注意:以上結(jié)果不影響程序狀態(tài)字寄存器PSW。

MOVA,20H

CJNEA,#50D,COMPSJMPLOOP2COMP:JNCLOOP3LOOP1:LOOP2:LOOP3:已知20H中有一個無符號數(shù)X,若它小于50,則轉(zhuǎn)向LOOP1;若等于50,則轉(zhuǎn)向LOOP2執(zhí)行,若大于50,則轉(zhuǎn)向LOOP3執(zhí)行。

(2)條件轉(zhuǎn)移指令(3條)

助記符格式機器碼(B)相應(yīng)操作指令說明機器周期ANLC,bit10000010bitCYCY∧bit位與指令2ANLC/bit10110010bitCYCY∧位與指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機器碼(B)相應(yīng)操作指令說明機器周期ANLC,bit10000010bitCYCY∧bit位與指令2ANLC/bit10110010bitCYCY∧位與指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機器碼(B)相應(yīng)操作指令說明機器周期ANLC,bit10000010bitCYCY∧bit位與指令2ANLC/bit10110010bitCYCY∧位與指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機器碼(B)相應(yīng)操作指令說明機器周期ANLC,bit10000010bitCYCY∧bit位與指令2ANLC/bit10110010bitCYCY∧位與指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機器碼(B)相應(yīng)操作指令說明機器周期ANLC,bit10000010bitCYCY∧bit位與指令2ANLC/bit10110010bitCYCY∧位與指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,結(jié)果不影響CY2c機器碼(B)相應(yīng)操作指令說明機器周期ANLC,bit10000010bitCYCY∧bit位與指令2ANLC/bit10110010bitCYCY∧位與指令2ORLC,bit01110010bitCYCY∨bit位或指令2ORLC/bit10100010bitCYCY∨位或指令2CPLC10110011CY位取反指令2CPLbit10110010bit位取反指令,結(jié)果不影響CY2助記符格式機器碼(B)相應(yīng)操作機器周期JBbit,rel00100000bitrel若bit=1,則PCPC+3+rel,否則順序執(zhí)行2JNBbit,rel00110000bitrel若bit=0,則PCPC+3+rel,否則順序執(zhí)行2JBCbit,rel00010000bitrel若bit=1,則PCPC+3+rel,bit0,否則順序執(zhí)行2注意:①?JBC與JB指令的區(qū)別是:前者轉(zhuǎn)移后并把尋址位清0,后者只轉(zhuǎn)移不清0尋址位。②以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW。

已知外部RAM2000H開始處有一個數(shù)據(jù)塊以回車符(0DH)結(jié)束,編寫一個程序把正數(shù)送入片內(nèi)30H開始的區(qū)域,負數(shù)送入40H開始的區(qū)域.

MOVDPTR#2000HMOVR0,#30HMOVR1,#40HNEXT:MOVXA,@DPTRCJNEA,#0DH,COMPSJMPDONECOMP:JBACC.7,LOOPMOV@R0,AINCR0INCDPTRSJMPNEXTLOOP:MOV@R1,AINCR1INCDPTRSJMPNEXTDONE:SJMP$END常用偽指令單片機匯編語言程序設(shè)計中,除了使用指令系統(tǒng)規(guī)定的指令外,還要用到一些偽指令。偽指令又稱指示性指令,具有和指令類似的形式,但匯編時偽指令并不產(chǎn)生可執(zhí)行的目標代碼,只是對匯編過程進行某種控制或提供某些匯編信息。下面對常用的偽指令作一簡單介紹。一、匯編起始指令ORG指令格式為:ORGnn

該指令的作用是指明后面的程序或數(shù)據(jù)塊的起始地址,它總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開始。式中,nn

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論