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

下載本文檔

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

文檔簡介

第三章指令系統(tǒng)及程序設計舉例Exit§3.38051指令系統(tǒng)§3.1匯編語言§3.2尋址方式§3.4程序設計舉例§3.1匯編語言§3.1.1指令和程序設計語言§3.1.2指令格式BACK§3.1.1指令和程序設計語言指令:是CPU根據(jù)人的意圖來執(zhí)行某種操作的命令。程序設計語言:是實現(xiàn)人機交換信息的基本工具,分為機器語言、匯編語言和高級語言。機器語言:用二進制編碼表示每條指令,是計算機能直接識別和執(zhí)行的語言。BACK把10放到累加器A中0111010000001010MovA,#0AH匯編語言:是用助記符、符號和數(shù)字等來表示指令的程序設計語言。它與機器語言指令是一一對應的。把10放到累加器A中0111010000001010§3.1.2指令格式8051匯編語言指令格式操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]匯編語言指令對應的二進制代碼格式單字節(jié)指令雙字節(jié)指令三字節(jié)指令BACK§3.2尋址方式一、什么是尋址方式:如何找到存放操作數(shù)的地址,把操作數(shù)提取出來的方法。二、尋址方式的種類:三、尋址空間及符號注釋: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,90H;90H是P1口的地址或:MOVA,P1;(P1口)→ABACK3、立即數(shù)尋址立即數(shù)尋址:指令操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù),用“#”號表示,以區(qū)別直接地址。例如:MOVA,#3AH;3AH→AMOVA,3AH;(3AH)→A;直接尋址MOVDPTR,#2000H;2000H→DPTR;(DPH)=20H;(DPL)=00HBACK4、寄存器間接尋址

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

相對尋址:是以當前的PC值加上指令中規(guī)定的偏移量rel而形成實際的轉移地址。相對尋址只出現(xiàn)在相對轉移指令中。當前的PC值是指執(zhí)行完相對指令后的PC值;相對轉移指令操作碼所在地址稱為源地址;轉移后的地址稱為目的地址。目的地址=源地址+相對轉移指令字節(jié)數(shù)+relrel為補碼表示的有符號數(shù)。BACK6、相對尋址

例如:ROM中地址2000H開始機器碼8054H匯編:SJMPrel其中:80H是操作碼,54H是偏移量rel執(zhí)行后,PC=2000h+2+54HBACK7、位尋址位尋址:采用位尋址方式的指令的操作數(shù)是8位二進制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的兩種表示方法:直接使用位地址,如D3H;直接用寄存器名字加位數(shù),如PSW.3。位尋址區(qū)域:片內(nèi)RAM的20H-2FH的16個單元中的128位;字節(jié)地址能被8整除的SFR。BACKBACKMCS-51指令系統(tǒng)可分為五大類[1]數(shù)據(jù)傳送指令:28條[2]算術運算指令:24條[3]邏輯運算及移位指令:25條[4]控制轉移指令:17條[5]位操作指令(布爾操作):17條Back§3.3.1數(shù)據(jù)傳送指令

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條)BackBack1.以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)例:30H數(shù)據(jù)為11H,R1為30HMOVA,#30HMOVA,30HMOVA,@R1MOVA,R1(A)=30H(A)=11H(A)=11H(A)=30H

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

直接尋址和立這組指令的功能是把源操作數(shù)所指定的內(nèi)容送到當前工作寄存器組R0~R7中的某個寄存器。源操作數(shù)有寄存器尋址,即數(shù)尋址三種方式。如:(A)=78H,(R5)=47H,(70H)=F2H,執(zhí)行指令:MOVR5,AMOVR5,70HMOVR5,#A3HBack;(R5)=78H;(R5)=F2H;(R5)=A3H3、以直接地址為目的操作數(shù)的指令(5條)BackBack4、以間接地址為目的操作數(shù)的指令(3條)Back5、十六位數(shù)據(jù)傳送指令(1條)這條指令的功能是把16位常數(shù)送入DPTR。DPTR由DPH和DPL組成。BackBack6、查表指令(2條)Back基地址寄存器+變址寄存器間接尋址@PC+A(程序存儲器0-64K)基地址寄存器+變址寄存器間接尋址@DPTR+A(程序存儲器0-64K)A寄存器圖3-7程序存貯器傳送(查表)例:若:初始MOVDPTR,#2000H;MOVA,#0AH;MOVCA,@A+DPTR;執(zhí)行下面程序段后結果如何?MOVDPTR,#2000H;MOVA,#0AH;MOVCA,@A+DPTR;(DPTR)=2000H(A)=0AH(A)=((A)+(DPTR))=(200AH)則:(A)=(200AH)=11H

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

第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ù)。例:若:片內(nèi)RAM(30H)=01H,片外RAM(30H)=02H,執(zhí)行下面程序段后的結果如何。BackMOVR1,#30H; MOVXA,@R1; MOVR0,A ; MOVA,@R1; MOVR2,A ; (R1)=30H(A)=02H(R0)=(A)=02H(A)=((R1))=01H(R2)=(A)=01H8、棧操作指令(二條)Back例:MOVSP,#18H ; MOVA,#30H ; MOVDPTR,#1000H; PUSHACC ; PUSHDPH ; PUSHDPL ;POPDPL ;POPDPH ;POPACC ; (SP)=18H(A)=30H(DPTR)=1000H(SP)=19H(19H)=30H(SP)=1AH(1AH)=10H(SP)=1BH(1BH)=00H(DPL)=00H(SP)=1AH(DPH)=10H(SP)=19H(A)=30H(SP)=18HBack

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

初始時:(A)=34H,(30H)=11HXCHA,30H; MOVR1,#30H; XCHA,@R1; (A)=11H,(30H)=34H(R1)=30H(A)=34H,(30H)=11H(2)半字節(jié)交換指令§3.3.2算術運算指令1.不帶進位加法指令(四條)

2.帶進位加法指令(四條)

3.帶借位減法指令(四條)

4.乘法指令(1條)Back

5、除法指令(1條)

6、加1指令(5條)

7、減1指令(4條)

8、十進制調(diào)整指令(1條)Back1、不帶進位加法指令(四條)Back例:Back若:(A)=78H,(R0)=64H

執(zhí)行ADDA,R0后,結果及PSW=? (A):78H=01111000B

+(R0):64H=01100100B

(A):DCH=11011100B標志位: CY=0,AC=0,OV=1,P=1,即PSW=05H

結果:(A)=DCH(R0)=64H2、帶進位加法指令(四條)Back例:設(A)=0C3H,(R0)=0AAH, (CY)=1。

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

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

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

果存于(30H),(31H)單元中。

BackMOVA,30HADDA,40HMOV30H,AMOVA,31HADDCA,41HMOV31H,A3、帶借位減法指令(四條)Back

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

執(zhí)行指令“SUBBA,R2”的結果如何?Back解: (A)=0C9H=11001001B

-)Cy=1=00000001B11001000B

-)(R2)=54H=01010100B

(A)=74H=01110100B

結果為:(A)=74H標志位為:Cy=0AC=0OV=1P=04、乘法指令(1條)該指令若乘積大于0FFH,則OV置1,否則OV清0。Cy位總是被清0。Back例:(A)=4EH,(B)=5DH,

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

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

INC@R1;(30H)=12H

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

DAA;Back§3.3.3邏輯操作指令Back

1.簡單操作指令(2條)2.移位指令(4條)3.累加器半字節(jié)交換指令4.邏輯“與”指令(6條)5.邏輯“或”指令(6條)6.邏輯“異或”指令(6條)Back1.簡單操作指令(2條)Back(1)累加器A清0指令(2)累加器A取反指令Back2.移位指令(4條)Back(1)累加器A循環(huán)左移指令(2)累加器A循環(huán)右移指令

(3)累加器A連同進位位循環(huán)左移指令 RLCA;(4)累加器A連同進位位循環(huán)右移指令 RRCA;Back3.累加器半字節(jié)交換指令

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

這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進行邏輯“與”,結果存放在A中。后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進行邏輯“與”,結果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫”操作。Back5.邏輯“或”指令(6條)Back這組指令的功能是將兩個指定的操作數(shù)按位進行邏輯“或”,前四條指令的操作結果存放在累加器A中,后兩條指令的操作結果存放在直接地址單元中。Back6.邏輯“異或”指令(6條)Back

這組指令的功能是將兩個指定的操作數(shù)按位進行“異或”,前四條指令的結果存放在累加器A中,后兩條指令的操作結果存放在直接地址單元中。上述邏輯操作類指令歸納如圖。這類指令的操作均只影響標志位P。Back§3.3.4控制程序轉移類指令

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

2.空操作指令(1條)

3.條件轉移指令(8條)

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

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

Back

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

(2)長轉移指令BackBack(3)短轉移(相對轉移)指令BackSJMPrel;先(PC)+2→PC后(PC)+rel→PCBack(4)間接轉移指令Back2空操作指令(1條)Back3條件轉移指令(8條)

Back(1)判零轉移指令BackBack(2)比較轉移指令(4條)Back1011011i#datarelBack(3)循環(huán)轉移指令(2條)Back

程序每執(zhí)行一次本指令,將第一操作數(shù)的字節(jié)變量減1,并判字節(jié)變量是否為零,若不為0,則轉移到目標地址,繼續(xù)執(zhí)行循環(huán)程序段;若為0,則結束循環(huán)程序段的執(zhí)行,程序往下執(zhí)行。其中,rel為相對于DJNZ指令的下一條指令的第一個字節(jié)相對偏移量,用一個帶符號的8位數(shù)表示。所以,循環(huán)轉移的目標地址應為DJNZ指令的下條指令地址

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論