第2章 指令系統(tǒng) 福建專升本電子類復(fù)習資料 專升本電子類復(fù)習資料_第1頁
第2章 指令系統(tǒng) 福建專升本電子類復(fù)習資料 專升本電子類復(fù)習資料_第2頁
第2章 指令系統(tǒng) 福建專升本電子類復(fù)習資料 專升本電子類復(fù)習資料_第3頁
第2章 指令系統(tǒng) 福建專升本電子類復(fù)習資料 專升本電子類復(fù)習資料_第4頁
第2章 指令系統(tǒng) 福建專升本電子類復(fù)習資料 專升本電子類復(fù)習資料_第5頁
已閱讀5頁,還剩146頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章指令系統(tǒng)及程序設(shè)計舉例Exit§2.389S51指令系統(tǒng)§2.1匯編語言§2.2尋址方式要求:?掌握MCS-51單片機的尋址方式及各種尋址方式可用的存貯空間。?學會簡單的單片機應(yīng)用程序的設(shè)計方法。§2.1匯編語言§2.1.1指令和程序設(shè)計語言§2.1.2指令格式BACK§2.1.1指令和程序設(shè)計語言指令:是CPU根據(jù)人的意圖來執(zhí)行某種操作的命令。程序設(shè)計語言:是實現(xiàn)人機交換信息的基本工具,分為機器語言、匯編語言和高級語言。機器語言:用二進制編碼表示每條指令,是計算機能直接識別和執(zhí)行的語言。匯編語言:是用助記符、符號和數(shù)字等來表示指令的程序設(shè)計語言。它與機器語言指令是一一對應(yīng)的。BACK§2.1.2指令格式89S51匯編語言指令格式操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]匯編語言指令對應(yīng)的二進制代碼格式單字節(jié)指令雙字節(jié)指令三字節(jié)指令BACK單字節(jié)指令1、指令碼中隱含著對某一種寄存器的操作如:指令“INCDPTR”的指令代碼格式為:A3H=101000112、由指令中的rrr三位的不同編碼指定某一寄存器如:指令“MOVA,Rn”的指令代碼格式為:11101rrrBACK雙字節(jié)指令用一個字節(jié)表示操作碼,另一個字節(jié)表示操作數(shù)或操作數(shù)所在的地址。格式為:操作碼立即數(shù)或地址BACK三字節(jié)指令一個字節(jié)操作碼,兩個字節(jié)操作數(shù)。格式為:BACK立即數(shù)或地址操作碼立即數(shù)或地址§2.2尋址方式什么是尋址方式?所謂尋址就是尋找指令中操作數(shù)或操作數(shù)所在的地址,其目的就是要對操作數(shù)進行運算,之后的操作結(jié)果根據(jù)地址存放在相應(yīng)的寄存器或存儲器單元中。

BACK符號注釋Rn(n=0-7):當前選中的工作寄存器組R0-R7。Ri(I=0,1):作為地址指針的兩個工作寄存器R0,R1。#data:8位立即數(shù)。#data16:16位立即數(shù)。direct:8位片內(nèi)RAM單元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:補碼表示的8位地址偏移量。范圍:-128-+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號。/:位操作指令中對該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容?!簩⒆筮叺膬?nèi)容送于右邊的單元。多一個→,則其右邊的()少一個。$:當前指令的地址。

BACK尋址方式的種類:

1、寄存器尋址2、直接尋址3、立即數(shù)尋址4、寄存器間接尋址5、變址尋址6、相對尋址7、位尋址BACK1、寄存器尋址寄存器尋址:由指令指出寄存器組R0~R7中的某一個或其他寄存器(A,B,DPTR等)的內(nèi)容作為操作數(shù)。例如:MOVA,R0;(R0)→AMOVP1,A;(A)→P1口ADDA,R0;(A)+(R0)→ABACK2、直接尋址直接尋址方式:在指令中直接給出操作數(shù)所在存儲單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。直接尋址方式可訪問片內(nèi)RAM的128個單元以及所有的SFR。對于SFR,既可以使用它們的地址,也可以使用它們的名字。例如:MOVA,3AH;(3A)→AMOVA,P1;(P1口)→A或:MOVA,90H;90H是P1口的地址BACK說明:(1)比較以下三條指令①INCA②INCACC;ACC是SFR中的一個③INC0E0HA、ACC、0E0H是累加器的三種表示形式。①是寄存器尋址;②③是直接尋址,但都表示累加器的內(nèi)容自加1,即執(zhí)行結(jié)果相同。(2)注意區(qū)別字節(jié)地址和位地址。如:①MOVA,20H②MOVC,20H;(20H)→Cy①②形式相同,但結(jié)果不同,因為①中的20H為字節(jié)地址,②中的20H為位地址。

3、立即數(shù)尋址立即數(shù)尋址:指令操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù),用“#”號表示,以區(qū)別直接地址。例如:MOVA,3AH;(3AH)→AMOVA,#3AH;3AH→AMOVDPTR,#2000H;2000H→DPTR;(DPH)=20H;(DPL)=00H【思考】如下一條指令對否?MOVPC,#2000H

BACK4、寄存器間接尋址

寄存器間接尋址:操作數(shù)的地址事先存放在某個寄存器中,寄存器間接尋址是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。89S51規(guī)定R0或R1為間接尋址寄存器,它可尋址內(nèi)部地址RAM低位的128B單元內(nèi)容和片外RAM低256B單元。還可采用DPTR作為間接尋址寄存器,尋址外部數(shù)據(jù)存儲器的64KB空間。堆棧操作指令(PUSH、POP)也屬于寄存器間接尋址方式,即把SP作間址寄存器。

BACK例如:將片內(nèi)RAM65H單元內(nèi)容47H送A,可執(zhí)行指令“MOVA,@R0”。其中R0內(nèi)容為65H。如圖所示:65H47HR0A47H數(shù)據(jù)存儲器地址┋┋65H①②以指令中所指定的R0內(nèi)容(65H)為指針將片內(nèi)RAM65H單元內(nèi)容47H送ABACK5、變址尋址(基址寄存器+變址寄存器間接尋址)變址尋址:以某個寄存器的內(nèi)容為基地址,在這個基地址的基礎(chǔ)上加上地址偏移量形成真正的操作數(shù)地址。89S51中采用DPTR或PC為變址寄存器,A的內(nèi)容為地址偏移量。變址尋址只能訪問程序存儲器,訪問范圍為64KB。BACK只有兩條指令:①MOVCA,@A+PC ;((A)+(PC))→A②MOVCA,@A+DPTR ;((A)+(DPTR))→A

例如:MOVCA,@A+DPTR;((A)+(DPTR))→A如圖所示1EH0302HROMDPTRAA02F1H11H1EH+①②DPTR內(nèi)容與A的內(nèi)容之和為程序存儲器地址程序存儲器內(nèi)容送ABACK6、相對尋址

相對尋址:以程序計數(shù)器PC的當前值(指的是從程序存儲器中取出轉(zhuǎn)移指令后的PC值,也可以說是正在執(zhí)行指令的下一條指令的地址)作為基地址,與指令中給出的相對偏移量進行相加,把所得之和作為程序的轉(zhuǎn)移地址。51單片機中的控制轉(zhuǎn)移類指令都屬于此種尋址方式。

BACK

如在程序存儲器中2000H單元有一條雙字節(jié)的相對轉(zhuǎn)移指令“SJMP75H”。其操作示意圖如圖2-5所示。程序存儲器2000H、2001H單元的內(nèi)容80H、75H是“SJMP75H”的機器語言代碼。實際編程中偏移量75H用標號表示,省去我們手工計算轉(zhuǎn)移地址的麻煩,如: … SJMPLOOP …LOOP: …

7、位尋址位尋址:采用位尋址方式的指令的操作數(shù)是8位二進制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的兩種表示方法:直接使用位地址,如D3H;直接用寄存器名字加位數(shù),如PSW.3。位尋址區(qū)域:片內(nèi)RAM的20H-2FH的16個單元中的128位;字節(jié)地址能被8整除的SFR。BACK表2-2操作數(shù)尋址方式和有關(guān)空間BACKBACKMCS-51指令系統(tǒng)可分為五大類

[1]數(shù)據(jù)傳送指令:29條

[2]算術(shù)運算指令:24條

[3]邏輯運算及移位指令:24條

[4]控制轉(zhuǎn)移指令:17條

[5]位操作指令(布爾操作):17條Back§2.3.1數(shù)據(jù)傳送指令Back

數(shù)據(jù)傳送指令是MCS-51單片機匯編語言程序設(shè)計中使用最頻繁的指令,包括內(nèi)部RAM、寄存器、外部RAM以及程序存儲器之間的數(shù)據(jù)傳送。數(shù)據(jù)傳送操作是指把數(shù)據(jù)從源地址傳送到目的地址,源地址內(nèi)容不變,同時很少的數(shù)據(jù)傳送指令會影響PSW的結(jié)果。

Back

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

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

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

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

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

6.查表指令(2條)

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

8.棧操作指令(二條)

9.交換指令(4條)2.3.1.1內(nèi)部數(shù)據(jù)傳送指令格式:MOVdst,src ;(src)→dst或者,(dst)=(src)各操作數(shù)間傳送關(guān)系如下圖所示。說明:(1)立即數(shù)不能作dst。(2)direct可以作dst;direct之間還可以互相傳送數(shù)據(jù),提高了數(shù)據(jù)傳送的速度和效率。(3)無Rn和Rn之間數(shù)據(jù)傳送的指令。

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

2、以寄存器Rn為目的操作數(shù)的指令(3條)Back如:(A)=78H,(R5)=47H,(70H)=F2H,執(zhí)行指令:MOVR5,A ;(A) R5, (R5)=78HMOVR5,70H;(70H) R5, (R5)=F2HMOVR5,#A3H;A3H R5, (R5)=A3H注意,在89S51指令系統(tǒng)中沒有“MOVRn,Rn”傳送指令。Back3、以直接地址為目的操作數(shù)的指令(5條)Back4、以間接地址為目的操作數(shù)的指令(3條)Back5、十六位數(shù)據(jù)傳送指令(1條)這條指令的功能是把16位常數(shù)送入DPTR。DPTR由DPH和DPL組成。BackBack【例2-1】已知:Ri=32H,(30H)=AAH,(31H)=BBH,(32H)=CCH,請問執(zhí)行下列指令后累加器A、50H單元、R6、32H單元和P1口中的內(nèi)容是什么?MOVA,30H ;A=(30H)=AAHMOV50H,A ;(50H)=(A)=AAHMOVR6,31H ;R6=(31H)=BBHMOVP1,32H ;P1=(32H)=CCHMOV@R1,#30H ;(R1)=(32H)=30HMOVA,@R1 ;A=((R1))=30H所以,(A)=30H,(50H)=AAH,(R6)=BBH,(32H)=30H,(P1)=CCH。

2.3.1.2查表指令(2條)

——ROM的字節(jié)傳送指令

屬于變址尋址指令,所查的表格存放在程序存儲器中,以DPTR和PC作基地址即起始地址,累加器A為偏移量,分2種:Back基地址寄存器+變址寄存器間接尋址@PC+A(程序存儲器0-64K)基地址寄存器+變址寄存器間接尋址@DPTR+A(程序存儲器0-64K)A寄存器圖2-7程序存貯器傳送(查表)例:

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

所以,最后結(jié)果為:(A)=01(R0)=01(PC)=1004Back2.3.1.3外部RAM的字節(jié)數(shù)據(jù)傳送指令(4條)——I/O指令Back1.MCS-51沒有專門的I/O指令,它只能通過這種方式與外RAM或外設(shè)打交道,其中,前兩條指令是輸入指令,后兩條是輸出指令。2.外部RAM的數(shù)據(jù)傳送,只能通過累加器A進行。

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

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

外部數(shù)據(jù)存儲器傳送操作例:若:片內(nèi)RAM(30H)=01H,片外RAM(30H)=02H,執(zhí)行下面程序段后的結(jié)果如何。Back2.3.1.4棧操作指令(二條)Backdirect應(yīng)是直接地址。如:正確 錯誤PUSHACC PUSHAPOPOOH POPR0

例:繼續(xù)上例:Back

2.3.1.5數(shù)據(jù)交換指令(5條)Back(1)字節(jié)變換指令

例:(2)半字節(jié)交換指令Back

SWAPA ;(A0~3)←→(A4~7),A的高低半字節(jié)交換注意:1、2兩類指令都只影響標志位P,但3指令不影響任何標志位。

(3)累加器半字節(jié)交換指令【例】初始時:(A)=34H,(30H)=11H,執(zhí)行以下程序段:XCHA,30H ;(A)=11H,(30H)=34HMOVR1,#30H ;(R1)=30HXCHA,@R1 ;(A)=34H,(30H)=11HXCHDA,@R1 ;(A)=31H,(30H)=14HSWAPA ;(A)=13H§2.3.2算術(shù)運算指令Back算術(shù)邏輯運算和移位類指令中,累加器A是最為繁忙的指令,且多為dst。算術(shù)運算類指令執(zhí)行后除了增1、減1指令不影響CY、AC、OV外,其它指令會影響改變它們的值。其操作對象為8位的無符號二進制整數(shù),若對帶符號數(shù)或多字節(jié)二進制數(shù)運算,需通過編寫程序?qū)崿F(xiàn)。

Back

1.不帶進位加法指令(4條)2.帶進位加法指令(4條)3.十進制調(diào)整指令(1條)

4.帶借位減法指令(4條)5.乘法指令(1條)6.除法指令(1條)7.加1指令(5條)8.減1指令(4條)1、不帶進位加法指令(四條)Back例:Back2、帶進位加法指令(四條)Back3、十進制調(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例:有兩個BCD碼表示的4位十進制數(shù),分別存放在內(nèi)部數(shù)據(jù)存儲器的50H~51H單元和60H~61H單元,試編寫程序求這兩個數(shù)之和,結(jié)果的和存放在40H~41H單元,進位存放在42H單元。解:求兩個BCD數(shù)之和的運算程序段如下:MOV A,50H ;取第一個數(shù)低2位BCD碼ADD A,60H ;加第二個數(shù)低2位BCD碼DA A ;十進制調(diào)整MOV 40H,A ;保存結(jié)果的低2位MOV A,51H ;取高位BCD碼ADDC A,61H ;高位相加DA A ;十進制調(diào)整MOV 41H,A ;保存結(jié)果的高2位MOV A,#00HADDC A,#00H ;計算進位MOV 42H,A ;保存進位4、帶借位減法指令(四條)Back

說明:51系列單片機沒有不帶借位的減法指令。那么對于單字節(jié)的減法指令怎么處理這種情況呢?可用“CLRC”清Cy,即Cy=0,類似于不帶借位。(2)減法指令結(jié)果影響程序狀態(tài)字寄存器PSW的CY、OV、AC和P標志。

例:設(shè)(A)=0C9H,(R2)=54H,Cy=1。

執(zhí)行指令“SUBBA,R2”的結(jié)果如何?Back5、乘法指令(1條)

單字節(jié)四周期指令,操作數(shù)均為8位無符號整數(shù)。

該指令若乘積大于0FFH,則OV置1,否則OV清0。Cy位總是被清0。該操作也影響標志位P。

Back6、除法指令(1條)

單字節(jié)四周期指令,操作數(shù)均為8位無符號整數(shù)。

Back若除數(shù)(B)=00H,則結(jié)果無法確定,則OV置1。

CY總是被清0。該操作也影響標志位P。

7、加1指令(5條)Back8、減1指令(4條)Back§2.3.3邏輯操作指令Back

1.簡單操作指令(2條)

2.移位指令(4條)

3.邏輯“與”指令(6條)

4.邏輯“或”指令(6條)

5.邏輯“異或”指令(6條)Back1.簡單操作指令(2條)Back(1)累加器A清0指令(2)累加器A取反指令Back【思考】編程序段,實現(xiàn)功能:對30H單元中的數(shù)X求補并保存在原單元。

2.移位指令(4條)Back(1)累加器A循環(huán)左移指令(2)累加器A循環(huán)右移指令

(3)累加器A連同進位位循環(huán)左移指令 RLCA;(4)累加器A連同進位位循環(huán)右移指令 RRCA;Back3.邏輯“與”指令(6條)Back

這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進行邏輯“與”,結(jié)果存放在A中。前四條指令的操作影響標志位P。

后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進行邏輯“與”,結(jié)果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫”操作。Back應(yīng)用:可以使目的操作數(shù)清零或保留其中有用的位,如ANLdst,80H【思考】將41H(ASCII碼值)的高4位清零,低4位不變,何法?MOV A,#41HANL A,#0FH或MOVdirect,#0FH4.邏輯“或”指令(6條)Back這組指令的功能是將兩個指定的操作數(shù)按位進行邏輯“或”。前四條指令的操作結(jié)果存放在累加器A中,操作影響標志位P;后兩條指令的操作結(jié)果存放在直接地址單元中。應(yīng)用:對RAM存儲器單元或A中的數(shù)的某些位置“1”,而其余位不變。Back5.邏輯“異或”指令(6條)Back這組指令的功能是將兩個指定的操作數(shù)按位進行“異或”。前四條指令的結(jié)果存放在累加器A中,操作影響標志位P;后兩條指令的操作結(jié)果存放在直接地址單元中?!爱惢颉痹瓌t:相同為0,不同為1。應(yīng)用:對RAM存儲器單元或A中的數(shù)的某些位變反,而其他位不變,如#0FH前四位不變。Back上述邏輯操作類指令歸納如圖。例:拆字程序:在內(nèi)部RAM40H單元保存有以壓縮BCD碼表示的2位十進制數(shù),編程將它們拆開,分別保存在內(nèi)部RAM的41H、42H單元。程序如下:MOV A,40H ;壓縮BCD碼送累加器ANL A,#0FH ;高4位清0,保留低4位MOV 41H,A ;保存低4位BCD碼MOV A,40H ;取數(shù)據(jù)MOV A,#0F0H ;低4位清0,保留高4位SWAP A ;高低位交換MOV 42H,A ;保存高4位BCD碼

§2.3.4控制程序轉(zhuǎn)移類指令

1.無條件轉(zhuǎn)移指令(4條)

2.空操作指令(1條)

3.條件轉(zhuǎn)移指令(8條)

4.調(diào)用和返回指令Back

Back1、無條件轉(zhuǎn)移指令(4條)Back(1)短(絕對)轉(zhuǎn)移指令

Back

這條指令提供了11位地址,可在2K范圍內(nèi)無條件轉(zhuǎn)移到由a10-a0所指出的地址單元中。因為指令只提供低11位地址,高5位為原PC11-15位值,因此,轉(zhuǎn)移的目標地址必須在AJMP指令后面指令的第一個字節(jié)開始的同一2K字節(jié)范圍內(nèi)。Back

(2)長轉(zhuǎn)移指令BackBackORG0000H ;開機后(PC)=0000HLJMP0F80H已知某單片機監(jiān)控程序始地址為0F80H,請問可用什么辦法可使單片機開機后自動執(zhí)行該監(jiān)控程序。(3)相對轉(zhuǎn)移(短轉(zhuǎn)移)指令BackSJMPrel;

0000rel

(相對地

溫馨提示

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

評論

0/150

提交評論