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

下載本文檔

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

文檔簡介

第三章指令系統(tǒng)及程序設(shè)計(jì)舉例Exit§3.389C51指令系統(tǒng)§3.1匯編語言§3.2尋址方式§3.4程序設(shè)計(jì)舉例§3.1匯編語言§3.1.1指令和程序設(shè)計(jì)語言§3.1.2指令格式BACK§3.1.1指令和程序設(shè)計(jì)語言指令:是CPU根據(jù)人的意圖來執(zhí)行某種操作的命令。程序設(shè)計(jì)語言:是實(shí)現(xiàn)人機(jī)交換信息的基本工具,分為機(jī)器語言、匯編語言和高級語言。機(jī)器語言:用二進(jìn)制編碼表示每條指令,是計(jì)算機(jī)能直接識別和執(zhí)行的語言。匯編語言:是用助記符、符號和數(shù)字等來表示指令的程序設(shè)計(jì)語言。它與機(jī)器語言指令是一一對應(yīng)的。BACK§3.1.2指令格式89C51匯編語言指令格式操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]匯編語言指令對應(yīng)的二進(jìn)制代碼格式單字節(jié)指令雙字節(jié)指令三字節(jié)指令BACK單字節(jié)指令1、指令碼中隱含著對某一種寄存器的操作如:指令“INCDPTR”的指令代碼格式為:A3H=101000112、由指令中的rrr三位的不同編碼指定某一寄存器如:指令“MOVA,Rn”的指令代碼格式為:11101rrrBACK雙字節(jié)指令用一個(gè)字節(jié)表示操作碼,另一個(gè)字節(jié)表示操作數(shù)或操作數(shù)所在的地址。格式為:操作碼立即數(shù)或地址BACK三字節(jié)指令一個(gè)字節(jié)操作碼,兩個(gè)字節(jié)操作數(shù)。格式為:操作碼立即數(shù)或地址立即數(shù)或地址BACK§3.2尋址方式一、什么是尋址方式:如何找到存放操作數(shù)的地址,把操作數(shù)提取出來的方法。二、尋址方式的種類:三、尋址空間及符號注釋:BACK二、尋址方式的種類:1、寄存器尋址2、直接尋址3、立即數(shù)尋址4、寄存器間接尋址5、變址尋址6、相對尋址7、位尋址BACK1、寄存器尋址寄存器尋址:由指令指出寄存器組R0~R7中的某一個(gè)或其他寄存器(A,B,DPTR等)的內(nèi)容作為操作數(shù)。例如:MOVA,R0;(R0)→AMOVP1,A;(A)→P1口ADDA,R0;(A)+(R0)→ABACK2、直接尋址直接尋址方式:在指令中直接給出操作數(shù)所在存儲(chǔ)單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。直接尋址方式可訪問片內(nèi)RAM的128個(gè)單元以及所有的SFR。對于SFR,既可以使用它們的地址,也可以使用它們的名字。例如:MOVA,3AH;(3A)→AMOVA,P1;(P1口)→A或:MOVA,90H;90H是P1口的地址BACK3、立即數(shù)尋址立即數(shù)尋址:指令操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù),用“#”號表示,以區(qū)別直接地址。例如:MOVA,3AH;(3AH)→AMOVA,#3AH;3AH→AMOVDPTR,#2000H;2000H→DPTR;(DPH)=20H;(DPL)=00HBACK4、寄存器間接尋址

寄存器間接尋址:操作數(shù)的地址事先存放在某個(gè)寄存器中,寄存器間接尋址是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。89C51規(guī)定R0或R1為間接尋址寄存器,它可尋址內(nèi)部地址RAM低位的128B單元內(nèi)容。還可采用DPTR作為間接尋址寄存器,尋址外部數(shù)據(jù)存儲(chǔ)器的64KB空間。BACK例如:將片內(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送ABACK5、變址尋址(基址寄存器+變址寄存器間接尋址)變址尋址:以某個(gè)寄存器的內(nèi)容為基地址,在這個(gè)基地址的基礎(chǔ)上加上地址偏移量形成真正的操作數(shù)地址。89C51中采用DPTR或PC為基址寄存器,A的內(nèi)容為地址偏移量。變址尋址只能訪問程序存儲(chǔ)器,訪問范圍為64KB。BACK例如:MOVCA,@A+DPTR;((A)+(DPTR))→A如圖所示1EH0302HROMDPTRAA02F1H11H1EH+①②DPTR內(nèi)容與A的內(nèi)容之和為程序存儲(chǔ)器地址程序存儲(chǔ)器內(nèi)容送ABACK6、相對尋址

相對尋址:是以當(dāng)前的PC值加上指令中規(guī)定的偏移量rel而形成實(shí)際的轉(zhuǎn)移地址。相對尋址只出現(xiàn)在相對轉(zhuǎn)移指令中。當(dāng)前的PC值是指執(zhí)行完相對指令后的PC值;相對轉(zhuǎn)移指令操作碼所在地址稱為源地址;轉(zhuǎn)移后的地址稱為目的地址。目的地址=源地址+相對轉(zhuǎn)移指令字節(jié)數(shù)+relrel為補(bǔ)碼表示的有符號數(shù)。BACK7、位尋址位尋址:采用位尋址方式的指令的操作數(shù)是8位二進(jìn)制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的兩種表示方法:直接使用位地址,如D3H;直接用寄存器名字加位數(shù),如PSW.3。位尋址區(qū)域:片內(nèi)RAM的20H-2FH的16個(gè)單元中的128位;字節(jié)地址能被8整除的SFR。BACK三、尋址空間及符號注釋1、尋址空間:見表3-2。2、符號注釋:BACK表3-2操作數(shù)尋址方式和有關(guān)空間BACK符號注釋Rn(n=0-7):當(dāng)前選中的工作寄存器組R0-R7。Ri(I=0,1):作為地址指針的兩個(gè)工作寄存器R0,R1。#data:8位立即數(shù)。#data16:16位立即數(shù)。direct:8位片內(nèi)RAM單元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:補(bǔ)碼表示的8位地址偏移量。范圍:-128-+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號。/:位操作指令中對該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容?!褐噶畈僮髁鞒谭较颉ACKBACKMCS-51指令系統(tǒng)可分為五大類[1]數(shù)據(jù)傳送指令:28條[2]算術(shù)運(yùn)算指令:24條[3]邏輯運(yùn)算及移位指令:25條[4]控制轉(zhuǎn)移指令:17條[5]位操作指令(布爾操作):17條Back§3.3.1數(shù)據(jù)傳送指令

1.以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)

2.以寄存器Rn為目的操作數(shù)的指令(3條)

3.以直接地址為目的操作數(shù)的指令(5條)

4.以間接地址為目的操作數(shù)的指令(3條)Back

5.十六位數(shù)據(jù)傳送指令(1條)

6.查表指令(2條)

7.累加器A與片外RAM傳送指令(4條)

8.棧操作指令(2條)

9.交換指令(4條)BackBack1.以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)例:MOVA,#30H;(A)=30HMOVA,30H;(A)=11HMOVA,@R1;(A)=11HMOVA,R1;(A)=30H

MOVA,#30H;(A)=30HMOVA,30H ;(A)=11HMOVA,@R1 ;(A)=11HMOVA,R1;(A)=30HBack

2、以寄存器Rn為目的操作數(shù)的指令(3條)Back這組指令的功能是把源操作數(shù)所指定的內(nèi)容送到當(dāng)前工作寄存器組R0~R7中的某個(gè)寄存器。源操作數(shù)有寄存器尋址,直接尋址和立即數(shù)尋址三種方式。如:(A)=78H,(R5)=47H,(70H)=F2H,執(zhí)行指令:MOVR5,A ;(A) R5, (R5)=78HMOVR5,70H;(70H) R5, (R5)=F2HMOVR5,#A3H;A3H R5, (R5)=A3H注意,在89C51指令系統(tǒng)中沒有“MOVRn,Rn”傳送指令。Back3、以直接地址為目的操作數(shù)的指令(5條)BackBack4、以間接地址為目的操作數(shù)的指令(3條)BackBack@RidirectRn#dataACC圖3-6傳送指令在片內(nèi)存儲(chǔ)器的操作功能5、十六位數(shù)據(jù)傳送指令(1條)這條指令的功能是把16位常數(shù)送入DPTR。DPTR由DPH和DPL組成。BackBack6、查表指令(2條)Back基地址寄存器+變址寄存器間接尋址@PC+A(程序存儲(chǔ)器0-64K)基地址寄存器+變址寄存器間接尋址@DPTR+A(程序存儲(chǔ)器0-64K)A寄存器圖3-7程序存貯器傳送(查表)例:

執(zhí)行下面程序段后結(jié)果如何?MOVDPTR,#2000H;(DPTR)=2000HMOVA,#0AH;(A)=0AHMOVCA,@A+DPTR;(A)=((A)+(DPTR))=(200AH)則:(A)=(200AH)=11H例:

所以,最后結(jié)果為:(A)=02(R0)=02(PC)=1004Back7、累加器A與片外RAM傳送指令(4條)Back

第2,4兩條指令以DPTR為片外數(shù)據(jù)存儲(chǔ)器16位地址指針,尋址范圍達(dá)64KB。其功能是DPTR所指定的片外數(shù)據(jù)存儲(chǔ)器與累加器A之間傳送數(shù)據(jù)。 第1,3兩條指令是用R0或R1作低8位地址指針,由P0口送出,尋址范圍是256字節(jié)。這兩條指令完成以R0或R1為地址指針的片外數(shù)據(jù)存儲(chǔ)器與累加器A之間的傳送數(shù)據(jù)。 上述四條指令的操作如圖3-8所示:寄存器寄存器間接尋址

寄存器間接尋址@R1.@R0@DPTR(外RAM0-255)(外RAM0-64K)圖3-8

外部數(shù)據(jù)存儲(chǔ)器傳送操作例:若:片內(nèi)RAM(30H)=01H,片外RAM(30H)=02H,執(zhí)行下面程序段后的結(jié)果如何。Back8、棧操作指令(2條)Back例:繼續(xù)上例:Back

9、交換指令(4條)Back(1)字節(jié)變換指令

例:(2)半字節(jié)交換指令Back§3.3.2算術(shù)運(yùn)算指令1、不帶進(jìn)位加法指令(4條)

2、帶進(jìn)位加法指令(4條)

3、帶借位減法指令(4條)

4、乘法指令(1條)Back

5、除法指令(1條)

6、加1指令(5條)

7、減1指令(4條)

8、十進(jìn)制調(diào)整指令(1條)Back1、不帶進(jìn)位加法指令(四條)Back例:Back2、帶進(jìn)位加法指令(四條)Back例:設(shè)(A)=0C3H,(R0)=0AAH, (CY)=1。

執(zhí)行指令“ADDCA,R0”后的結(jié)果及標(biāo)志位如何?

例:編程,將(30H),(31H)單元中的數(shù)與

(40H),(41H)單元中的數(shù)相加,結(jié)

果存于(30H),(31H)單元中。Back3、帶借位減法指令(四條)Back

這組指令的功能是從累加器A中減去源操作數(shù)所指出的數(shù)及進(jìn)位位CY的值,差保留在累加器A中。 由于89C51指令系統(tǒng)中沒有不帶借位的減法指令,如需要的話,可以在“SUBB”指令前用“CLRC”指令將Cy清0,這一點(diǎn)必須注意。例:設(shè)(A)=0C9H,(R2)=54H,Cy=1。

執(zhí)行指令“SUBBA,R2”的結(jié)果如何?Back4、乘法指令(1條)該指令若乘積大于0FFH,則OV置1,否則OV清0。Cy位總是被清0。Back例:(A)=4EH,(B)=5DH,

執(zhí)行指令“MULAB”后結(jié)果如何?Back5、除法指令(1條)BackBack6、加1指令(5條)Back例:若:(R1)=30H,(30H)=11H

求執(zhí)行下面指令后的結(jié)果。

INC@R1;(30H)=12H

INCR1;(R1)=31HBack7、減1指令(4條)Back8、十進(jìn)制調(diào)整指令(1條)Back例:設(shè)累加器A內(nèi)容為:01010110B(即為56的BCD碼),寄存器R3的內(nèi)容為01100111B(即67的BCD碼),CY內(nèi)容為1。求執(zhí)行下列指令后的結(jié)果。 ADDCA,R3;

DAA;Back§3.3.3邏輯操作指令

1.簡單操作指令(2條)2.移位指令(4條)3.累加器半字節(jié)交換指令(1條)4.邏輯“與”指令(6條)5.邏輯“或”指令(6條)6.邏輯“異或”指令(6條)1.簡單操作指令(2條)(1)累加器A清0指令(2)累加器A取反指令2.移位指令(4條)(1)累加器A循環(huán)左移指令例:(A)=69H,執(zhí)行RLA后(A)=?01101001A的內(nèi)容為:11010010執(zhí)行指令后,A的內(nèi)容:(2)累加器A循環(huán)右移指令

(3)累加器A連同進(jìn)位位循環(huán)左移指令 RLCA;(4)累加器A連同進(jìn)位位循環(huán)右移指令 RRCA;將(R1)=16H,(R0)=39H中的16位數(shù)邏輯左移1位分析,題目要求完成的操作為:000101100011100100101100011100100CY16392C720CLR CMOV A,R0RLC AMOV R0,AMOV A,R1RLC AMOV R1,A3.累加器半字節(jié)交換指令

4.邏輯“與”指令(6條)5.邏輯“或”指令(6條)6.邏輯“異或”指令(6條)“與”指令用于對某些位清0?!盎颉敝噶钣糜趯δ承┪恢?。“異或”指令用于對某些位取反。這類指令的操作均只影響標(biāo)志位P?!?.3.4控制程序轉(zhuǎn)移類指令1.無條件轉(zhuǎn)移指令(4條)2.空操作指令(1條)3.條件轉(zhuǎn)移指令(8條)4.調(diào)用和返回指令(4條)1、無條件轉(zhuǎn)移指令(4條)(1)短轉(zhuǎn)移指令

這條指令提供了11位地址,可在2K范圍內(nèi)無條件轉(zhuǎn)移到由A10-A0所指出的地址單元中。因?yàn)橹噶钪惶峁┑?1位地址,高5位為原PC11-15值,因此,轉(zhuǎn)移的目標(biāo)地址必須在AJMP指令后面指令的第一個(gè)字節(jié)開始的同一2K字節(jié)范圍內(nèi)。

(2)長轉(zhuǎn)移指令(3)相對轉(zhuǎn)移(短轉(zhuǎn)移)指令SJMPrel;

0000rel

(相對地址)先(PC)+2→PC后(PC)+rel→PC(4)間接轉(zhuǎn)移指令CLRC;清進(jìn)位

RLCA;鍵值乘2

MOVDPTR,#JPTAB

;指向命令鍵跳轉(zhuǎn)表首址

JMP@A+DPTR;散轉(zhuǎn)入命令鍵入口

JPTAB:

AJMPCCS0;雙字節(jié)指令

AJMPCCS1

AJMPCCS2根據(jù)累加器A的值,如A為0轉(zhuǎn)移到CCS0執(zhí)行,為1轉(zhuǎn)移到CCS1處執(zhí)行,為2轉(zhuǎn)移到CCS2處執(zhí)行(設(shè)三處轉(zhuǎn)移地址均在同一2K空間內(nèi))。2空操作指令(1條)3條件轉(zhuǎn)移指令(8條)

(1)判零轉(zhuǎn)移指令(2)比較轉(zhuǎn)移指令(4條)(3)循環(huán)轉(zhuǎn)移指令(2條)DJNZ第一操作數(shù),rel程序每執(zhí)行一次本指令,將第一操作數(shù)的字節(jié)變量減1,并判字節(jié)變量是否為零,若不為0,則轉(zhuǎn)移到目標(biāo)地址,繼續(xù)執(zhí)行循環(huán)程序段;若為0,則結(jié)束循環(huán)程序段的執(zhí)行,程序往下執(zhí)行。其中,rel為相對于DJNZ指令的下一條指令的第一個(gè)字節(jié)相對偏移量,用一個(gè)帶符號的8位數(shù)表示。所以,循環(huán)轉(zhuǎn)移的目標(biāo)地址應(yīng)為DJNZ指令的下條指令地址和偏移量之和。片內(nèi)RAM30H單元開始有10個(gè)字節(jié)的二進(jìn)制數(shù)。編一子程序,求它們的和。將和存入20H單元中。MOV R0,#30H

CLR A

MOV R7,#10

CLR C

LOOP:

ADDC A,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論