《單片機技術(shù)及應(yīng)用》課件第3章 MCS-51的指令系統(tǒng)_第1頁
《單片機技術(shù)及應(yīng)用》課件第3章 MCS-51的指令系統(tǒng)_第2頁
《單片機技術(shù)及應(yīng)用》課件第3章 MCS-51的指令系統(tǒng)_第3頁
《單片機技術(shù)及應(yīng)用》課件第3章 MCS-51的指令系統(tǒng)_第4頁
《單片機技術(shù)及應(yīng)用》課件第3章 MCS-51的指令系統(tǒng)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章MCS-51的指令系統(tǒng)尋址方式指令分類指令格式及約定標(biāo)識符指令格式【標(biāo)號:】操作符【目的操作數(shù)】【,源操作數(shù)】【;注釋】約定標(biāo)識符Ri和Rn:i=0、1,n=0~7。#data/#data16:表示8/16位立即數(shù)。rel:8位偏移量。-128~127,補碼。addr16/addr11:16/11位直接地址。direct:8位直接地址。內(nèi)部RAM或SFR。bit:直接位地址(X)、((X))、“→”§3.3MCS-51的尋址方式寄存器尋址直接尋址寄存器間接尋址立即數(shù)尋址基址+變址尋址位尋址相對尋址指令的寄存器中是操作數(shù):

MOVA,R0指令直接給出操作數(shù)的地址:

MOVA,30H指令的寄存器中是操作數(shù)的地址:

MOVA,@R0操作數(shù)是常數(shù):

MOVA,#30H只能訪問程序存儲器:

MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR指令直接給出操作數(shù)的位地址:

SETBP1.0CLRCANLP2.5專門為轉(zhuǎn)移指令而設(shè)置的尋址:

SJMPrel;(PC)+rel→PCJZrel;(A)=0,則(PC)+rel→PC必須搞清楚操作數(shù)在什么地方?用什么方式尋址才能得到它?這不僅與尋址相關(guān),而且與指令也有關(guān)系!立即數(shù)尋址MOVA,#40H;40H→A直接尋址MOVA,40H;(40H)→A寄存器尋址MOVA,Rn;(Rn)→A,n=0~7寄存器間接尋址MOVA,@Ri;((Ri))→A,片內(nèi)RAM,i=0、1MOVXA,@Ri;((Ri))→A,片外RAMMOVXA,@DPTR;((DPTR))→A,片外RAMPUSHA ;(SP)+1→SP,(A)→(SP)POPA ;((SP))→A,(SP)-1→SP判斷以下指令的尋址方式尋址方式舉例基址+變址尋址-操作數(shù)在程序存儲器中MOVCA,@A+DPTR

;((A)+(DPTR))→AMOVCA,@A+PC

;((A)+(PC))→AJMP@A+DPTR

;((A)+(DPTR))→PC相對尋址為轉(zhuǎn)移指令所用目的地址=轉(zhuǎn)移指令所在地址+該轉(zhuǎn)移指令的字節(jié)數(shù)+rel=下條指令地址+rel=(PC)+relrel,為偏移量,取值范圍-128~+127。標(biāo)志相當(dāng)于PC的兩個方向的轉(zhuǎn)移。在程序中,我們用標(biāo)號表示。不必關(guān)心rel的值。查表指令由位指令提供的位操作位地址的表示直接地址,SETB0AFH位標(biāo)號,STEBEA單元地址.位數(shù),STEB(A8H).7寄存器符號.位數(shù),STEBIE.7兩個位尋址區(qū)-內(nèi)部RAM中具有位地址的區(qū)域與SFR。位尋址§3.4MCS-51指令分類數(shù)據(jù)傳送類算數(shù)操作類邏輯運算類控制轉(zhuǎn)移類位操作類指令功能指令執(zhí)行周期數(shù)對程序狀態(tài)字的影響1、數(shù)據(jù)傳送類:普通傳送指令

1、片內(nèi)數(shù)據(jù)傳送指令

2、片外數(shù)據(jù)傳送指令

3、程序存儲傳送指令數(shù)據(jù)交換指令堆棧操作指令普通傳送類指令(1)、片內(nèi)數(shù)據(jù)傳送指令MOV指令格式:MOV目的操作數(shù),源操作數(shù)其中:源操作數(shù)(A、Rn、@Ri、direct、#data)

目的操作數(shù)(A、Rn、@Ri、direct、DPTR)①以A為目的操作數(shù)(4條)

MOVA,Rn/direct/@Ri/#data②以寄存器Rn為目的的操作數(shù)的指令(3條)

MOVRn,Rn/direct/A/#data③以直接地址direct為目的操作數(shù)的指令(5條)

MOVdirect,Rn/direct/A/@Ri/#data④以間接地址@Ri為目的操作數(shù)的指令(3條)

MOV@Ri,direct/A/#data⑤16位數(shù)據(jù)傳送指令(1條)

MOVDPTR,#data16注意:片內(nèi)數(shù)據(jù)存儲器傳送指令中不允許有如下指令

MOVRn,RnMOV@Ri,Ri(2)、片外數(shù)據(jù)傳送指令MOVX指令格式:MOVX目的操作數(shù),源操作數(shù)其中:源操作數(shù)(A、@Ri、@DPTR)

目的操作數(shù)(A、@Ri、@DPTR)①以A為目的操作數(shù)(4條)

MOVXA,@DPTR/@Ri②以寄存器@DPTR/@Ri

為目的的操作數(shù)的指令(3條)

MOV@DPTR/@Ri

,A(3)程序儲存器數(shù)據(jù)傳送指令MOVC

這類指令共有2條,兩條指令都為基址加變址間接尋址方式。其功能是將存放在程序存儲器ROM中的表格數(shù)據(jù)進行查找傳送,所以又稱查表指令。MOVCA,@A+DPTRMOVCA,@A+PC

2、堆棧指令(共2條)(1)、入棧指令PUSH

PUSHdirect

;(SP)+1→SP,(direct)→(SP)(2)、出棧指令POP

POPdirect

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

3、交換指令(共5條)⑴、字節(jié)交換XCHXCHA,Rn/direct/@Ri

;字節(jié)交換⑵、半字節(jié)交換XCHDXCHDA,@Ri;低半字交換⑶、自交換SWAPSWAPA ;A中高低半字交換總結(jié)MOVC的間接尋址數(shù)據(jù)與#data來自程序存儲器MOVX指令的間接尋址數(shù)據(jù)來自外部數(shù)據(jù)存儲器其余指令的數(shù)據(jù)來自內(nèi)部RAM數(shù)據(jù)傳送類指令的狀態(tài)標(biāo)志當(dāng)這類指令的目標(biāo)地址是累加器A時,指令執(zhí)行后P標(biāo)志會受影響。其它標(biāo)志位是不受影響的。ADDA,Rn/direct/@Ri/#dataADDCA,Rn/direct/@Ri/#dataSUBBA,Rn/direct/@Ri/#dataINCRn/direct/@Ri/DPTRDECRn/direct/@RiMULABDIVABDAA2、算數(shù)操作類:除增1和減1指令,其余對Cy、Ac、OV、P有影響。關(guān)于OV,有效于符號數(shù)加法運算中,對于8位符號數(shù)其數(shù)的范圍在:-128~+127。超出即溢出。其表現(xiàn)為:當(dāng)結(jié)果應(yīng)該為正時,卻為負(fù);當(dāng)結(jié)果應(yīng)該為負(fù)時,卻為正,OV=1,說明溢出。否則,沒有溢出。舉例算數(shù)類指令的狀態(tài)標(biāo)志例3-1、異號數(shù)相加。指令執(zhí)行前:(A)=49H,(30H)=ECH。執(zhí)行指令:ADDA,30H01001001+)111011001←00110101指令執(zhí)行后:(A)=35H,Cy=1,Ac=1,OV=0,P=0例3-2、同號數(shù)相加。指令執(zhí)行前:(A)=ACH,(R1)=65H,(65H)=D3H。執(zhí)行指令:ADDA,@R110101100+)110100111←01111111指令執(zhí)行后:(A)=7FH,Cy=1,Ac=0,OV=1,P=1關(guān)于DA指令的BCD調(diào)整

由于ADD指令只能進行2進制運算;所以,在BCD碼的加法運算中,其運算結(jié)果可能不再是BCD碼;這時,用DA指令對結(jié)果進行調(diào)整,使其仍為BCD碼。下面是可能出現(xiàn)的3種情況(P75例如):⑴、無進位,<9。例、2+4=60010

+)0100

0110⑵、無進位,>9。例、5+7=120101

+)0111

1100⑶、有進位,<9。例、9+7=161001

+)0111

1←0000由以上3種BCD碼運算結(jié)果可以得出:①的運算結(jié)果是正確的②的運算結(jié)果錯誤,因為BCD碼十進制數(shù)中只有0~9這10組四位二進制數(shù)沒有1100這個編碼。③運算結(jié)果錯誤,正確結(jié)果為16,而運算結(jié)果10。

調(diào)整方法①累加器低4位大于9或者輔助進位位Ac=1,則低4位加6調(diào)整。②累加器高4位大于9或者進位位Cy=1,則高4位加6調(diào)整。③累加器高4位為9,低4位大于9,則高4位和低4位分別加6調(diào)整。上述BCD碼的加法運算進行十進制調(diào)整都是通過“DAA”指令自動實現(xiàn)的。3、邏輯運算類指令:ANLA,Rn/direct/@Ri/#dataANLdirect,A/#dataORLA,Rn/direct/@Ri/#dataORLdirect,A/#dataXRLA,Rn/direct/@Ri/#dataXRLdirect,A/#dataCLRACPLARLARLCARRARRCA

這類指令,除檢驗?zāi)康睦奂悠鰽的P標(biāo)志外,其它標(biāo)志位不受影響。例、將邏輯單元中的某些位(如:D2、D5、D7)置1,清0,取反,其余位不變。置1 將置1的位“或”1,不變的位“或”0。 ORLP1,#10100100B清0 將清0的位“與”0,不變的位“與”1。 ANLP1,#01011011B取反 將取反的位“異或”1,不變的位“異或”0。XRLP1,#10100100B4、控制轉(zhuǎn)移類指令:子程序調(diào)用無條件轉(zhuǎn)移條件轉(zhuǎn)移空操作ACALLaddr11LCALLaddr16RET ;子程序返回RETI ;中斷返回AJMPaddr11LJMPaddr16SJMPrelJMP@A+DPRTJZrel ;(A)=0轉(zhuǎn)移。JNZrel ;(A)≠0轉(zhuǎn)移。CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Rn,#data,relDJNZRn,relDJNZdirect,relNOP5、位操作類指令

:功能類型同前述關(guān)于bit尋址,面對所有具有位地址的單元。指令功能指令功能MOV

C,bit直接尋址位送CANL

C,bitC邏輯與直接尋址位MOV

bit,CC送直接尋址位ANL

C,/bitC邏輯與直接尋址位的反CLR

CC清零ORL

C,bitC邏輯或直接尋址位CLR

bit直接尋址位清零ORL

C,/bitC邏輯或直接尋址位的反CPL

CC取反JC

relC為1轉(zhuǎn)移CPL

bit直接尋址位取反JNC

relC為零轉(zhuǎn)移SETB

CC置位JB

bit,rel直接尋址位為1轉(zhuǎn)移SETB

bit直接尋址位置位JNB

bit,rel直接尋址為0轉(zhuǎn)移JBC

bit,rel直接尋址位為1轉(zhuǎn)移并清該位位操作類指令表作業(yè):P95一、二3.7

MCS-51匯編語言程序設(shè)計匯編語言源程序的基本結(jié)構(gòu)

順序結(jié)構(gòu)分支循環(huán)子程序中斷服務(wù)程序分支程序設(shè)計例:求累加器A中,單字節(jié)符號數(shù)的補碼。complement: JNBACC.7,return MOVC,ACC.7 ;保存符號位

CLPA ADDA,#1 MOVACC.7,C

;恢復(fù)符號位return: RET分支程序-單分支設(shè)計方法圖1圖2圖3構(gòu)成條件循環(huán)循環(huán)程序設(shè)計循環(huán)構(gòu)成初始化循環(huán)處理循環(huán)控制循環(huán)結(jié)構(gòu)循環(huán)的控制計數(shù)循環(huán)DJNZRn/direct,rel條件循環(huán)結(jié)構(gòu)1結(jié)構(gòu)2子程序設(shè)計

具有特定功能的、獨立的、通用的程序模塊。子程序的結(jié)構(gòu)子程序名:就是子程序中的第一條指令的標(biāo)號。PUSH指令要保護的是子程序要用到的公共資源。在子程序使用完返回上級程序時,必須將這些公共資源恢復(fù)成原來狀態(tài)。在使用調(diào)用指令時,要注意ACALL與LCALL的區(qū)別參數(shù)傳遞:在調(diào)用子程序前,首先要將需要子程序處理的原始數(shù)據(jù)放入子程序指定的地方。在子程序中,程序自然會從該處取走數(shù)據(jù),進行處理。返回后,上級程序應(yīng)在子程序指定的地方去取處理結(jié)果。main:…… …… LCALLsubprogram …… ……subprogram:

PUSHx1 ;保護現(xiàn)場

PUSHx2 ……

處理程序鍛

…… POPx2 ;恢復(fù)現(xiàn)場

POPx1 RET延時子程序一條DJNZ指令能夠延時最長時間每個機器周期時間×指令周期數(shù)×循環(huán)次數(shù)=延時時間每個機器周期時間×2×256=延時時間如果時鐘=12MHz,則,1μS×2×256=512μS

雙重循環(huán)延時子程序分析

總周期數(shù)=(2×L1+2+1+X)×L2;L1、L2取值應(yīng)使:(2×L1+2+1+X)×L2=延時時間÷周期時間=總周期數(shù)delay: MOVR7,#L2loop2:MOVR6,#L1 …… ;Xloop1:DJNZR6,loop1

DJNZR7,loop2如果時鐘=12MHz,設(shè)計50mS延時子程序。總周期數(shù)=50000μS÷1μS=50000=250×200如果,L2=200,則,(2×L1+2+1+X)=(2×L1+3+X)=250L1=(250-3-X)÷2=(250-3-1)÷2=123……取X=1,增加一條NOP指令。如果時鐘=12MHz,設(shè)計650μS延時子程序??傊芷跀?shù)=650μS÷1μS=650=13×50如果,L2=50,則,(2×L1+2+1+X)=(2×L1+3+X)=13L1=(13-3-X)÷2=(13-3-0)÷2=5……取X=0,不需增加NOP指令。如果時鐘=6MHz,設(shè)計65mS延時子程序。總周期數(shù)=65000μS÷2μS=32500=130×250如果,L2=250,則,(2×L1+2+1+X)=(2×L1+3+X)=130L1=(130-3-X)÷2=(130-3-1)÷2=63……取X=1,增加一條NOP指令。如果時鐘=12MHz,采用單循環(huán)設(shè)計650μS延時子程序??傊芷跀?shù)=650μS÷1μS=650=5×130如果單循環(huán),總周期數(shù)=(2+X)×L1;如果取L1=130,則,(2+X)=5;所以,X=3……需增加3條NOP指令。delay: MOVR7,#L1loop1:…… ;X DJNZR6,loop1查表程序設(shè)計表格構(gòu)建表格的使用:查表指令MOVCA,@A+PCMOVCA,@A+DPTRxf(x

)0f(0)1f(1)……n-1f(n-1)算出所有f(x),按x的順序,依次存放在存儲器中。x是f(x)的自變量,實際上也是f(x)的相對地址?;?變址的計算,要的是f(x)在程序存儲器中的絕對地址。關(guān)于f(x)的地址討論相對地址f(x)012345(n-1)×2f(0)f(1)f(2)f(n-1)如果f(x)不等于1個字節(jié),x就不能再成為f(x)的相對地址。f(x)在表中相對地址x內(nèi)容0×字節(jié)數(shù)0f(0)1×字節(jié)數(shù)1f(1)2×字節(jié)數(shù)2f(2)3×字節(jié)數(shù)3f(3)4×字節(jié)數(shù)4f(4)…………n-1×字節(jié)數(shù)n-1f(n-1)……f(x)的相對地址=x×

f(x)的字節(jié)數(shù)f(x)的絕對地址=起始地址+相對地址MOVCA,@A+PC查表MOVCA,@A+PCRETTAB:PC:偏移量f(x)在表中相對地址=字節(jié)數(shù)×X數(shù)據(jù)表的首地址=(PC)+偏移量f(x)的絕對地址=首地址+相對地址

=(A)+(PC)=((PC)+偏移量)+相對地址 ……

根據(jù)x計算相對地址存入A

ADDA,偏移量

MOVCA,@A+PC

…… RETtab: DBf(0),f(1),f(2),……f(x),……MOVCA,@A+PC查表方法

顯然使用這種查表指令,由于PC不能修改,偏移量只能加到A中。因此,偏移量越大,指令所支持表的空間越小。該指令能夠訪問的表空間<255個字節(jié)!如果f(x)只有一個字節(jié),計算省去。一次只能得到一個字節(jié),所以,f(x)有多少個字節(jié),就要查多少次。MOVCA,@A+DPTR查表MOVCA,@A+DPTRTAB:相對地址=字節(jié)數(shù)×X數(shù)據(jù)表的首地址=(DPTR)f(x)的絕對地址=(A)+(DPTR)=首地址+相對地址MOVCA,@A+DP

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論