版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章MCS-51的指令系統(tǒng)尋址方式指令分類(lèi)指令格式及約定標(biāo)識(shí)符指令格式【標(biāo)號(hào):】操作符【目的操作數(shù)】【,源操作數(shù)】【;注釋】約定標(biāo)識(shí)符Ri和Rn:i=0、1,n=0~7。#data/#data16:表示8/16位立即數(shù)。rel:8位偏移量。-128~127,補(bǔ)碼。addr16/addr11:16/11位直接地址。direct:8位直接地址。內(nèi)部RAM或SFR。bit:直接位地址(X)、((X))、“→”§3.3MCS-51的尋址方式寄存器尋址直接尋址寄存器間接尋址立即數(shù)尋址基址+變址尋址位尋址相對(duì)尋址指令的寄存器中是操作數(shù):
MOVA,R0指令直接給出操作數(shù)的地址:
MOVA,30H指令的寄存器中是操作數(shù)的地址:
MOVA,@R0操作數(shù)是常數(shù):
MOVA,#30H只能訪(fǎng)問(wèn)程序存儲(chǔ)器:
MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR指令直接給出操作數(shù)的位地址:
SETBP1.0CLRCANLP2.5專(zhuān)門(mén)為轉(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ù)在程序存儲(chǔ)器中MOVCA,@A+DPTR
;((A)+(DPTR))→AMOVCA,@A+PC
;((A)+(PC))→AJMP@A+DPTR
;((A)+(DPTR))→PC相對(duì)尋址為轉(zhuǎn)移指令所用目的地址=轉(zhuǎn)移指令所在地址+該轉(zhuǎn)移指令的字節(jié)數(shù)+rel=下條指令地址+rel=(PC)+relrel,為偏移量,取值范圍-128~+127。標(biāo)志相當(dāng)于PC的兩個(gè)方向的轉(zhuǎn)移。在程序中,我們用標(biāo)號(hào)表示。不必關(guān)心rel的值。查表指令由位指令提供的位操作位地址的表示直接地址,SETB0AFH位標(biāo)號(hào),STEBEA單元地址.位數(shù),STEB(A8H).7寄存器符號(hào).位數(shù),STEBIE.7兩個(gè)位尋址區(qū)-內(nèi)部RAM中具有位地址的區(qū)域與SFR。位尋址§3.4MCS-51指令分類(lèi)數(shù)據(jù)傳送類(lèi)算數(shù)操作類(lèi)邏輯運(yùn)算類(lèi)控制轉(zhuǎn)移類(lèi)位操作類(lèi)指令功能指令執(zhí)行周期數(shù)對(duì)程序狀態(tài)字的影響1、數(shù)據(jù)傳送類(lèi):普通傳送指令
1、片內(nèi)數(shù)據(jù)傳送指令
2、片外數(shù)據(jù)傳送指令
3、程序存儲(chǔ)傳送指令數(shù)據(jù)交換指令堆棧操作指令普通傳送類(lèi)指令(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ù)存儲(chǔ)器傳送指令中不允許有如下指令
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)程序儲(chǔ)存器數(shù)據(jù)傳送指令MOVC
這類(lèi)指令共有2條,兩條指令都為基址加變址間接尋址方式。其功能是將存放在程序存儲(chǔ)器ROM中的表格數(shù)據(jù)進(jìn)行查找傳送,所以又稱(chēng)查表指令。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來(lái)自程序存儲(chǔ)器MOVX指令的間接尋址數(shù)據(jù)來(lái)自外部數(shù)據(jù)存儲(chǔ)器其余指令的數(shù)據(jù)來(lái)自?xún)?nèi)部RAM數(shù)據(jù)傳送類(lèi)指令的狀態(tài)標(biāo)志當(dāng)這類(lèi)指令的目標(biāo)地址是累加器A時(shí),指令執(zhí)行后P標(biāo)志會(huì)受影響。其它標(biāo)志位是不受影響的。ADDA,Rn/direct/@Ri/#dataADDCA,Rn/direct/@Ri/#dataSUBBA,Rn/direct/@Ri/#dataINCRn/direct/@Ri/DPTRDECRn/direct/@RiMULABDIVABDAA2、算數(shù)操作類(lèi):除增1和減1指令,其余對(duì)Cy、Ac、OV、P有影響。關(guān)于OV,有效于符號(hào)數(shù)加法運(yùn)算中,對(duì)于8位符號(hào)數(shù)其數(shù)的范圍在:-128~+127。超出即溢出。其表現(xiàn)為:當(dāng)結(jié)果應(yīng)該為正時(shí),卻為負(fù);當(dāng)結(jié)果應(yīng)該為負(fù)時(shí),卻為正,OV=1,說(shuō)明溢出。否則,沒(méi)有溢出。舉例算數(shù)類(lèi)指令的狀態(tài)標(biāo)志例3-1、異號(hào)數(shù)相加。指令執(zhí)行前:(A)=49H,(30H)=ECH。執(zhí)行指令:ADDA,30H01001001+)111011001←00110101指令執(zhí)行后:(A)=35H,Cy=1,Ac=1,OV=0,P=0例3-2、同號(hào)數(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指令只能進(jìn)行2進(jìn)制運(yùn)算;所以,在BCD碼的加法運(yùn)算中,其運(yùn)算結(jié)果可能不再是BCD碼;這時(shí),用DA指令對(duì)結(jié)果進(jìn)行調(diào)整,使其仍為BCD碼。下面是可能出現(xiàn)的3種情況(P75例如):⑴、無(wú)進(jìn)位,<9。例、2+4=60010
+)0100
0110⑵、無(wú)進(jìn)位,>9。例、5+7=120101
+)0111
1100⑶、有進(jìn)位,<9。例、9+7=161001
+)0111
1←0000由以上3種BCD碼運(yùn)算結(jié)果可以得出:①的運(yùn)算結(jié)果是正確的②的運(yùn)算結(jié)果錯(cuò)誤,因?yàn)锽CD碼十進(jìn)制數(shù)中只有0~9這10組四位二進(jìn)制數(shù)沒(méi)有1100這個(gè)編碼。③運(yùn)算結(jié)果錯(cuò)誤,正確結(jié)果為16,而運(yùn)算結(jié)果10。
調(diào)整方法①累加器低4位大于9或者輔助進(jìn)位位Ac=1,則低4位加6調(diào)整。②累加器高4位大于9或者進(jìn)位位Cy=1,則高4位加6調(diào)整。③累加器高4位為9,低4位大于9,則高4位和低4位分別加6調(diào)整。上述BCD碼的加法運(yùn)算進(jìn)行十進(jìn)制調(diào)整都是通過(guò)“DAA”指令自動(dòng)實(shí)現(xiàn)的。3、邏輯運(yùn)算類(lèi)指令:ANLA,Rn/direct/@Ri/#dataANLdirect,A/#dataORLA,Rn/direct/@Ri/#dataORLdirect,A/#dataXRLA,Rn/direct/@Ri/#dataXRLdirect,A/#dataCLRACPLARLARLCARRARRCA
這類(lèi)指令,除檢驗(yàn)?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)移類(lèi)指令:子程序調(diào)用無(wú)條件轉(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、位操作類(lèi)指令
:功能類(lèi)型同前述關(guān)于bit尋址,面對(duì)所有具有位地址的單元。指令功能指令功能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)移并清該位位操作類(lèi)指令表作業(yè):P95一、二3.7
MCS-51匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言源程序的基本結(jié)構(gòu)
順序結(jié)構(gòu)分支循環(huán)子程序中斷服務(wù)程序分支程序設(shè)計(jì)例:求累加器A中,單字節(jié)符號(hào)數(shù)的補(bǔ)碼。complement: JNBACC.7,return MOVC,ACC.7 ;保存符號(hào)位
CLPA ADDA,#1 MOVACC.7,C
;恢復(fù)符號(hào)位return: RET分支程序-單分支設(shè)計(jì)方法圖1圖2圖3構(gòu)成條件循環(huán)循環(huán)程序設(shè)計(jì)循環(huán)構(gòu)成初始化循環(huán)處理循環(huán)控制循環(huán)結(jié)構(gòu)循環(huán)的控制計(jì)數(shù)循環(huán)DJNZRn/direct,rel條件循環(huán)結(jié)構(gòu)1結(jié)構(gòu)2子程序設(shè)計(jì)
具有特定功能的、獨(dú)立的、通用的程序模塊。子程序的結(jié)構(gòu)子程序名:就是子程序中的第一條指令的標(biāo)號(hào)。PUSH指令要保護(hù)的是子程序要用到的公共資源。在子程序使用完返回上級(jí)程序時(shí),必須將這些公共資源恢復(fù)成原來(lái)狀態(tài)。在使用調(diào)用指令時(shí),要注意ACALL與LCALL的區(qū)別參數(shù)傳遞:在調(diào)用子程序前,首先要將需要子程序處理的原始數(shù)據(jù)放入子程序指定的地方。在子程序中,程序自然會(huì)從該處取走數(shù)據(jù),進(jìn)行處理。返回后,上級(jí)程序應(yīng)在子程序指定的地方去取處理結(jié)果。main:…… …… LCALLsubprogram …… ……subprogram:
PUSHx1 ;保護(hù)現(xiàn)場(chǎng)
PUSHx2 ……
處理程序鍛
…… POPx2 ;恢復(fù)現(xiàn)場(chǎng)
POPx1 RET延時(shí)子程序一條DJNZ指令能夠延時(shí)最長(zhǎng)時(shí)間每個(gè)機(jī)器周期時(shí)間×指令周期數(shù)×循環(huán)次數(shù)=延時(shí)時(shí)間每個(gè)機(jī)器周期時(shí)間×2×256=延時(shí)時(shí)間如果時(shí)鐘=12MHz,則,1μS×2×256=512μS
雙重循環(huán)延時(shí)子程序分析
總周期數(shù)=(2×L1+2+1+X)×L2;L1、L2取值應(yīng)使:(2×L1+2+1+X)×L2=延時(shí)時(shí)間÷周期時(shí)間=總周期數(shù)delay: MOVR7,#L2loop2:MOVR6,#L1 …… ;Xloop1:DJNZR6,loop1
DJNZR7,loop2如果時(shí)鐘=12MHz,設(shè)計(jì)50mS延時(shí)子程序。總周期數(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指令。如果時(shí)鐘=12MHz,設(shè)計(jì)650μS延時(shí)子程序。總周期數(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指令。如果時(shí)鐘=6MHz,設(shè)計(jì)65mS延時(shí)子程序。總周期數(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指令。如果時(shí)鐘=12MHz,采用單循環(huán)設(shè)計(jì)650μS延時(shí)子程序。總周期數(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è)計(jì)表格構(gòu)建表格的使用:查表指令MOVCA,@A+PCMOVCA,@A+DPTRxf(x
)0f(0)1f(1)……n-1f(n-1)算出所有f(x),按x的順序,依次存放在存儲(chǔ)器中。x是f(x)的自變量,實(shí)際上也是f(x)的相對(duì)地址?;?變址的計(jì)算,要的是f(x)在程序存儲(chǔ)器中的絕對(duì)地址。關(guān)于f(x)的地址討論相對(duì)地址f(x)012345(n-1)×2f(0)f(1)f(2)f(n-1)如果f(x)不等于1個(gè)字節(jié),x就不能再成為f(x)的相對(duì)地址。f(x)在表中相對(duì)地址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)的相對(duì)地址=x×
f(x)的字節(jié)數(shù)f(x)的絕對(duì)地址=起始地址+相對(duì)地址MOVCA,@A+PC查表MOVCA,@A+PCRETTAB:PC:偏移量f(x)在表中相對(duì)地址=字節(jié)數(shù)×X數(shù)據(jù)表的首地址=(PC)+偏移量f(x)的絕對(duì)地址=首地址+相對(duì)地址
=(A)+(PC)=((PC)+偏移量)+相對(duì)地址 ……
根據(jù)x計(jì)算相對(duì)地址存入A
ADDA,偏移量
MOVCA,@A+PC
…… RETtab: DBf(0),f(1),f(2),……f(x),……MOVCA,@A+PC查表方法
顯然使用這種查表指令,由于PC不能修改,偏移量只能加到A中。因此,偏移量越大,指令所支持表的空間越小。該指令能夠訪(fǎng)問(wèn)的表空間<255個(gè)字節(jié)!如果f(x)只有一個(gè)字節(jié),計(jì)算省去。一次只能得到一個(gè)字節(jié),所以,f(x)有多少個(gè)字節(jié),就要查多少次。MOVCA,@A+DPTR查表MOVCA,@A+DPTRTAB:相對(duì)地址=字節(jié)數(shù)×X數(shù)據(jù)表的首地址=(DPTR)f(x)的絕對(duì)地址=(A)+(DPTR)=首地址+相對(duì)地址MOVCA,@A+DP
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年四川省廣元市利州區(qū)人力資源和社會(huì)保障局考試招聘21人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年貴州黔南州事業(yè)單位面向應(yīng)征入伍大學(xué)畢業(yè)生招聘72人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年江蘇蘇州昆山市千燈鎮(zhèn)招聘工作人員38人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年江蘇建湖縣事業(yè)單位招聘擬聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省眉山市廣播電視臺(tái)考試招聘10人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川瀘州市納溪區(qū)事業(yè)單位招聘工作人員63人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川樂(lè)山馬邊縣事業(yè)單位招聘工作人員111人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 工業(yè)園區(qū)土地復(fù)墾承諾書(shū)
- 通訊網(wǎng)絡(luò)建設(shè)合同審核流程
- 2024年短期借款協(xié)議模板詳細(xì)版版
- 2025人教版九年級(jí)英語(yǔ)全冊(cè)知識(shí)點(diǎn)清單
- 醫(yī)院緊急情況一鍵報(bào)警制度建設(shè)
- 2024版 新能源電站單位千瓦造價(jià)標(biāo)準(zhǔn)
- 企業(yè)培訓(xùn)師競(jìng)聘
- 惠州學(xué)院《電機(jī)與拖動(dòng)基礎(chǔ)》2023-2024學(xué)年期末試卷
- 吊車(chē)裝吊籃施工方案
- 山東省濟(jì)南市濟(jì)鋼高級(jí)中學(xué)2025屆物理高一上期末檢測(cè)試題含解析
- 07FG01防空地下室設(shè)計(jì)荷載及結(jié)構(gòu)構(gòu)造
- 湖南省益陽(yáng)市2023-2024學(xué)年高二上學(xué)期普通高中期末質(zhì)量檢測(cè)數(shù)學(xué)試題 含解析
- 2024年保安員證考試題庫(kù)及答案(共250題)
- 天津市七區(qū)2022-2023學(xué)年高一上學(xué)期期末數(shù)學(xué)試卷(原卷)
評(píng)論
0/150
提交評(píng)論