版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章 MCS-51的指令系統(tǒng),3.1 指令系統(tǒng)概述 3.2 指令系統(tǒng)的尋址方式 3.3 MCS-51指令系統(tǒng)分類介紹,3.1 指令系統(tǒng)概述,首先應(yīng)該明確一個(gè)概念,什么是指令系統(tǒng)。我們把MCS-51單片機(jī)所能執(zhí)行的指令的集合稱為其指令系統(tǒng)。 指令的表示方法稱為指令格式,一條指令通常由兩部分組成,即操作碼和操作數(shù)。,操作碼 操作數(shù),,指令的性質(zhì),指令操作的對(duì)象,當(dāng)然操作數(shù)并不一定是一個(gè)具體的數(shù)據(jù),
2、也有可能僅指出到哪里取得數(shù)據(jù)的地址或符號(hào)。 MCS-51的基本指令共111條,下面是指令系統(tǒng)按空間和時(shí)間上的劃分:,,從上表我們可以看出,絕大多數(shù)指令占用單字節(jié)或雙字節(jié),并且都能在1--2個(gè)機(jī)器周期內(nèi)完成。由此可見(jiàn),MCS-51指令系統(tǒng)對(duì)存儲(chǔ)空間和時(shí)間的利用率較高。,3.2 MCS-51指令系統(tǒng)的尋址方式,所謂尋址就是尋找確定參與操作的數(shù)的真正地址。一般來(lái)說(shuō),尋址方式越多則計(jì)算機(jī)的功能就越強(qiáng),靈活性亦越大,指令系統(tǒng)也就越
3、復(fù)雜。 MCS-51單片機(jī)的指令系統(tǒng)共有7種尋址方式。,3.2.1 符號(hào)注釋,在描述MCS-51指令系統(tǒng)的功能時(shí),我們經(jīng)常使用下面符號(hào),其意義如下:,Rn(n=0--7) 當(dāng)前選中的寄存器區(qū)的8個(gè)工作寄存器R0--R7,Ri (i=0、1) 當(dāng)前選中的寄存器區(qū)中可作地址寄存器的2個(gè)寄存器R0、R1。,Direct直接地址,即8位的內(nèi)部數(shù)據(jù)存儲(chǔ)器單元或特殊功能寄存器的地址。,,#data
4、指令中的8位常數(shù) #data16 指令中的16位常數(shù),Rel 8位的有符號(hào)偏移量。用于SJMP或所有的條件轉(zhuǎn)移指令中。偏移量按相對(duì)于下一條指令的第一個(gè)字節(jié)地址與跳轉(zhuǎn)后指令的第一個(gè)字節(jié)地址之差計(jì)算,在-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進(jìn)位標(biāo)志或進(jìn)位位,也可作為位處理機(jī)中的1位累加器。,/ 位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反,如/bit。,3.2.2 尋址方式,1 、 立即尋址2 、 直接尋址3 、 寄存器尋址4 、 寄存器間接尋址5 、 變址尋址6 、 相對(duì)尋址7 、 位尋址,立即尋址,指令中直接給出操作數(shù)。立即操作數(shù)用前面加有#號(hào)的8位或16位數(shù)來(lái)表示。 8位立即操作數(shù)占一個(gè)字節(jié), 16
6、位立即操作數(shù)占二個(gè)字節(jié)。 例如: MOVA,# 60H;A←#60H MOVDPTR,# 3400HDPTR←#3400H MOV30H,# 40H;(30H)←#40H,指令代碼分別為:74H 60H90H 34H 00H 75H 30H 40H,直接尋址,指令直接給出操作數(shù)地址。占一個(gè)字節(jié)??稍L問(wèn)兩種地址空間: 特殊功能寄存器地址空間 唯一能訪問(wèn)該空間的尋址方式。 片內(nèi)內(nèi)部
7、RAM(128個(gè)字節(jié):00H~7FH),指令形如 MOVA,direct 指令代碼: 11100101 direct,對(duì)于特殊功能寄存器,在助記符指令中可直接用符號(hào)來(lái)代替地址,如: MOV A ,P0 (MOV A ,80H這兩條指令是等價(jià)的) 表示將P0口的內(nèi)容傳送給A。 思考:MOV 50H, 40H 占多少字節(jié)?,例:MOVA,40H 指令代碼 11100101
8、 01000000即為:E5H 40H,寄存器尋址,尋址的對(duì)象為選定寄存器區(qū)的8個(gè)工作寄存器R0--R7,寄存器A、B、DPTR、和Cy位。這種尋址方式中,被尋址的寄存器的內(nèi)容就是操作數(shù),一般和操作碼共占一個(gè)字節(jié).,例:?jiǎn)巫止?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僅用于堆棧操作。 訪問(wèn)內(nèi)部RAM或外部數(shù)據(jù)存儲(chǔ)器的低256個(gè)字節(jié)時(shí),可采用 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的一個(gè)單元(50H)=ACH。 M0VA,@R0該條指令的執(zhí)行過(guò)程,2030H,,,…,…,MOVX A ,@Ri (i=0、1) 例:MOVX A,@R1 , 指令代碼 :1110 0011。 假設(shè)該條指令存放在2030H,工作寄存器為第
11、0組,(R1)=AFH。片外RAM (AFH)=30H。指令執(zhí)行過(guò)程:,最低位是0還是1區(qū)分現(xiàn)用寄存器為R0還是R1。,,,訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器還可用數(shù)據(jù)指針DPTR作為間址寄存器,可對(duì)整個(gè)外部數(shù)據(jù)存儲(chǔ)器空間(64K)尋址。 例: MOV DPTR ,#1234H MOVX A ,@DPTR 執(zhí)行PUSH和POP指令時(shí),使用堆棧指針SP作間址寄存器來(lái)進(jìn)行對(duì)棧區(qū)的間接尋址。,基址寄存器加變址寄存器
12、間址尋址,變址尋址只能對(duì)程序存儲(chǔ)器中數(shù)據(jù)進(jìn)行操作。由于程序存儲(chǔ)器是只讀的,因此變址尋址只有讀操作而無(wú)寫操作,此種尋址方式對(duì)查表訪問(wèn)特別有用。本尋址方式的指令只有三條: MOVC A,@A+DPTR ;A←(A+DPTR) MOVC A,@ A+PC ;A←(A+PC) JMP @A+DPTR 無(wú)條件轉(zhuǎn)移指令 基址寄存器:DPTR或PC變址寄存器:累加器A 有效地址=(PC)+(A)
13、或有效地址=(DPTR)+(A),例:(DPTR)=2000H,(A)=10H, MOVC A,@A+DPTR , JMP @A+DPTR指令操作示意圖如下圖所示。,相對(duì)尋址,為解決程序轉(zhuǎn)移而專門設(shè)置的。它以PC的當(dāng)前值為基準(zhǔn),加上指令中給出的相對(duì)偏移量(rel)形成有效轉(zhuǎn)移地址。偏移量占一個(gè)字節(jié),但這里的PC的當(dāng)前值是指執(zhí)行完該指令后的PC值,即轉(zhuǎn)移指令的PC值加上它的字節(jié)數(shù)。 轉(zhuǎn)移的目的地址用公式表示:,目的地址=轉(zhuǎn)移指令
14、所在地址+轉(zhuǎn)移指令的字節(jié)數(shù)+rel,rel: 1個(gè)有符號(hào)的8位二進(jìn)制補(bǔ)碼.表示的范圍是:-128 至 +127。,例如: SJMP 08H ; PC←PC+2+08 (指令的地址)=2000H指令操作示意圖如下圖所示。,位尋址,MCS-51有位處理的功能,可以對(duì)數(shù)據(jù)位進(jìn)行操作,因此有相應(yīng)的位尋址的方式。除C外,位尋址指令直接使用位地址, 占一個(gè)字節(jié)。 例如: MOV C, 40H ;把位40
15、H的值送到進(jìn)位位C。 位尋址的尋址范圍為整個(gè)位地址211位的空間。,這些尋址位在指令中的表示方法不盡相同,有以下四種(以PSW位5為例): 直接使用位尋址。 0D5H位名稱的表示方法。 F0標(biāo)志位 單元地址加位數(shù)的表示方法。(0D0H).5 特殊功能寄存器符號(hào)加位數(shù)的表示方法。PSW.5,3.3 MCS-51指令系統(tǒng)分類介紹,數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令邏輯運(yùn)算與循環(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ù)傳送類指令不影響標(biāo)志,這里所指的標(biāo)志是指Cy、Ac和OV,但不包括檢驗(yàn)累加器奇偶性的標(biāo)志位P。,目的地址
17、 源地址,,,,數(shù) 據(jù),MOV ,,MOV A,#20H,,,MOV,20H,A,數(shù)據(jù)傳送指令(29條) 使用最頻繁的指令 ——8位數(shù)據(jù)傳送指令(15條),MCS-51單片機(jī)片內(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)容送入當(dāng)前工作寄存器區(qū)的R0--R7中的某一個(gè)寄存器.,以直接地址為目的操作數(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ù)送入直接地址指出的存儲(chǔ)單元。,以寄存器間接地址為目的操作數(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指出的存儲(chǔ)單元。,例如:設(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。這是整個(gè)指令系統(tǒng)唯一的一條16位數(shù)據(jù)傳送指令,用來(lái)設(shè)置地址指針。地址指針DPTR由DPH和DPL組成。這條指令的執(zhí)行結(jié)果把高8位立即數(shù)送入DPH,低8位立即數(shù)送入DPL。,堆棧操作指令,所謂堆棧是在片內(nèi)RAM中按“先進(jìn)后出”原則設(shè)置的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧出棧由指針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,例如:當(dāng)(SP)=60H,(A)=30H,(B)=70H時(shí)執(zhí)行下列指令,P
24、USH B (SP)+1=62H?SP (B)?62H,結(jié)果:(61H)=30H (62H) =70H (SP) =62H,棧底,棧頂,70H,例如:當(dāng)(SP)=62H,(62H)=70H,(61H)=30H時(shí),執(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ù)存儲(chǔ)器傳送指令,指令功能:累加器A與外部RAM存儲(chǔ)器或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作間接尋址,可尋址整個(gè)64K片外數(shù)據(jù)存儲(chǔ)器空間。高8位地址(DPH)由P2口輸出,低8位地址DPL由P0口輸出。,采用Ri作間接尋址,可尋址片外256B的數(shù)據(jù)存儲(chǔ)器。8位地址和數(shù)據(jù)均由P0
28、口輸出,可選用其他任何輸出口線來(lái)輸出高于8位的地址(一般選用P2口輸出高8位的地址)。,查表指令,MOVC A,@A+PC 這條指令以PC作基址寄存器,A的內(nèi)容作為無(wú)符號(hào)整數(shù)和PC的內(nèi)容相加后得到一個(gè)16位的地址,由該地址指出的程序存儲(chǔ)單元的內(nèi)容送達(dá)累加器A。,此指令的優(yōu)點(diǎn)是不改變特殊功能寄存器及PC的狀態(tài),根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。缺點(diǎn)是表格只能存放在該條查表指令后面的256個(gè)單元之內(nèi),表格的大小受到限制,而且表格
29、只能被一段程序所利用。,,例:(A)=30H,執(zhí)行地址1000H處的指令 1000H:MOVC A,@A+PC 本指令占有一個(gè)單元,下一條指令的地址 為1001H,(PC)=1001H再加上A中的30H,得1031H,結(jié)果將程序存儲(chǔ)器中1031H的內(nèi)容送入A。,MOVC A,@A+DPTR 這條指令以DPTR作為基址寄存器,A的內(nèi)容作為無(wú)符號(hào)整數(shù)和DPTR的內(nèi)容相加后得到一個(gè)16位的地址
30、,由該地址指出的程序存儲(chǔ)單元的內(nèi)容送達(dá)累加器A。,例:(DPTR)=8100H (A)=40H 執(zhí)行指令 MOVC A,@A+DPTR結(jié)果將程序存儲(chǔ)器中的8140H單元內(nèi)容送入累加器A。,,這條查表指令的執(zhí)行結(jié)果只和指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址及常數(shù)表格存放的地址無(wú)關(guān),因此表格的大小和位置可以在64K程序存儲(chǔ)器中任意安排,一個(gè)表格可以為各個(gè)程序塊公用。,字節(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ù)運(yùn)算類指令,算術(shù)運(yùn)算類指令主要是對(duì)8位無(wú)符號(hào)數(shù)進(jìn)行算術(shù)操作,包括加、減、加1、減1以及乘法和除法運(yùn)算指令。這類指令會(huì)影響PSW的有關(guān)位,例如:加法、減法運(yùn)算指令執(zhí)行結(jié)果影響PSW的進(jìn)位位CY、溢出位OV、半進(jìn)位位AC和奇偶校驗(yàn)位P。對(duì)這一類指令要特別注意正確地判斷結(jié)果對(duì)標(biāo)志位的影響。,加法指令,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,這組指令的特點(diǎn):一個(gè)加數(shù)總是來(lái)自累加器A,并且運(yùn)算結(jié)果放在累加器A中。,使用加法指令時(shí),對(duì)各個(gè)標(biāo)志位的影響:,位7有進(jìn)位,則置“1”進(jìn)位標(biāo)志Cy,否則清“0”Cy,位3有進(jìn)位,置“1”輔助進(jìn)位標(biāo)志Ac,否則清“0
35、”Ac,如果位6有進(jìn)位,而位7沒(méi)有進(jìn)位,或者位7有進(jìn)位,而位6沒(méi)有,則置“1” OV,否則清“0”O(jiān)V。,注意:溢出標(biāo)志位OV,只有在有符號(hào)數(shù)加法運(yùn)算時(shí)才有意義。當(dāng)2個(gè)有符號(hào)數(shù)相加時(shí),OV=1,表示加法運(yùn)算超出了累加器A所能表示的帶符號(hào)數(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同時(shí)有進(jìn)位),例:(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有進(jìn)位,位6無(wú)),帶進(jìn)位加法指令,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,這組指令的特點(diǎn):進(jìn)位標(biāo)志位Cy參加運(yùn)算。功能是同時(shí)把所指出的字節(jié)變量、進(jìn)位標(biāo)志與累加器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。,指令首先對(duì)低8位指針DPL的內(nèi)容執(zhí)行加1的操作,當(dāng)產(chǎn)生溢出時(shí),就對(duì)DPH的內(nèi)容進(jìn)行加1操作。,,對(duì)于指令I(lǐng)NC direct,若直接地址是I/O端口,則進(jìn)行“讀-修改-寫”操作。指令執(zhí)
40、行過(guò)程中,首先讀入端口的內(nèi)容(來(lái)自端口鎖存器而不是端口引腳),然后在CPU中加1,繼而輸出到端口。,十進(jìn)制調(diào)整指令,DA A 這條指令是對(duì)壓縮BCD碼加法運(yùn)算時(shí),跟在ADD和ADDC指令之后,用于對(duì)BCD碼的加法運(yùn)算結(jié)果自動(dòng)進(jìn)行修正,使其結(jié)果仍為BCD表達(dá)形式。,,調(diào)整方法:若(A0-3)>9或(AC)=1則(A0-3)+06H→(A0-3)若(A4-7)>9或(Cy)=1則(A4-7)+06H →(A4-7
41、),,在計(jì)算機(jī)中,遇到十進(jìn)制調(diào)整指令時(shí),中間結(jié)果的修正是由ALU硬件中的十進(jìn)制修正電路自動(dòng)進(jìn)行時(shí),用戶不必考慮何時(shí)該加“6”,使用時(shí)只需在上述加法指令后面緊跟一條“DA A”指令即可。 注意:在MCS-51中,“DA A” 指令不適用于減法指令。,5. 帶進(jìn)位減法指令,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,這組帶進(jìn)位減法指令是從累加器A中減去指定的變量和進(jìn)位標(biāo)志,結(jié)果存在累加器中。,如果位7需借位則置位Cy,否則清“0”Cy; 如果位3需借位則置位Ac,否則清“0”Ac; 如果位6需借位而位7不需要借位,或位7需借位而位6不需要借位,則置位溢出標(biāo)志位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。若原來(lái)為00H,減1后下溢為FFH,不影響標(biāo)志。,例:(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標(biāo)志外),乘法指令,MUL AB ;A*B ?BA 這
46、條指令的功能是把累加器A和寄存器B中的無(wú)符號(hào)8位整數(shù)相乘。其16位積的低位字節(jié)在累加器A中,高位字節(jié)在B中。如果積大于255,則置位溢出標(biāo)志OV,否則清“0”O(jiān)V。 注意:進(jìn)位標(biāo)志總是清“0”。,除法指令,DIV AB ;A/B ? A(商),余數(shù)? B 指令的功能:把累加器A中8位無(wú)符號(hào)整數(shù)除以B中的8位無(wú)符號(hào)整數(shù)。商存放在累加器A中,余數(shù)在寄存器B中,清“0”Cy和溢出標(biāo)志位OV。 注意:如果B的內(nèi)容為0
47、,則結(jié)果A,B中的內(nèi)容不定,并置溢出標(biāo)志位OV位1。,,例:(A)=FBH=251,(B)=12H=18執(zhí)行指令 DIV AB結(jié)果為:(A)=0DH=13,(B)=11H=17, Cy=0,OV=0,邏輯運(yùn)算類指令,簡(jiǎn)單邏輯操作指令 左環(huán)移指令 右環(huán)移指令 帶進(jìn)位左環(huán)移指令帶進(jìn)位右環(huán)移指令累加器半字節(jié)交換指令邏輯與指令邏輯或指令邏輯異或指令,簡(jiǎn)單邏輯操作指令,1)
48、160; CLR A 指令功能:累加器A清“0”。不影響 Cy,Ac,OV等標(biāo)志。2) CPL A 指令功能:累加器A按位取反,不影響標(biāo)志。,,,,,,,,,,,,,,,,,,,,,,,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í)行帶進(jìn)位的循環(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ǔ)進(jìn)行邏輯與操作,結(jié)果存放到目的變量所在的寄存器或存儲(chǔ)器中去。,,例:(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é)果存放到目的變量所在的寄存器或存儲(chǔ)器中去。,,例:(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é)果存放到目的變量所在的寄存器或存儲(chǔ)器中去。,,例:(A)=90H,(R3)=73H 執(zhí)行指令 XRL A,R3 1001 0000 + 0111 0011
56、 1110 0011結(jié)果:(A)=E3H,控制轉(zhuǎn)移類指令,無(wú)條件轉(zhuǎn)移指令(4條) 相對(duì)轉(zhuǎn)移指令 長(zhǎng)跳轉(zhuǎn)指令 間接跳轉(zhuǎn)指令(散轉(zhuǎn)指令) 條件轉(zhuǎn)移指令 比較轉(zhuǎn)移指令 減1不為0轉(zhuǎn)移指令 (循環(huán)指令)調(diào)用子程序指令 子程序返回指令 中斷返回指令 空操作指令,長(zhǎng)跳轉(zhuǎn)指令,LJMP addr16 指令中包含16位地址,所以轉(zhuǎn)移的目標(biāo)地址范圍是程序存儲(chǔ)器的0000H--FFFFH。指令執(zhí)行時(shí)把
57、指令的第二和第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無(wú)條件地轉(zhuǎn)向指定地址。,,LJMP AAAAH ; AAAAH?PC,PC=0000H,PC=AAAAH,假設(shè)執(zhí)行該指令前,PC的值為0000H。,注意:該指令可以轉(zhuǎn)移到64 KB程序存儲(chǔ)器中的任意位置。,絕對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)指令,AJMP addrll 指令中包含11位地址,因此這是2K字節(jié)范圍內(nèi)的跳轉(zhuǎn)指令。執(zhí)行該指令時(shí),先將PC加2,然后把a(bǔ)ddrll送入PC.1
58、0~PC.0,PC.15~PC.11不變,程序轉(zhuǎn)移到指定的地方。,,PC高5位(保持不變),PC低11位,,,,,,,,,,,,,,,,,,,,,,,,,,,,,操作碼(第一字節(jié)),操作數(shù)(第二字節(jié)),,11位轉(zhuǎn)移地址的形成示意圖,程序計(jì)數(shù)器PC,,AJMP addr11 ; PC+2?PC, addr11 ?PC.10~PC.0,例:執(zhí)行指令 2000H: AJMP 2600H執(zhí)行后PC值的變化?,相對(duì)轉(zhuǎn)移指令,
59、SJMP rel 這是無(wú)條件跳轉(zhuǎn)指令,執(zhí)行時(shí)在PC加2之后,把指令的有符號(hào)的偏移量rel(-128~+127,負(fù)數(shù)表示向后轉(zhuǎn)移,正數(shù)向前轉(zhuǎn)移)加到PC上,并計(jì)算出轉(zhuǎn)向地址。 程序匯編時(shí),直接寫上要轉(zhuǎn)向的目標(biāo)地址標(biāo)號(hào)就可以了。例如: LOOP: MOV A,R6 … SJMP LOOP
60、 …,手工匯編時(shí),計(jì)算目的地址值 目的地址值 = 本指令地址值+2+rel計(jì)算偏移量 rel=目標(biāo)地址-本指令地址值-2,例: LOOP : SJMP LOOP 偏移量REL為多少(補(bǔ)碼)?例: 執(zhí)行指令 2000H : SJMP 07H問(wèn)執(zhí)行后PC值的變化?,PC,2002H,2003H,0000H,0001H,20
61、04H,2005H,2006H,,PC,,PC,,,PC,2006H,2003H,PC,,0002H,PC,相對(duì)轉(zhuǎn)移指令,例: SJMP 03H,,03H就是當(dāng)前PC值與目的PC值相對(duì)差,PC,,間接跳轉(zhuǎn)指令(散轉(zhuǎn)指令),JMP @A+DPTR指令功能:累加器中的8位無(wú)符號(hào)數(shù)與數(shù)據(jù)指針DPTR的16位數(shù)相加,結(jié)果作為下條指令的地址送入PC,不改變累加器和數(shù)據(jù)指針DPTR的內(nèi)容,也不影響標(biāo)志。,條件轉(zhuǎn)移指令,條件轉(zhuǎn)移指令是依
62、某種特定條件轉(zhuǎn)移的指令。條件滿足時(shí)轉(zhuǎn)移,不滿足時(shí)順序執(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í)行,這組指令的功能是比較前面兩個(gè)操作數(shù)的大小,如果它們的值不相等則轉(zhuǎn)移,在PC加到下一條指令的起始地址后,通過(guò)把指令的最后一個(gè)字節(jié)的有符號(hào)的相對(duì)偏移量加到PC上,計(jì)算出轉(zhuǎn)向地址。,減1不為0轉(zhuǎn)移指令(循環(huán)指令),這組指令把減1與條件轉(zhuǎn)移兩種功能結(jié)合在一起。執(zhí)行時(shí),將源操作數(shù)減1,結(jié)果回送到源操作數(shù)寄存器或存儲(chǔ)器中去。 DJNZ Rn, rel ;n=0~7 DJN
64、Z direct,rel,在實(shí)際問(wèn)題中,經(jīng)常需要多次重復(fù)執(zhí)行某段程序。在編程時(shí),可以設(shè)置一個(gè)計(jì)數(shù)值,每執(zhí)行一次這段程序,計(jì)算值減1,直至計(jì)數(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)長(zhǎng)調(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這條指令無(wú)條件的調(diào)用位于指定地址的子程序。,子程序返回指令,RET ; (SP) ?PC.15~PC.8,SP-1?SP (SP) ?PC.7~PC.0,SP-1?SP 指令功能:從堆棧中退出PC的高位和低位字節(jié),把
66、棧指針減2,從PC值開(kāi)始繼續(xù)執(zhí)行程序。不影響任何標(biāo)志。,例:(SP)=62H, ,(62H)=20H,(61H)=08H(PC)=1 000H,指令地址 指令 1000H RET執(zhí)行過(guò)程:,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í)行過(guò)程:,57H,60H,棧底,20H,08H,執(zhí)行結(jié)果:(PC)=2008H(SP)=60H,中斷返回指令,RETI 指令功能:和RET指令相似,不同的是清除MCS-51內(nèi)部的中斷狀態(tài)標(biāo)志。,位操作指令,由于MCS-51 單片機(jī)內(nèi)部有一個(gè)位處理機(jī),所以對(duì)位地址空間具有比
68、較豐富的位操作指令。數(shù)據(jù)位傳送指令 位變量修改指令 位變量邏輯與指令 位變量邏輯或指令 條件轉(zhuǎn)移類指令,數(shù)據(jù)位傳送指令,MOV C , bit MOV bit , C 指令功能:把由源操作數(shù)指出的位變量送到目的操作數(shù)指定的單元中去。注意:一個(gè)操作數(shù)必須為進(jìn)位標(biāo)志(位累加器)。,例: 指令 MOV C , 06H必須要注意,這里的06H是內(nèi)部RAM20H字節(jié)位6的位地址。,位變量修改指令,CLR
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- mcs-51指令系統(tǒng)
- 第三章mcs-51指令系統(tǒng)
- 第三章mcs-51單片機(jī)的指令系統(tǒng)
- mcs-51指令
- 第3章指令系統(tǒng)
- 第3章 指令系統(tǒng)
- 第3章 指令系統(tǒng)
- mcs-51 匯編指令集
- 第3章-指令系統(tǒng)
- 第3章 指令系統(tǒng).PDF
- 第3章 指令系統(tǒng).PDF
- mcs-51指令集
- 第2章_mcs-51的內(nèi)部結(jié)構(gòu)
- 第3章-尋址方式指令系統(tǒng)
- 第5章 指令系統(tǒng)
- 第5章 指令系統(tǒng)
- mcs-51單片機(jī)匯編指令集
- 第3章 指令系統(tǒng).ppt.convertor
- 第3章單片機(jī)指令系統(tǒng)
- c51的指令系統(tǒng)
評(píng)論
0/150
提交評(píng)論