2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩105頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三章 MCS-51的指令系統(tǒng),3.1 指令系統(tǒng)概述 3.2 指令系統(tǒng)的尋址方式 3.3 MCS-51指令系統(tǒng)分類介紹,3.1 指令系統(tǒng)概述,首先應該明確一個概念,什么是指令系統(tǒng)。我們把MCS-51單片機所能執(zhí)行的指令的集合稱為其指令系統(tǒng)。 指令的表示方法稱為指令格式,一條指令通常由兩部分組成,即操作碼和操作數(shù)。,操作碼 操作數(shù),,指令的性質(zhì),指令操作的對象,當然操作數(shù)并不一定是一個具體的數(shù)據(jù),

2、也有可能僅指出到哪里取得數(shù)據(jù)的地址或符號。 MCS-51的基本指令共111條,下面是指令系統(tǒng)按空間和時間上的劃分:,,從上表我們可以看出,絕大多數(shù)指令占用單字節(jié)或雙字節(jié),并且都能在1--2個機器周期內(nèi)完成。由此可見,MCS-51指令系統(tǒng)對存儲空間和時間的利用率較高。,3.2 MCS-51指令系統(tǒng)的尋址方式,所謂尋址就是尋找確定參與操作的數(shù)的真正地址。一般來說,尋址方式越多則計算機的功能就越強,靈活性亦越大,指令系統(tǒng)也就越

3、復雜。 MCS-51單片機的指令系統(tǒng)共有7種尋址方式。,3.2.1 符號注釋,在描述MCS-51指令系統(tǒng)的功能時,我們經(jīng)常使用下面符號,其意義如下:,Rn(n=0--7) 當前選中的寄存器區(qū)的8個工作寄存器R0--R7,Ri (i=0、1) 當前選中的寄存器區(qū)中可作地址寄存器的2個寄存器R0、R1。,Direct直接地址,即8位的內(nèi)部數(shù)據(jù)存儲器單元或特殊功能寄存器的地址。,,#data

4、指令中的8位常數(shù) #data16 指令中的16位常數(shù),Rel 8位的有符號偏移量。用于SJMP或所有的條件轉(zhuǎn)移指令中。偏移量按相對于下一條指令的第一個字節(jié)地址與跳轉(zhuǎn)后指令的第一個字節(jié)地址之差計算,在-128~+127范圍內(nèi)取值。,DPTR 數(shù)據(jù)指針,可用作16位的地址寄存器,Bit內(nèi)部RAM或特殊功能寄存器中的直接尋址位地址,@間址寄存器或基址寄存器的前綴。如@Ri, @A+DPTR,(X)

5、X中的內(nèi)容((X)) 由X尋址的單元中的內(nèi)容,Cy進位標志或進位位,也可作為位處理機中的1位累加器。,/ 位操作數(shù)的前綴,表示對該位操作數(shù)取反,如/bit。,3.2.2 尋址方式,1 、 立即尋址2 、 直接尋址3 、 寄存器尋址4 、 寄存器間接尋址5 、 變址尋址6 、 相對尋址7 、 位尋址,立即尋址,指令中直接給出操作數(shù)。立即操作數(shù)用前面加有#號的8位或16位數(shù)來表示。 8位立即操作數(shù)占一個字節(jié), 16

6、位立即操作數(shù)占二個字節(jié)。 例如: MOVA,# 60H;A←#60H MOVDPTR,# 3400HDPTR←#3400H MOV30H,# 40H;(30H)←#40H,指令代碼分別為:74H 60H90H 34H 00H 75H 30H 40H,直接尋址,指令直接給出操作數(shù)地址。占一個字節(jié)??稍L問兩種地址空間: 特殊功能寄存器地址空間 唯一能訪問該空間的尋址方式。 片內(nèi)內(nèi)部

7、RAM(128個字節(jié):00H~7FH),指令形如 MOVA,direct 指令代碼: 11100101 direct,對于特殊功能寄存器,在助記符指令中可直接用符號來代替地址,如: MOV A ,P0 (MOV A ,80H這兩條指令是等價的) 表示將P0口的內(nèi)容傳送給A。 思考:MOV 50H, 40H 占多少字節(jié)?,例:MOVA,40H 指令代碼 11100101

8、 01000000即為:E5H 40H,寄存器尋址,尋址的對象為選定寄存器區(qū)的8個工作寄存器R0--R7,寄存器A、B、DPTR、和Cy位。這種尋址方式中,被尋址的寄存器的內(nèi)容就是操作數(shù),一般和操作碼共占一個字節(jié).,例:單字節(jié)指令: MOVA,Rn(n=0~7)指令代碼:1110 1iii (iii=000~111)即為:E8H-EFH,操作碼的低3位指示所用的寄存器,CLR AINC DPTRADD R5,#

9、 20H操作數(shù)采用什么尋址方式?指令占多少字節(jié)?,思考:,寄存器間接尋址,以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操作數(shù)的尋址方式。能用于寄存器間接尋址的寄存器有R0,R1,DPTR,SP。其中R0、R1必須是工作寄存器組中的寄存器。SP僅用于堆棧操作。 訪問內(nèi)部RAM或外部數(shù)據(jù)存儲器的低256個字節(jié)時,可采用 R0或R1作為間址寄存器,通用形式為@Ri。,MOV A ,@Ri (i=0、1) 例: MOV A, @R

10、0 , 指令代碼: 1110 0110。,最低位是0還是1區(qū)分現(xiàn)用寄存器為R0還是R1。,假設(shè)該條指令存放在2030H,工作寄存器為第0組,(R0)=50H。50H為片內(nèi)RAM的一個單元(50H)=ACH。 M0VA,@R0該條指令的執(zhí)行過程,2030H,,,…,…,MOVX A ,@Ri (i=0、1) 例:MOVX A,@R1 , 指令代碼 :1110 0011。 假設(shè)該條指令存放在2030H,工作寄存器為第

11、0組,(R1)=AFH。片外RAM (AFH)=30H。指令執(zhí)行過程:,最低位是0還是1區(qū)分現(xiàn)用寄存器為R0還是R1。,,,訪問片外數(shù)據(jù)存儲器還可用數(shù)據(jù)指針DPTR作為間址寄存器,可對整個外部數(shù)據(jù)存儲器空間(64K)尋址。 例: MOV DPTR ,#1234H MOVX A ,@DPTR 執(zhí)行PUSH和POP指令時,使用堆棧指針SP作間址寄存器來進行對棧區(qū)的間接尋址。,基址寄存器加變址寄存器

12、間址尋址,變址尋址只能對程序存儲器中數(shù)據(jù)進行操作。由于程序存儲器是只讀的,因此變址尋址只有讀操作而無寫操作,此種尋址方式對查表訪問特別有用。本尋址方式的指令只有三條: MOVC A,@A+DPTR ;A←(A+DPTR) MOVC A,@ A+PC ;A←(A+PC) JMP @A+DPTR 無條件轉(zhuǎn)移指令 基址寄存器:DPTR或PC變址寄存器:累加器A 有效地址=(PC)+(A)

13、或有效地址=(DPTR)+(A),例:(DPTR)=2000H,(A)=10H, MOVC A,@A+DPTR , JMP @A+DPTR指令操作示意圖如下圖所示。,相對尋址,為解決程序轉(zhuǎn)移而專門設(shè)置的。它以PC的當前值為基準,加上指令中給出的相對偏移量(rel)形成有效轉(zhuǎn)移地址。偏移量占一個字節(jié),但這里的PC的當前值是指執(zhí)行完該指令后的PC值,即轉(zhuǎn)移指令的PC值加上它的字節(jié)數(shù)。 轉(zhuǎn)移的目的地址用公式表示:,目的地址=轉(zhuǎn)移指令

14、所在地址+轉(zhuǎn)移指令的字節(jié)數(shù)+rel,rel: 1個有符號的8位二進制補碼.表示的范圍是:-128 至 +127。,例如: SJMP 08H ; PC←PC+2+08 (指令的地址)=2000H指令操作示意圖如下圖所示。,位尋址,MCS-51有位處理的功能,可以對數(shù)據(jù)位進行操作,因此有相應的位尋址的方式。除C外,位尋址指令直接使用位地址, 占一個字節(jié)。 例如: MOV C, 40H ;把位40

15、H的值送到進位位C。 位尋址的尋址范圍為整個位地址211位的空間。,這些尋址位在指令中的表示方法不盡相同,有以下四種(以PSW位5為例): 直接使用位尋址。 0D5H位名稱的表示方法。 F0標志位 單元地址加位數(shù)的表示方法。(0D0H).5 特殊功能寄存器符號加位數(shù)的表示方法。PSW.5,3.3 MCS-51指令系統(tǒng)分類介紹,數(shù)據(jù)傳送類指令算術(shù)運算類指令邏輯運算與循環(huán)類指令程序轉(zhuǎn)移類指令調(diào)用子程序及返回指令

16、 位操作指令空操作指令,數(shù)據(jù)傳送類指令 -----使用最頻繁的指令,數(shù)據(jù)傳送類指令共28條,是將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP 8種。 數(shù)據(jù)傳送類指令不影響標志,這里所指的標志是指Cy、Ac和OV,但不包括檢驗累加器奇偶性的標志位P。,目的地址

17、 源地址,,,,數(shù) 據(jù),MOV ,,MOV A,#20H,,,MOV,20H,A,數(shù)據(jù)傳送指令(29條) 使用最頻繁的指令 ——8位數(shù)據(jù)傳送指令(15條),MCS-51單片機片內(nèi)數(shù)據(jù)傳送途徑如圖所示,,以累加器為目的操作數(shù)的指令,MOV A,Rn ;A← RnMOV A,direct ;A←(direct)MOV A,@Ri ;A←(Ri)MOV

18、 A,#data ;A← #data這組指令的功能是把源操作數(shù)的內(nèi)容送入累加器A。,MOV A,R6 ;(R6)?A 寄存器尋址MOV A,@R0 ;((R0))?A 間接尋址MOV A,70H ;(70H)?A 直接尋址MOV A,#78H ;78H?A 立即尋址,以Rn為目的操作數(shù)的指令

19、,MOV Rn,A ; (A) ?Rn,n=0~7MOV Rn,direct ; (direct) ?Rn,n=0~7MOV Rn,#data ; data?Rn,n=0~7這組指令的功能:把源操作數(shù)的內(nèi)容送入當前工作寄存器區(qū)的R0--R7中的某一個寄存器.,以直接地址為目的操作數(shù)的指令,MOV direct,A ;(A) ?directMOV direct,Rn

20、 ;(Rn)?direct n=0~7MOV direct1,direct2 ;(direct2) ?direct1MOV direct,@Ri ;((Ri)) ?direct ,i=0,1MOV direct,#data ;data?direct這組指令的功能:把源操作數(shù)送入直接地址指出的存儲單元。,以寄存器間接地址為目的操作數(shù)的指令,MOV @Ri,A ;(A) ?((Ri))

21、,i=0,1MOV @Ri,direct ;direct?((Ri)),i=0,1MOV @Ri,#data ;data?((Ri)),i=0,1指令的功能:把源操作數(shù)內(nèi)容送入R0或R1指出的存儲單元。,例如:設(shè)(30H)=6FH,(R1)=40H,執(zhí)行 MOV @R1,30H30H單元中數(shù)據(jù)取出送入R1間接尋址的40H單元,(40H)=6FH。,16位數(shù)據(jù)傳送指令 (1條),MOV DP

22、TR,#data16 指令功能:是把16位常數(shù)送入DPTR。這是整個指令系統(tǒng)唯一的一條16位數(shù)據(jù)傳送指令,用來設(shè)置地址指針。地址指針DPTR由DPH和DPL組成。這條指令的執(zhí)行結(jié)果把高8位立即數(shù)送入DPH,低8位立即數(shù)送入DPL。,堆棧操作指令,所謂堆棧是在片內(nèi)RAM中按“先進后出”原則設(shè)置的專用存儲區(qū)。數(shù)據(jù)的進棧出棧由指針SP統(tǒng)一管理。在指令系統(tǒng)中有兩條用于數(shù)據(jù)操作的棧操作指令。,,POP direct;(direct)←(S

23、P),SP ← SP-1指令功能:棧指針SP指示的內(nèi)部RAM單元內(nèi)容送入直接地址指出的字節(jié)單元中,棧指針SP減1。,PUSH direct;SP←(SP+1),(SP)←(direct) 指令功能:首先將棧指針SP加1,然后把直接地址指出的內(nèi)容送到棧指針SP指示的內(nèi)部RAM單元中。,PUSH A (SP)+1=61H?SP (A)?61H,例如:當(SP)=60H,(A)=30H,(B)=70H時執(zhí)行下列指令,P

24、USH B (SP)+1=62H?SP (B)?62H,結(jié)果:(61H)=30H (62H) =70H (SP) =62H,棧底,棧頂,70H,例如:當(SP)=62H,(62H)=70H,(61H)=30H時,執(zhí)行下列指令,POP DPH ((SP))?DPH (SP)-1?SP,POP DPL ((SP))?DPL (SP)-1?SP,結(jié)果:(DPTR)=7030H (SP)=

25、60H,,30H,DPH,DPL,SP,【例】將片內(nèi)RAM 30H單元與40H單元中的內(nèi)容互換。,方法1(直接地址傳送法) MOV31H,30H MOV30H,40H MOV40H,31H SJMP$,方法2(間接地址傳送法) MOVR0,#40H MOVR1,#30H MOVA,@R0 MOVB,@R1 MOV@R1,A MOV@R0,B SJMP

26、$,方法3(字節(jié)交換傳送法): MOVA,30H XCHA,40H MOV30H,A SJMP$,方法4(堆棧傳送法): PUSH30H PUSH40H POP30H POP40H SJMP$,累加器A與外部數(shù)據(jù)存儲器傳送指令,指令功能:累加器A與外部RAM存儲器或I/O的數(shù)據(jù)相互傳送。MOVX A,@DPTR ;((DPTR))?A, 讀外部RAM/IO

27、MOVX @DPTR,A ;(A)?(DPTR),寫外部RAM/IO MOVX A,@Ri ;((Ri))?A, 讀外部RAM/IOMOVX @Ri,A ;(A)?((Ri)),寫外部RAM/IO,采用16位的DPTR作間接尋址,可尋址整個64K片外數(shù)據(jù)存儲器空間。高8位地址(DPH)由P2口輸出,低8位地址DPL由P0口輸出。,采用Ri作間接尋址,可尋址片外256B的數(shù)據(jù)存儲器。8位地址和數(shù)據(jù)均由P0

28、口輸出,可選用其他任何輸出口線來輸出高于8位的地址(一般選用P2口輸出高8位的地址)。,查表指令,MOVC A,@A+PC 這條指令以PC作基址寄存器,A的內(nèi)容作為無符號整數(shù)和PC的內(nèi)容相加后得到一個16位的地址,由該地址指出的程序存儲單元的內(nèi)容送達累加器A。,此指令的優(yōu)點是不改變特殊功能寄存器及PC的狀態(tài),根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。缺點是表格只能存放在該條查表指令后面的256個單元之內(nèi),表格的大小受到限制,而且表格

29、只能被一段程序所利用。,,例:(A)=30H,執(zhí)行地址1000H處的指令 1000H:MOVC A,@A+PC 本指令占有一個單元,下一條指令的地址 為1001H,(PC)=1001H再加上A中的30H,得1031H,結(jié)果將程序存儲器中1031H的內(nèi)容送入A。,MOVC A,@A+DPTR 這條指令以DPTR作為基址寄存器,A的內(nèi)容作為無符號整數(shù)和DPTR的內(nèi)容相加后得到一個16位的地址

30、,由該地址指出的程序存儲單元的內(nèi)容送達累加器A。,例:(DPTR)=8100H (A)=40H 執(zhí)行指令 MOVC A,@A+DPTR結(jié)果將程序存儲器中的8140H單元內(nèi)容送入累加器A。,,這條查表指令的執(zhí)行結(jié)果只和指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址及常數(shù)表格存放的地址無關(guān),因此表格的大小和位置可以在64K程序存儲器中任意安排,一個表格可以為各個程序塊公用。,字節(jié)交換指令,XCH A,Rn

31、 ;(A)??(Rn),n=0~7XCH A,direct ; (A)??(direct)XCH A,@Ri ;(A)??((Ri)), i=0,1指令功能:將累加器A的內(nèi)容和源操作數(shù)的內(nèi)容相互交換。,例:(A)=80H (R7)=08H (40H)=F0H (R0)=30H (30H)=0FH 執(zhí)行指令: XCH A,R7 ;(A)??(R7) 寄存器尋址 XCH A,40H

32、;(A)??(40H) 直接地址 XCH A,@R0 ;(A)??((R0)) 寄存器間接尋址結(jié)果: (A)=0FH (R7)=80H (40H)=08H (30H)=F0H,半字節(jié)交換指令,XCHD A,@Ri 指令功能:累加器的低4位與內(nèi)部RAM低4位交換。 例:(R0)=60H,(60H)=3EH,(

33、A)=59H 執(zhí)行完XCHD A,@R0指令 則(A)=5EH,(60H)=39H。,算術(shù)運算類指令,算術(shù)運算類指令主要是對8位無符號數(shù)進行算術(shù)操作,包括加、減、加1、減1以及乘法和除法運算指令。這類指令會影響PSW的有關(guān)位,例如:加法、減法運算指令執(zhí)行結(jié)果影響PSW的進位位CY、溢出位OV、半進位位AC和奇偶校驗位P。對這一類指令要特別注意正確地判斷結(jié)果對標志位的影響。,加法指令,ADD A,Rn ;(

34、A)+(Rn) ?A ,n=0~7ADD A,direct ;(A)+(direct) ?AADD A,@Ri ;(A)+(@Ri) ?A, i=0,1ADD A,#data ; (A)+data ?A,這組指令的特點:一個加數(shù)總是來自累加器A,并且運算結(jié)果放在累加器A中。,使用加法指令時,對各個標志位的影響:,位7有進位,則置“1”進位標志Cy,否則清“0”Cy,位3有進位,置“1”輔助進位標志Ac,否則清“0

35、”Ac,如果位6有進位,而位7沒有進位,或者位7有進位,而位6沒有,則置“1” OV,否則清“0”O(jiān)V。,注意:溢出標志位OV,只有在有符號數(shù)加法運算時才有意義。當2個有符號數(shù)相加時,OV=1,表示加法運算超出了累加器A所能表示的帶符號數(shù)的有效范圍(-128 ~ +127),例:(A)=53H,(R0)=FCH 執(zhí)行指令 ADD A,R0 0101 0011 +)1111

36、1100 1 0100 1111結(jié)果:(A)=4FH Cy=1 Ac=0 P=1 OV=0(位6、位7同時有進位),例:(A)=85H (R0)=20H,(20H)=AFH 執(zhí)行指令 ADD A,@R0 1000 0101 +)1010 1111 1 0011

37、 0100 結(jié)果:(A)=34H Cy=1 Ac=1 P=1 OV=1(位7有進位,位6無),帶進位加法指令,ADDC A,Rn ;(A)+(Rn)+ Cy ?A ,n=0~7ADDC A,direct ;(A)+(direct) + Cy ?AADDC A,@Ri ; (A)+(@Ri) + Cy ?A, i=0,1ADDC A,#data ;(A)+data +

38、Cy ?A,這組指令的特點:進位標志位Cy參加運算。功能是同時把所指出的字節(jié)變量、進位標志與累加器A內(nèi)容相加,結(jié)果留在累加器A中。,1000 0101+) 1111 1111 1 Cy=1 1000 0101 結(jié)果:(A)=85H Cy=1 Ac=1 OV=0 P=1,,,,例:(A)=85H,(20H)=FFH,Cy=1執(zhí)

39、行指令 ADDC A,20H,增量指令,INC A INC Rn ;n=0~7INC @Ri ;i=0,1INC DPTR (16位數(shù)加1指令) INC direct指令功能:把所指出的變量加1。,指令首先對低8位指針DPL的內(nèi)容執(zhí)行加1的操作,當產(chǎn)生溢出時,就對DPH的內(nèi)容進行加1操作。,,對于指令I(lǐng)NC direct,若直接地址是I/O端口,則進行“讀-修改-寫”操作。指令執(zhí)

40、行過程中,首先讀入端口的內(nèi)容(來自端口鎖存器而不是端口引腳),然后在CPU中加1,繼而輸出到端口。,十進制調(diào)整指令,DA A 這條指令是對壓縮BCD碼加法運算時,跟在ADD和ADDC指令之后,用于對BCD碼的加法運算結(jié)果自動進行修正,使其結(jié)果仍為BCD表達形式。,,調(diào)整方法:若(A0-3)>9或(AC)=1則(A0-3)+06H→(A0-3)若(A4-7)>9或(Cy)=1則(A4-7)+06H →(A4-7

41、),,在計算機中,遇到十進制調(diào)整指令時,中間結(jié)果的修正是由ALU硬件中的十進制修正電路自動進行時,用戶不必考慮何時該加“6”,使用時只需在上述加法指令后面緊跟一條“DA A”指令即可。 注意:在MCS-51中,“DA A” 指令不適用于減法指令。,5. 帶進位減法指令,SUBB A,Rn ;(A)-(Rn)- Cy ?A ,n=0~7SUBB A,direct ;(A)-(direct) - Cy ?

42、ASUBB A,@Ri ; (A)-(@Ri) - Cy ?A, i=0,1SUBB A,#data ;(A)-data - Cy ?A,這組帶進位減法指令是從累加器A中減去指定的變量和進位標志,結(jié)果存在累加器中。,如果位7需借位則置位Cy,否則清“0”Cy; 如果位3需借位則置位Ac,否則清“0”Ac; 如果位6需借位而位7不需要借位,或位7需借位而位6不需要借位,則置位溢出標志位OV,否則清“0”O(jiān)V。,

43、例:(A)=C9H, (R2)=54H, Cy=1執(zhí)行指令 SUBB A,R2 1100 1001 0101 0100 -) 1 0111 0100 結(jié)果為:(A)=74H, Cy=0, Ac=0, OV=1,減1指令,

44、DEC A ;(A)-1?ADEC Rn ;(Rn) -1?A ,n=0~7DEC direct ;(direct)-1?directDEC @Ri ;((Ri))-1?(Ri),i=0,1指令功能:是指定的變量減1。若原來為00H,減1后下溢為FFH,不影響標志。,例:(A)=0FH,(R7)=19H ,(30H)=00H (R1)=40H,(40H)=0FFH執(zhí)行指令:

45、 DEC A ;(A)-1?A DEC R7 ;(R7)-1?R7 DEC 30H ;(30H)-1?30H DEC @R1 ;((R1))-1?(R1)結(jié)果為:(A)=0EH,(R7)=18H,(30H)=0FFH (40H)=0FEH,P=1 (除A減1影響P標志外),乘法指令,MUL AB ;A*B ?BA 這

46、條指令的功能是把累加器A和寄存器B中的無符號8位整數(shù)相乘。其16位積的低位字節(jié)在累加器A中,高位字節(jié)在B中。如果積大于255,則置位溢出標志OV,否則清“0”O(jiān)V。 注意:進位標志總是清“0”。,除法指令,DIV AB ;A/B ? A(商),余數(shù)? B 指令的功能:把累加器A中8位無符號整數(shù)除以B中的8位無符號整數(shù)。商存放在累加器A中,余數(shù)在寄存器B中,清“0”Cy和溢出標志位OV。 注意:如果B的內(nèi)容為0

47、,則結(jié)果A,B中的內(nèi)容不定,并置溢出標志位OV位1。,,例:(A)=FBH=251,(B)=12H=18執(zhí)行指令 DIV AB結(jié)果為:(A)=0DH=13,(B)=11H=17, Cy=0,OV=0,邏輯運算類指令,簡單邏輯操作指令 左環(huán)移指令 右環(huán)移指令 帶進位左環(huán)移指令帶進位右環(huán)移指令累加器半字節(jié)交換指令邏輯與指令邏輯或指令邏輯異或指令,簡單邏輯操作指令,1)  &#

48、160;  CLR A 指令功能:累加器A清“0”。不影響 Cy,Ac,OV等標志。2)      CPL A 指令功能:累加器A按位取反,不影響標志。,,,,,,,,,,,,,,,,,,,,,,,A.0,A.7,,,,,,,,,,,,,,,,,,,,,,,,A.0,A.7,,,,,,,,,,,,,,,,,,,,,,,,A.0,A.7,,,,,,,,,,,

49、,,,,,,,,,,,,,A.0,A.7,,,CY,,,CY,RL A RR A RLC A RRC A,注意:執(zhí)行帶進位的循環(huán)移位指令之前,必須給CY置位或清零。,循環(huán)移位指令,,例: 已知A=7AH,CY=1,執(zhí)行指令 RLC A,結(jié)果: A=F5H,CY=0,P=0,1,,,,,,,0,1,1,1,1,0,1,0,,例: 已知A=7AH, CY=1,執(zhí)行指令 R

50、LC A,結(jié)果: A=F5H,CY=0,P=0,0,,,,,,,1,1,1,1,0,1,0,1,累加器半字節(jié)交換指令,SWAP A指令功能: 累加器A的高半字節(jié)和低半字節(jié)互換。 例:(A)=0C5H,執(zhí)行指令 SWAP A 結(jié)果:(A)=5CH,邏輯與指令,ANL A , Rn ; (A)∧(Rn)?A, n=0~7ANL A ,direct ; (A)∧(direct)?A

51、ANL A ,#data ; (A)∧data?AANL A ,@Ri ;(A)∧((Ri))?AANL direct , A ; (direct)∧A?directANL direct , #data ; (direct)∧data?direct,指令功能:在指出的變量之間以位為基礎(chǔ)進行邏輯與操作,結(jié)果存放到目的變量所在的寄存器或存儲器中去。,,例:(A)=07H,(R0)=0FDH執(zhí)行

52、指令:ANL A,R0 0000 0111 ∧) 1111 1101 0000 0101結(jié)果為:(A)=05H,邏輯或指令,ORL A ,Rn ; (A)∨(Rn)?A, n=0~7ORL A ,direct ; (A)∨(direct)?AORL A ,#data ; (A)∨data?AORL A ,@Ri

53、 ;(A)∨((Ri))?AORL direct, A ; (direct)∨A?directORL direct, #data ; (direct)∨data?direct,指令功能:在指出的變量之間執(zhí)行以位為基礎(chǔ)的邏輯“或”操作,結(jié)果存放到目的變量所在的寄存器或存儲器中去。,,例:(P1)=05H,(A)=33H執(zhí)行指令 ORL P1,A 0

54、000 0101 ∨) 0011 0011 0011 0111結(jié)果:(P1)=37H,邏輯異或指令,XRL A ,Rn ; (A)+(Rn)?A ,n=0~7XRL A ,direct ; (A)+(direct)?AXRL A ,#data ; (A)+data?AXRL A ,@Ri ;(A)+((Ri))?AXRL

55、 direct, A ; (direct)+A?directXRL direct, #data ; (direct)+data?direct,指令功能:在指出的變量之間執(zhí)行以位為基礎(chǔ)的邏輯異或操作,結(jié)果存放到目的變量所在的寄存器或存儲器中去。,,例:(A)=90H,(R3)=73H 執(zhí)行指令 XRL A,R3 1001 0000 + 0111 0011

56、 1110 0011結(jié)果:(A)=E3H,控制轉(zhuǎn)移類指令,無條件轉(zhuǎn)移指令(4條) 相對轉(zhuǎn)移指令 長跳轉(zhuǎn)指令 間接跳轉(zhuǎn)指令(散轉(zhuǎn)指令) 條件轉(zhuǎn)移指令 比較轉(zhuǎn)移指令 減1不為0轉(zhuǎn)移指令 (循環(huán)指令)調(diào)用子程序指令 子程序返回指令 中斷返回指令 空操作指令,長跳轉(zhuǎn)指令,LJMP addr16 指令中包含16位地址,所以轉(zhuǎn)移的目標地址范圍是程序存儲器的0000H--FFFFH。指令執(zhí)行時把

57、指令的第二和第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無條件地轉(zhuǎn)向指定地址。,,LJMP AAAAH ; AAAAH?PC,PC=0000H,PC=AAAAH,假設(shè)執(zhí)行該指令前,PC的值為0000H。,注意:該指令可以轉(zhuǎn)移到64 KB程序存儲器中的任意位置。,絕對轉(zhuǎn)移(短轉(zhuǎn)移)指令,AJMP addrll 指令中包含11位地址,因此這是2K字節(jié)范圍內(nèi)的跳轉(zhuǎn)指令。執(zhí)行該指令時,先將PC加2,然后把addrll送入PC.1

58、0~PC.0,PC.15~PC.11不變,程序轉(zhuǎn)移到指定的地方。,,PC高5位(保持不變),PC低11位,,,,,,,,,,,,,,,,,,,,,,,,,,,,,操作碼(第一字節(jié)),操作數(shù)(第二字節(jié)),,11位轉(zhuǎn)移地址的形成示意圖,程序計數(shù)器PC,,AJMP addr11 ; PC+2?PC, addr11 ?PC.10~PC.0,例:執(zhí)行指令 2000H: AJMP 2600H執(zhí)行后PC值的變化?,相對轉(zhuǎn)移指令,

59、SJMP rel 這是無條件跳轉(zhuǎn)指令,執(zhí)行時在PC加2之后,把指令的有符號的偏移量rel(-128~+127,負數(shù)表示向后轉(zhuǎn)移,正數(shù)向前轉(zhuǎn)移)加到PC上,并計算出轉(zhuǎn)向地址。 程序匯編時,直接寫上要轉(zhuǎn)向的目標地址標號就可以了。例如: LOOP: MOV A,R6 … SJMP LOOP

60、 …,手工匯編時,計算目的地址值 目的地址值 = 本指令地址值+2+rel計算偏移量 rel=目標地址-本指令地址值-2,例: LOOP : SJMP LOOP 偏移量REL為多少(補碼)?例: 執(zhí)行指令 2000H : SJMP 07H問執(zhí)行后PC值的變化?,PC,2002H,2003H,0000H,0001H,20

61、04H,2005H,2006H,,PC,,PC,,,PC,2006H,2003H,PC,,0002H,PC,相對轉(zhuǎn)移指令,例: SJMP 03H,,03H就是當前PC值與目的PC值相對差,PC,,間接跳轉(zhuǎn)指令(散轉(zhuǎn)指令),JMP @A+DPTR指令功能:累加器中的8位無符號數(shù)與數(shù)據(jù)指針DPTR的16位數(shù)相加,結(jié)果作為下條指令的地址送入PC,不改變累加器和數(shù)據(jù)指針DPTR的內(nèi)容,也不影響標志。,條件轉(zhuǎn)移指令,條件轉(zhuǎn)移指令是依

62、某種特定條件轉(zhuǎn)移的指令。條件滿足時轉(zhuǎn)移,不滿足時順序執(zhí)行下一條指令。 JZ rel ;如果累加器為零則執(zhí)行轉(zhuǎn)移 JNZ rel ;如果累加器不為零則執(zhí)行轉(zhuǎn)移,比較轉(zhuǎn)移指令,CJNE A,direct,rel CJNE A,#data,relCJNE Rn,#data,relCJNE @Ri,#data,rel,(PC)+3 ?(PC)若(原地址)(目的地址)則(PC)+REL ?(PC)且

63、 1? (CY)若(原地址)=(目的地址)則順序執(zhí)行,這組指令的功能是比較前面兩個操作數(shù)的大小,如果它們的值不相等則轉(zhuǎn)移,在PC加到下一條指令的起始地址后,通過把指令的最后一個字節(jié)的有符號的相對偏移量加到PC上,計算出轉(zhuǎn)向地址。,減1不為0轉(zhuǎn)移指令(循環(huán)指令),這組指令把減1與條件轉(zhuǎn)移兩種功能結(jié)合在一起。執(zhí)行時,將源操作數(shù)減1,結(jié)果回送到源操作數(shù)寄存器或存儲器中去。 DJNZ Rn, rel ;n=0~7 DJN

64、Z direct,rel,在實際問題中,經(jīng)常需要多次重復執(zhí)行某段程序。在編程時,可以設(shè)置一個計數(shù)值,每執(zhí)行一次這段程序,計算值減1,直至計數(shù)值減為0為止。,調(diào)用子程序指令,(1) 短調(diào)用指令:ACALL addrll PC+2?PC,SP+1?SP,PC.7--PC.0?(SP), SP+1?SPPC.15--PC.8?(SP), addr11?PC.10--PC.02KB范圍內(nèi)的調(diào)用子程序指令,其操作碼的形成類似于“AJ

65、MP”指令。,(2)長調(diào)用指令: LACLL addrl6 PC+3?PC,SP+1?SP, PC.7~PC.0?(SP), SP+1?SP PC.15~PC.8?(SP), addr16?PC這條指令無條件的調(diào)用位于指定地址的子程序。,子程序返回指令,RET ; (SP) ?PC.15~PC.8,SP-1?SP (SP) ?PC.7~PC.0,SP-1?SP 指令功能:從堆棧中退出PC的高位和低位字節(jié),把

66、棧指針減2,從PC值開始繼續(xù)執(zhí)行程序。不影響任何標志。,例:(SP)=62H, ,(62H)=20H,(61H)=08H(PC)=1 000H,指令地址 指令 1000H RET執(zhí)行過程:,57H,08H,20H,60H,61H,62H,棧底,例:(SP)=62H,(62H)=20H,(61H)=08H(PC)=10000H,指令地址 指令1000H RET,57H,08H,20H,60H,61H,

67、62H,棧底,例:(SP)=62H, ,(62H)=20H,(61H)=08H(PC)=10000H,指令地址 指令 1000H RET執(zhí)行過程:,57H,60H,棧底,20H,08H,執(zhí)行結(jié)果:(PC)=2008H(SP)=60H,中斷返回指令,RETI 指令功能:和RET指令相似,不同的是清除MCS-51內(nèi)部的中斷狀態(tài)標志。,位操作指令,由于MCS-51 單片機內(nèi)部有一個位處理機,所以對位地址空間具有比

68、較豐富的位操作指令。數(shù)據(jù)位傳送指令 位變量修改指令 位變量邏輯與指令 位變量邏輯或指令 條件轉(zhuǎn)移類指令,數(shù)據(jù)位傳送指令,MOV C , bit MOV bit , C 指令功能:把由源操作數(shù)指出的位變量送到目的操作數(shù)指定的單元中去。注意:一個操作數(shù)必須為進位標志(位累加器)。,例: 指令 MOV C , 06H必須要注意,這里的06H是內(nèi)部RAM20H字節(jié)位6的位地址。,位變量修改指令,CLR

溫馨提示

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

評論

0/150

提交評論