版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章指令系統(tǒng)尋址方式傳送與交換指令算術(shù)運(yùn)算、邏輯運(yùn)算指令控制轉(zhuǎn)移指令位操作指令計(jì)算機(jī)通過執(zhí)行程序完成人們指定的任務(wù),程序由一條一條指令構(gòu)成,能為CPU識(shí)別并執(zhí)行的指令的集合就是該CPU的指令系統(tǒng)。MCS-51單片機(jī)匯編語言指令格式:
操作符
目的操作數(shù),源操作數(shù)操作符指明該指令完成什么操作;源操作數(shù)是指明該指令的操作對(duì)象。目的操作數(shù)是存放結(jié)果的。指令中操作數(shù)提供的方式稱為尋址方式。指令中的常用符號(hào)Rn:n=(0~7),表示當(dāng)前工作寄存器R0~R7中的一個(gè)。Ri:i=(0、1),代表R0和R1寄存器中的一個(gè),用作間接尋址寄存器。dir:8位直接字節(jié)地址(片內(nèi)RAM和SFR)
#data:8位立即數(shù),即8位常數(shù)??梢詾?進(jìn)制(B)、10進(jìn)制、16進(jìn)制(H)、字符(‘’)。data16:表示16位立即數(shù),即16位常數(shù),取值范圍為#0000H~#0FFFFHaddr16:表示16位地址addr11:表示11位地址rel(relative):相對(duì)偏移量(為一字節(jié)補(bǔ)碼)用于相對(duì)轉(zhuǎn)移指令中bit:位地址,在位地址空間中。
$:表示當(dāng)前指令的地址。2.1尋址方式1、立即尋址
指令中直接給出操作數(shù)的尋址方式,一般為通用寄存器或內(nèi)存單元賦常數(shù)初值。在51系列單片機(jī)的指令系統(tǒng)中,立即數(shù)用一個(gè)前面加“#“號(hào)的8位數(shù)(#data,如#30H)或16位數(shù)(#data16,如#2052H)表示。立即尋址中的數(shù),稱為立即數(shù)。例如指令:MOVA,#30H2、直接尋址
操作數(shù)的地址直接出現(xiàn)在指令中。 尋址對(duì)象:①內(nèi)部數(shù)據(jù)存儲(chǔ)器:使用它的地址。
②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。41H 78H40H 56H41H 78H40H 78H例:MOVACC,40H;A=56H
MOVP0,#45H;45H→P0,P0為直接尋址的SFR,其地址為80H,
MOV40H,41H;內(nèi)部RAM(41H)→(40H)(40H)=(41H)=78H
3、寄存器尋址
操作數(shù)存放在寄存器中。尋址對(duì)象:A,B,DPTR,R0~R7。B僅在乘除法指令中為寄存器尋址,在其他指令中為直接尋址。A可以寄存器尋址又可以直接尋址,直接尋址時(shí)寫作ACC例如:MOVA,R0;R0→A,A、R0均為寄存器尋址。
MULAB;A*B→BA,A、B為寄存器尋址。
4、寄存器間接尋址 操作數(shù)存放在以寄存器內(nèi)容為地址的單元中。例如
MOVR0,#20H
MOV@R0,A;A→(20H)
地址的內(nèi)部RAM
MOVXA,@R1;外部RAM(地址為P2R1)的內(nèi)容→A
MOVX@DPTR,A;A→以DPTR內(nèi)容為地址的外部RAM
5、變址尋址
以DPTR或PC寄存器內(nèi)容為基地址,和A的內(nèi)容為相加形成操作數(shù)的地址。其中累加器A內(nèi)容是可變的。變址尋址只能對(duì)程序存儲(chǔ)器中的數(shù)據(jù)作尋址操作,由于程序存儲(chǔ)器是只讀存儲(chǔ)器,因此變址尋址只有讀操作而無寫操作,操作指令MOVC。
例如:MOVCA,@A+DPTR6、相對(duì)尋址相對(duì)尋址是將程序計(jì)數(shù)器PC的當(dāng)前值與指令第二字節(jié)給出的偏移量相加,從而形成轉(zhuǎn)移的目標(biāo)地址。其只用于修改PC值,故主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。7、位尋址對(duì)片內(nèi)RAM中20H~2FH中的128個(gè)位地址及SFR中的可位尋址的位地址尋址。屬于直接尋址,由指令給出直接位地址。與直接尋址不同的是:位尋址只給出位地址,而不是字節(jié)地址。 例如:MOVC,20H;20H位的內(nèi)容送CY標(biāo)志位,C稱為位累加器。MOVA,20H;字節(jié)尋址,將內(nèi)部
RAM中20H單元中的內(nèi)容送給累加器A。以上兩條指令均為尋址,究竟是位尋址還是字節(jié)尋址,根據(jù)兩操作數(shù)類型一致的原則,由另一個(gè)操作數(shù)決定。
dir@Ri
Rn#dataAMOVA,
Rn
#datadir
@RiMOVdir,
ARn,@Ri
#data
dir
MOVRn,MOV@Ri,
A
dir
#data2.2數(shù)據(jù)傳送與交換指令2.2.1傳送類指令1、內(nèi)部RAM、SFR之間的傳送指令MOV
Adir
#data例R1=20H,(20H)=55H,指令MOVA,@R1執(zhí)行后,A=55H。例
(40H)=30H,指令MOVR7,40H執(zhí)行后,R7=30H。例MOVR7,#40H執(zhí)行后,R7=40H。編程將R3的內(nèi)容送R1。MOVA,R3MOVR1,A注意:MOVR1,R3是錯(cuò)的!A
外部數(shù)據(jù)存儲(chǔ)器程序存儲(chǔ)器
@Ri,A@DPTR,AA,@RiA,@DPTR間接尋址MOVXMOVCA,@A+PCA,@A+DPTR變址尋址2、外部存儲(chǔ)器和A累加器之間的傳送外部數(shù)據(jù)存儲(chǔ)器及程序存儲(chǔ)器只能和A之間進(jìn)行傳送(1)訪問外部數(shù)據(jù)存儲(chǔ)器指令MOVXMOVCMOVX指令舉例
例:
實(shí)現(xiàn)片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送(2000H)→(2100H)。
MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A
;DPTR=2000H
;DPTR=2100H;A←X
;(2100H)←Xx片外數(shù)據(jù)存儲(chǔ)器不能直接尋址。下列為非法指令:
MOVXA,2000H×MOVX2100H,2000H×使用P2口和8位寄存器Ri間址:MOVP2,#20H ;高位地址MOVR0,#00 ;低位地址MOVXA,@R0 ;讀片外RAMMOVP2,#21H ;改變高位地址MOVX@R0,A ;寫片外RAM(2)訪問程序存儲(chǔ)器指令
查表指令MOVC
注:①只能從程序存儲(chǔ)器讀取數(shù)據(jù)到A累加器。
②只能使用變址尋址方式
多用于查常數(shù)表程序,直接求取常數(shù)表中的函數(shù)值1)DPTR為基址寄存器
MOVCA,@A+DPTR;A←(A+DPTR)
查表范圍為64KB程序存儲(chǔ)器任意空間。即:0000H~FFFFH2)PC為基址寄存器
MOVCA,@A+PC ;A←(A+PC)
例:查表法求Y=X2。設(shè)X(0≤X≤15)在片內(nèi)RAM
20H單元,要求將查表求Y,存入片內(nèi)RAM21H單元1)用DPTR作基址寄存器
ORG0100H SQU: MOVDPTR,#TAB ;確定表首地址
MOVA,20H ;取X
MOVCA,@A+DPTR;查表求Y=X2 MOV21H,A ;保存Y RET ;子程序結(jié)束 … ;其它程序段
ORG0200H ;常數(shù)表格首地址TAB: DB00,01,04,09,…,225;平方表2.2.2交換指令
實(shí)現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送1.字節(jié)交換指令
XCHA,Rn ;A←→Rn
XCHA,@Ri ;A←→(Ri)XCHA,dir ;A←→(dir)將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換例設(shè)A=29H,(2AH)=38H執(zhí)行指令
XCHA,2AH后,A=? ,(2AH)=?38H29HXCH60H,61H←對(duì)嗎?2.低半字節(jié)交換指令XCHD,
3.A的高、低半字節(jié)交換指令SWAP
XCHDA,@Ri;A0~3←(Ri)0~3 SWAPA ;A4~7←A0~385H×◎◎×AA
dir@Ri
Rn#dataA
dir@Ri
Rn#dataAADDADDCSUBBANLORLXRLA,
Rn,@Ri
#datadir加進(jìn)位加借位減與或異或2.3算術(shù)運(yùn)算和邏輯運(yùn)算指令1、以A為目的操作數(shù)的算術(shù)、邏輯運(yùn)算指令(24條)
2、以dir為目的操作數(shù)僅有邏輯運(yùn)算指令(6條)A#data
dir與ANL或ORL異或XRLdir,#dataA
算術(shù)類指令的操作意義非常明確,不一一贅述,邏輯運(yùn)算是按位進(jìn)行的,兩數(shù)運(yùn)算的運(yùn)算法則是:與:有“0”則“0”;或:有“1”則“1”
異或:同為“0”,異為“1”;與“0”異或值不變:與“1”異或值變反。邏輯指令常用于對(duì)數(shù)據(jù)位進(jìn)行加工。
00001111
1000011010001001例:A=0FH,執(zhí)行ORLA,#86H后A=8FH例:A=0FH,執(zhí)行XRLA,#86H后A=89H+ARn@RidirDPTRINC
4、減1指令:DECARn@Ridir3、加1指令:5、十進(jìn)制調(diào)整指令計(jì)算機(jī)完成二進(jìn)制加法其和也為二進(jìn)制,如果是十進(jìn)制相加(即BCD碼相加)想得到十進(jìn)制的結(jié)果,就必須進(jìn)行十進(jìn)制調(diào)整(即BCD碼調(diào)整)。調(diào)整指令:DAA;將A中二進(jìn)制相加和調(diào)整成BCD碼調(diào)整方法:和低4位大于9或有半進(jìn)位則低4位加6;和的高4位大于9或有進(jìn)位,則高4位加6。指令根據(jù)相加和及標(biāo)志自行進(jìn)行判斷,因此該指令應(yīng)緊跟在加指令之后,至少在加指令和該指令之間不能有影響標(biāo)志的指令。DAA指令只對(duì)一個(gè)字節(jié)和調(diào)整,如為多字節(jié)相加必須進(jìn)行多次調(diào)整。此指令不能對(duì)減法結(jié)果進(jìn)行調(diào)整。例:完成56+17的編程。
MOVA,#56H;A存放BCD碼56HMOVB,#17H;B存放BCD碼17HADDA,B;A=6dHDAA;A=73HSJMP$56H17H6dH673H++CYCYRRARLARLCARRCA6、移位指令(僅對(duì)A)1001011000101101AA設(shè)01001011A1CY11001011A000101101A1CYCY7、乘除法指令乘法指令:
MULAB;A×BBA說明:本指令實(shí)現(xiàn)8位無符號(hào)乘法。A、B各放一個(gè)8位符號(hào)數(shù),指令執(zhí)行后,16位積的高8位在B中,低8位在A中。
除法指令:
DIVAB;A÷B商在A中,余數(shù)在B中2.4控制轉(zhuǎn)移指令
這一類指令的功能是改變指令的執(zhí)行順序,轉(zhuǎn)到指令指示的新的PC地址執(zhí)行。MCS-51單片機(jī)的控制轉(zhuǎn)移指令有以下類型:無條件轉(zhuǎn)移:無需判斷,執(zhí)行該指令就轉(zhuǎn)移到目的地址。條件轉(zhuǎn)移:需判斷標(biāo)志位是否滿足條件,滿足條件轉(zhuǎn)移到目的地址,否則順序執(zhí)行。絕對(duì)轉(zhuǎn)移:轉(zhuǎn)移的目的地址用絕對(duì)地址指示,通常為無條件轉(zhuǎn)移。相對(duì)轉(zhuǎn)移:轉(zhuǎn)移的目的地址用相對(duì)于當(dāng)前PC的偏差(偏移量)指示,通常為條件轉(zhuǎn)移。長(zhǎng)轉(zhuǎn)移或長(zhǎng)調(diào)用:目的地址距當(dāng)前PC64KB地址范圍內(nèi)短轉(zhuǎn)移或短調(diào)用:目的地址距當(dāng)前PC2KB地址范圍。2.4.1調(diào)用程序和返回類指令1.長(zhǎng)調(diào)用
LCALLaddr16;addr16→PC0~15
說明:(1)該指令功能是①保護(hù)斷點(diǎn),即當(dāng)前PC(本指令的下一條指令的首地址)壓入堆棧。②子程序的入口地址addr16送PC,轉(zhuǎn)子程序執(zhí)行。(2)本指令為64KB地址范圍內(nèi)的調(diào)子程序指令,子程序可在64KB地址空間的任一處。2.短調(diào)用
ACALLaddr11;addr11→PC0~10說明:(1)該指令的功能是①保護(hù)斷點(diǎn),即當(dāng)前PC壓入堆棧。
②addrl11→PC0~10,而PC11~15保持原值不變。(2)本指令為2KB地址范圍的調(diào)子程序指令,子程序入口距當(dāng)前PC不得超過2KB地址范圍。
例:子程序調(diào)用指令A(yù)CALL在程序存儲(chǔ)器中的首地址為0100H,子程序入口地址為0205H。試確定能否使用ACALL指令實(shí)現(xiàn)調(diào)用?
解:
因?yàn)锳CALL指令首地址在0100H,而ACALL是2字節(jié)指令,所以下一條指令的首地址在0102H。0102H和0205H在同一2KB地址范圍內(nèi),故可用ACALL調(diào)用。3.子程序返回指令
RET
;從調(diào)用子程序返回。功能:從棧頂彈出斷點(diǎn)到PC。RETI;從中斷服務(wù)程序返回。功能:從棧頂彈出斷點(diǎn)到PC,并恢復(fù)中斷優(yōu)先級(jí)狀態(tài)觸發(fā)器。2.4.2轉(zhuǎn)移指令1.無條件轉(zhuǎn)移指令(1)短轉(zhuǎn)移
AJMPaddr11;addr11→PC0~10說明:①轉(zhuǎn)移范圍:本指令為2KB地址范圍內(nèi)的轉(zhuǎn)移指令。對(duì)轉(zhuǎn)移目的地址的要求與ACALL指令對(duì)子程序入口地址的要求相同。(2)長(zhǎng)轉(zhuǎn)移LJMPaddr16;addr16→PC0~15說明:①本指令為64KB程序存儲(chǔ)空間的全范圍轉(zhuǎn)移指令。轉(zhuǎn)移地址可為16位地址中的任意值。
(3)間接轉(zhuǎn)移
JMP@A+DPTR;A+DPTR→PC例2-20A=02H,DPTR=2000H,指令JMP@A+DPTR執(zhí)行后,PC=2002H。也就是說,程序轉(zhuǎn)移到2002H地址單元去執(zhí)行。(4)無條件相對(duì)轉(zhuǎn)移
SJMPrel
;PC+rel→PC,即As+2+rel→PC,說明:As為源地址(本指令的首地址),該指令為2字節(jié)指令,執(zhí)行本指令時(shí)
當(dāng)前PC=As+2,
rel
為轉(zhuǎn)移的偏移量,轉(zhuǎn)移可以向前轉(zhuǎn)(目的地址小于源地址),也可以向后轉(zhuǎn)(目的地址大于源地址),因此偏移量rel
是1字節(jié)有符號(hào)數(shù),用補(bǔ)碼表示(-128~+127),所以指令轉(zhuǎn)移范圍在離源地址As的-126~+129字節(jié)之間。2.條件轉(zhuǎn)移指令(1)累加器為零(非零)轉(zhuǎn)移JZrel
;A=0則轉(zhuǎn)移(As+2+rel→PC)
JNZrel
;A≠0則轉(zhuǎn)移(As+2+rel→PC)。(2)減1不等于零轉(zhuǎn)移DJNZRn,rel
;Rn-1Rn
,若Rn
≠0,則轉(zhuǎn)移(As+2+rel→PC)
DJNZdir,rel;(dir)-1(dir),若(dir)≠0,則轉(zhuǎn)移(As+3+rel→PC)
本指令有自動(dòng)減1功能。(3)比較轉(zhuǎn)移指令CJNEA,dir,rel;A≠dir,則轉(zhuǎn)移(As+3+rel→PC)
CJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel說明:①CJNE指令都是3字節(jié)指令,作減操作,不回送結(jié)果,影響CY標(biāo)志。②若第一操作數(shù)大于或等于第二操作數(shù),則標(biāo)志CY=0。若第一操作數(shù)小于第二操作數(shù),則CY=1。這幾條指令除實(shí)現(xiàn)兩操作數(shù)相等與否的判斷外,利用對(duì)CY的判斷,還可完成兩數(shù)大小的比較。注意:這里就體現(xiàn)了標(biāo)志位的作用了,即控制轉(zhuǎn)移指令的條件。試說明以下一段程序運(yùn)行后A中的結(jié)果。
MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$根據(jù)程序可知A=10+9+8+7+6+5+4+3+2+1=55=37H例:
編寫程序,要求讀P1端口上的信息,若不為55H,則程序等待,直到P1端口為55H時(shí),程序才往下順序執(zhí)行。程序:MOVA,#55H;A=55HCJNEA,P1,$;P1≠55H,則程序循環(huán)執(zhí)行本指令
…2.4.3空操作指令
NOP機(jī)器碼00該指令經(jīng)取指,譯碼后不進(jìn)行任何操作(空操作)而轉(zhuǎn)到下一條指令,常用于生產(chǎn)一個(gè)機(jī)器周期的延時(shí),或上機(jī)修改程序時(shí)作填充指令,以方便增減指令。例:將A累加器的低四位取反四次、高四位不變。每變換一次,從P1輸出。方法一加1計(jì)數(shù):MOVR0,#00H;計(jì)數(shù)初值送0LL:XRLA,#0FH;高4位不變,低四位取反
INCR0;次數(shù)加1MOVP1,A;從P1輸出
CJNER0,#04H,LL;不滿四次循環(huán)
RET方法二減1計(jì)數(shù):MOVR0,#04H;計(jì)數(shù)初值送4LL:XRLA,#0FHMOVP1,ADJNZR0,LL;次數(shù)減1不等于0循環(huán)
RET例:在內(nèi)部RAM的40H地址單元中,有1字節(jié)符號(hào)數(shù),編寫求其絕對(duì)值后放回原單元的程序。程序如下:MOVA,40HANLA,#80HJNZNEG;為負(fù)數(shù)轉(zhuǎn)移
SJMP$;為正數(shù),絕對(duì)值=原數(shù),NEG:MOVA,40H;為負(fù)數(shù)求補(bǔ),得其絕對(duì)值
CPLA,有符號(hào)數(shù)以補(bǔ)碼形式存放INCAMOV40H,ASJMP$
MOV20H,#0A4H;______________________MOVA,#0D6H;______________________MOVR0,#20H;______________________MOVR2,#57H;______________________ANLA,R2;______________________ORLA,@R0;______________________SWAPA;______________________CPLA;______________________ORL20H,A;______________________SJMP$;______________________例:對(duì)下列程序注釋,并分析程序運(yùn)行后(20H)=______,A=_______2.5位操作指令MCS-51單片機(jī)的特色之一就是具有豐富的位處理功能,以進(jìn)位標(biāo)志CY為位累加器C,使得開關(guān)量控制系統(tǒng)的設(shè)計(jì)變得十分方便。在程序中位地址的表達(dá)有多種方式:
1)用直接位地址表示,如D4H。
2)用“·”操作符號(hào)表示,如PSW.4,或D0H.43)用位名稱表示,如RS1。4)用用戶自定義名表示。如ABCBITD4H,其中ABC定義為D4H位的位名,BIT為位定義偽指令。以上各例均表示PSW.4的RS1位。位操作類指令的對(duì)象是C和直接位地址,由于C是位累加器,所以位的邏輯運(yùn)算指令目的操作數(shù)只能是C,這就是位操作指令的特點(diǎn)。下面將位操作的17條指令介紹如下。1.位清零
CLRC;0→CY
CLRbit;0→bit2.位置1SETBC;1→CYSETBbit;1→bit3.位取反
CPLC;CY→CYCPLbit;bit→bit4.位與
ANLC,bit;CY∧(bit)→CY
ANLC,/bit;CY∧(bit)→CY
5.位或
ORLC,bit;CY∨(bit)→CY
ORLC,/bit;CY∨(bit)→CY6.位傳送MOVC,bit;(
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專利使用權(quán)授權(quán)合同范本
- 個(gè)人建房合作開發(fā)合同
- 專業(yè)技術(shù)服務(wù)承包合同
- 上海房屋交易合同范本
- 二手房購房合同定金支付協(xié)議
- 鄉(xiāng)村住宅買賣合同范本
- 個(gè)人農(nóng)田種植承包合同范本
- 臨時(shí)攤位租賃合同細(xì)則
- 個(gè)人買賣合同范本
- 互助服務(wù)領(lǐng)域推廣合作合同
- 課題申報(bào)參考:生活服務(wù)數(shù)字化轉(zhuǎn)型下社區(qū)生活圈建設(shè)理念、模式與路徑研究
- DCMM練習(xí)題練習(xí)試題
- 《工業(yè)化建筑施工階段碳排放計(jì)算標(biāo)準(zhǔn)》
- 廢舊保溫棉處置合同范例
- 2024年數(shù)據(jù)編織價(jià)值評(píng)估指南白皮書-Aloudata
- 托育園老師培訓(xùn)
- 水文水利課程設(shè)計(jì)報(bào)告
- 600字A4標(biāo)準(zhǔn)作文紙
- GB/T 18015.2-2007數(shù)字通信用對(duì)絞或星絞多芯對(duì)稱電纜第2部分:水平層布線電纜分規(guī)范
- FCI測(cè)試試題附答案
- 新編《公路隧道養(yǎng)護(hù)技術(shù)規(guī)范》解讀課件
評(píng)論
0/150
提交評(píng)論