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

下載本文檔

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

文檔簡(jiǎn)介

第3章指令系統(tǒng)3.1概述3.2尋址方式3.3指令系統(tǒng)3.4匯編語言程序設(shè)計(jì)§3.1概述指令:是CPU根據(jù)人的意圖來執(zhí)行某種操作的命令。程序設(shè)計(jì)語言:是實(shí)現(xiàn)人機(jī)交換信息的基本工具,分為機(jī)器語言、匯編語言和高級(jí)語言。機(jī)器語言:用二進(jìn)制編碼表示每條指令,是計(jì)算機(jī)能直接識(shí)別和執(zhí)行的語言。匯編語言:是用助記符、符號(hào)和數(shù)字等來表示指令的程序設(shè)計(jì)語言。它與機(jī)器語言指令是一一對(duì)應(yīng)的。§3.1.2指令格式89C51匯編語言指令格式[標(biāo)號(hào)]:操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]

MOVA,#34H;將數(shù)34h送累加器A符號(hào)注釋Rn(n=0~7):當(dāng)前選中的工作寄存器組R0~R7。Ri(I=0,1):作為地址指針的兩個(gè)工作寄存器R0,R1。#data8:8位立即數(shù)。#data16:16位立即數(shù)。direct:8位片內(nèi)RAM單元的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。符號(hào)注釋rel:補(bǔ)碼表示的8位地址偏移量。范圍:-128~+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號(hào)。/:位操作指令中對(duì)該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容。→:指令操作流程方向?!?.2尋址方式什么是尋址方式:如何找到存放操作數(shù)的地址,把操作數(shù)提取出來的方法。1、7種尋址方式:2、尋址空間及符號(hào)注釋:1)立即數(shù)尋址立即數(shù)尋址:指令操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù),用“#”號(hào)表示,以區(qū)別直接地址。例如:MOVA,3AH;(3AH)→AMOVA,#3AH;3AH→AMOVDPTR,#2000H;2000H→DPTR

2)直接尋址直接尋址方式:在指令中直接給出操作數(shù)所在存儲(chǔ)單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。直接尋址方式可訪問片內(nèi)RAM的128個(gè)單元以及所有的SFR。對(duì)于SFR,既可以使用它們的地址,也可以使用它們的名字。例如:MOVA,3AH;(3AH)→AMOVA,P1;(P1口)→A

或:MOVA,90H;90H是P1口的地址3)寄存器尋址寄存器尋址:由指令指出寄存器組R0~R7中的某一個(gè)或其他寄存器(A,B,DPTR等)的內(nèi)容作為操作數(shù)。例如:MOVA,R0;(R0)→AMOVP1,A;(A)→P1口

ADDA,R0;(A)+(R0)→A4)寄存器間接尋址

寄存器間接尋址:操作數(shù)的地址事先存放在某個(gè)寄存器中,寄存器間接尋址是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。規(guī)定R0或R1為間接尋址寄存器,它可尋址內(nèi)部地址RAM低位的128B單元內(nèi)容。還可采用DPTR作為間接尋址寄存器,尋址外部數(shù)據(jù)存儲(chǔ)器的64KB空間。例如例如:將片內(nèi)RAM65H單元內(nèi)容47H送A,可執(zhí)行指令“MOVA,@R0”。其中R0內(nèi)容為65H。如圖所示:65H47HR0A47H數(shù)據(jù)存儲(chǔ)器地址┋┋65H①②以指令中所指定的R0內(nèi)容(65H)為指針將片內(nèi)RAM65H單元內(nèi)容47H送A5)變址尋址(基址寄存器+變址寄存器間接尋址)變址尋址:以某個(gè)寄存器的內(nèi)容為基地址,在這個(gè)基地址的基礎(chǔ)上加上地址偏移量形成真正的操作數(shù)地址。采用DPTR或PC為基址寄存器,A的內(nèi)容為地址偏移量。變址尋址只能訪問程序存儲(chǔ)器,訪問范圍為64KB。例如例如:MOVCA,@A+DPTR;((A)+(DPTR))→A如圖所示1EH0302HROMDPTRAA02F1H11H1EH+①②DPTR內(nèi)容與A的內(nèi)容之和為程序存儲(chǔ)器地址程序存儲(chǔ)器內(nèi)容送A6)相對(duì)尋址

相對(duì)尋址:是以當(dāng)前的PC值加上指令中規(guī)定的偏移量rel而形成實(shí)際的轉(zhuǎn)移地址。相對(duì)尋址只出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。當(dāng)前的PC值是指執(zhí)行完相對(duì)指令后的PC值;相對(duì)轉(zhuǎn)移指令操作碼所在地址稱為源地址;轉(zhuǎn)移后的地址稱為目的地址。目的地址=源地址+相對(duì)轉(zhuǎn)移指令字節(jié)數(shù)+relrel為補(bǔ)碼表示的有符號(hào)數(shù)。7)位尋址位尋址:采用位尋址方式的指令的操作數(shù)是8位二進(jìn)制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的兩種表示方法:直接使用位地址,如D3H;直接用寄存器名字加位數(shù),如PSW.3。位尋址區(qū)域:片內(nèi)RAM的20H-2FH的16個(gè)單元中的128位;字節(jié)地址能被8整除的SFR。概述:?jiǎn)纹瑱C(jī)指令系統(tǒng)由111條指令組成。其中,單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。從指令執(zhí)行時(shí)間看,單周期指令64條,雙周期45條,只有乘、除指令為4個(gè)周期?!?.3指令系統(tǒng)指令系統(tǒng)可分為五大類[1]數(shù)據(jù)傳送指令:29條[2]算術(shù)運(yùn)算指令:24條[3]邏輯運(yùn)算及移位指令:24條[4]控制轉(zhuǎn)移指令:17條[5]位操作指令(布爾操作):17條§3.3.2數(shù)據(jù)傳送指令1.片內(nèi)數(shù)據(jù)存儲(chǔ)器傳送MOV2.片外數(shù)據(jù)存儲(chǔ)器傳送MOVX3.程序存儲(chǔ)器傳送MOVC4.累加器交換XCH、XCHD、SWAP5.堆棧操作PUSH、POPMOV類傳送指令主要包括了立即數(shù)傳送指令、內(nèi)部RAM單元之間的數(shù)據(jù)傳送指令、累加器數(shù)據(jù)傳送指令。MOV的匯編格式如下:

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

1.MOV(Move)類傳送指令(16條)

(1)源操作數(shù)為立即尋址方式的傳送指令:源操作數(shù)為立即尋址方式的傳送指令,簡(jiǎn)稱立即數(shù)傳送指令。

MOVA,#data;A←dataMOVdirect,#data;(direct)←dataMOVRn,#data;Rn←dataMOV@Ri,#data;(Ri)←dataMOVDPTR,#data16

【例3-1】將立即數(shù)A3H送入累加器A。MOVA,#0A3H【例3-2】將立即數(shù)76H送入片內(nèi)30H,可執(zhí)行以下指令。有以下兩種傳送方式:MOVA,#76HMOVR0,#30HMOV@R0,A或直接執(zhí)行MOV30H,#76H

(2)內(nèi)部RAM單元之間的數(shù)據(jù)傳送指令:內(nèi)部RAM單元之間數(shù)據(jù)傳送指令有兩直接地址之間、直接地址與工作寄存器之間、工作寄存器與直接地址之間、直接地址與間接地址寄存器之間、間接地址寄存器與直接地址之間的傳送指令。MOVdirect2,direct1;(direct2)←(direct1)MOVdirect,Rn;(direct)←RnMOVRn,direct;Rn←(direct)MOVdirect,@Ri;(direct)←(Ri)MOV@Ri,direct;(Ri)←(direct)【例3-3】將50H單元的數(shù)據(jù)直接送入30H,R1內(nèi)容指定的內(nèi)部RAM單元的內(nèi)容送入PSW寄存器,片內(nèi)RAM60H單元的內(nèi)容送入R4中,用以下指令完成。MOV30H,50HMOVD0H,@R1;D0H為PSW的單元地址MOVR4,60H【例3-4】將R2中的內(nèi)容送入P0口MOVP0,R2也可使用MOV80H,R2(3)累加器的數(shù)據(jù)傳送指令。與累加器有關(guān)的數(shù)據(jù)傳送指令有:累加器與工作寄存器之間,累加器與直接地址之間、累加器與間接地址寄存器之間的傳送MOVA,Rn;A←RnMOVRn,A;Rn←AMOVA,direct;A←(direct)MOVdirect,A;(direct)←AMOVA,@Ri;A←(Ri)MOV@Ri,A;(Ri)←A【例3-5】將R6的內(nèi)容送入累加器AMOVA,R6【例3-6】將R4清零,可使用以下指令完成MOVA,#00HMOVR4,A(1)使用DPTR進(jìn)行間接尋址。與DPTR間接尋址有關(guān)的指令有以下2條:

MOVXA,@DPTR;A←(DPTR)MOVX@DPTR,A;(DPTR)←A

外部RAM單元只能使用間接尋址方法,分別以DPTR和Ri作為間接地址寄存器。因此MOVX傳送類有兩組不同的間接尋址指令。2.MOVX(MoveExternal)類傳送指令(4條)【例3-7】設(shè)某輸出設(shè)備口地址為8000H,將片內(nèi)RAM30H單元中的數(shù)據(jù)輸出至該端口,則可用以下指令完成:MOVDPTR,#8000HMOVA,30HMOVC@DPTR,A

【例3-8】將片外RAM3000H單元中的內(nèi)容送至4000H單元中去,用以下指令完成:MOVDPTR,#3000HMOVXA,@DPTRMOVDPTR,#4000HMOVX@DPTR,A(2)使用Ri進(jìn)行間接尋址。與Ri間接尋址有關(guān)的指令有以下2條:

MOVXA,@Ri;A←(Ri)MOVX@Ri,A;(Ri)←A例3-9】將片外RAM(8FH)中的內(nèi)容0AH,傳送至寄存器R0中,而將R1中的值04H寫入片外RAM(90H),執(zhí)行以下指令完成。MOVR1,#8FH;指向片外8FH單元MOVXA,@R1;將片外8FH單元內(nèi)容暫存AMOVR0,A;暫存結(jié)果送入R0中MOVA,R1;取R1中的內(nèi)容MOVR1,#90H;指向片外90H單元MOVX@R1,A;04H送入片外90H單元

MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC;A←((A)+(PC))

MOVC類指令是對(duì)程序存儲(chǔ)器進(jìn)行數(shù)據(jù)傳送,因此又稱為程序存儲(chǔ)器傳送指令,由于MOVC類指令通常用于查表,所以也稱為查表指令,其表格放在程序存儲(chǔ)器中。

3.MOVC(MoveCode)類傳送指令(2條)【例3-10】在程序存儲(chǔ)器中,從8000H開始存有A~Z的ASCII碼,將D的ASCII碼取出。8000H:41H;(41H為“A”的ASCII碼,存放在8000H單元中)8001H:42H;(42H為“B”的ASCII碼,存放在8001H單元中)8002H:43H;(43H為“C”的ASCII碼,存放在8002H單元中)8003H:44H;(44H為“D”的ASCII碼,存放在8003H單元中)8004H:45H;┋┋設(shè)完成此操作的程序存放在4000H開始存儲(chǔ)器中。執(zhí)行以下程序:4000H:MOVA,#03H;A←03H偏移量4002H:MOVDPTR,#8000H;DPTR←8000H4005H:MOVCA,@A+DPTR;取出D的ASCII碼送累加器A執(zhí)行結(jié)果:(A)=44H(PC)=4006H

(1)XCH(Exchange)全字節(jié)交換

XCHA,Rn;A←→RnXCHA,direct;A←→(direct)XCHA,@Ri;A←→(Ri)

(2)XCHD低半字節(jié)交換(Exchangelow-orderDigit)

XCHDA,@Ri;A0-3←→(Ri)0-3

累加器交換指令XCH、XCHD、SWAP,主要是在片內(nèi)RAM和累加器A之間進(jìn)行數(shù)據(jù)的交換。

(3)SWAP高4位與低4位交換

SWAPA;A7~4←→A3~0

4.XCH、XCHD、SWAP類指令(5條)【例3-11】將片內(nèi)RAM中30H、40H單元的內(nèi)容互換,并將互換后的40H單元內(nèi)容存入R0指示的片內(nèi)RAM單元。

MOVA,30H;30H單元的內(nèi)容送A中

XCHA,40H;30H單元與40H單元中的內(nèi)容互換

MOV@R0,A;互換后的結(jié)果存入R0指示的單元中

(1)PUSH入棧操作(Pushdirectbyteontostack)

PUSHdirect;SP←SP+1,(SP)←(direct)

(2)POP出棧操作(Popdirectfromstack)

POPdirect;SP←SP-1,(direct)←(SP)

5.PUSH、POP類指令(2條)

【例3-12】設(shè)DPTR指向了5000H單元,將其壓入堆棧中,然后彈出到片內(nèi)RAM的50H、51H單元中,用如下指令完成:

MOVDPTR,#5000HPUSHDPLPUSHDPHPOP51H;DPH彈出到51H單元

POP50H;DPL彈出到50H單元§3.3.3算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令用到的助記符有以下3大類加法指令:ADD、ADDC、INC、DA減法指令:SUBB、DEC乘除指令:MUL、DIV算術(shù)運(yùn)算類指令(24條)

——加法指令(8條)

ADDA,Rndirect@Ri#data操作:將兩個(gè)操作數(shù)相加,再把和送到A中。其結(jié)果必然影響:進(jìn)位位C,輔助進(jìn)位位AC,溢出位OV,奇偶位P,零標(biāo)志Z。R0=12H,(12H)=78H,A=9AH,C=1執(zhí)行ADDA,@R0后結(jié)果?

10011010+01111000

.....00010010

10011010+01111000+C

.....00010011CC說明:本組指令的功能是同時(shí)把源操作數(shù)所指出的內(nèi)容和進(jìn)位標(biāo)志未CY都加到累加器A中,結(jié)果存放到A中,其余的功能和上面的ADD指令相同。本組指令常用于多字節(jié)加法。

【例3-13】有符號(hào)數(shù)相加,執(zhí)行以下程序,說明PSW有關(guān)標(biāo)志位的內(nèi)容。

MOVA,#7AHMOVR0,#65HADDA,R0

01111010A

+)01100101

(R0)

11011111

執(zhí)行結(jié)果:OV=D6CY⊕D7CY=1⊕0=1;說明和產(chǎn)生溢出;PSW的CY=0AC=0OV=1

CLRCMOVA,R4ADDA,R6MOVR4,AMOVA,R5ADDCA,R7MOVR5,A

程序執(zhí)行時(shí)先計(jì)算低字節(jié)之和:

11111111FFH

+)10101011ABH110101010低字節(jié)之和=AAH,CY=1,AC=1,OV=0,然后再計(jì)算高字節(jié)之和:

1000010185H0100010145H

+)1CY11001011高字節(jié)之和=CBH,CY=0,AC=0,OV=0程序執(zhí)行完后的最后結(jié)果:R5R4=CBAAH,CY=0,AC=0,OV=0

【例3-14】在R5R4、R7R6中有兩個(gè)16位的無符號(hào)數(shù),其值分別為85FFH與45ABH,計(jì)算兩個(gè)數(shù)的和,結(jié)果仍存于R5R4中,并說明PSW中相關(guān)位的內(nèi)容

溫馨提示

  • 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)論