單片機(jī)-教案-課件-80C51的指令系統(tǒng)_第1頁(yè)
單片機(jī)-教案-課件-80C51的指令系統(tǒng)_第2頁(yè)
單片機(jī)-教案-課件-80C51的指令系統(tǒng)_第3頁(yè)
單片機(jī)-教案-課件-80C51的指令系統(tǒng)_第4頁(yè)
單片機(jī)-教案-課件-80C51的指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩75頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 80C51的指令系統(tǒng)指令格式及3.180C51的尋址方式3.2數(shù)據(jù)傳送指令 (29條)3.3算數(shù)運(yùn)算指令 (24條)3.4邏輯運(yùn)算與循環(huán)類指令(24條)3.5控制轉(zhuǎn)移類指令 (17條)3.6位操作類指令 (17條)3.72022/10/1613.1 指令格式及常用符號(hào)3.1.1 指令系統(tǒng)的概述 指令是計(jì)算機(jī)根據(jù)人的意圖所執(zhí)行的操作命令,是與計(jì)算機(jī)內(nèi)部結(jié)構(gòu)、硬件資源密切聯(lián)系的。某種計(jì)算機(jī)所有指令的集合稱為指令系統(tǒng)。 MCS-51/52系列單片機(jī)的指令系統(tǒng)共有111條指令編碼少:其中49條是單字節(jié)指令,45條是雙字節(jié)指令,17條是三字節(jié)指令。執(zhí)行周期短:其中有64條指令的執(zhí)行時(shí)間為單機(jī)器周

2、期,45條指令的執(zhí)行時(shí)間為雙機(jī)器周期,乘法和除法指令只需4個(gè)機(jī)器周期。位操作指令豐富:2022/10/162機(jī)器語(yǔ)言:計(jì)算機(jī)唯一能夠識(shí)別的指令,由二進(jìn)制數(shù)“0”和“1”編碼構(gòu)成,也成為目標(biāo)代碼,執(zhí)行速度最快。匯編語(yǔ)言指令是在機(jī)器語(yǔ)言基礎(chǔ)上,用英文單詞或英文單詞縮寫表示機(jī)器語(yǔ)言指令的操作碼(助記符)用符號(hào)表示操作數(shù)或者操作數(shù)的地址。將匯編語(yǔ)言翻譯為機(jī)器語(yǔ)言的目標(biāo)代碼稱為匯編。2022/10/163 書(shū)寫格式注意:操作碼不能缺少操作數(shù)個(gè)數(shù)可為:1、2、3個(gè)2個(gè)操作數(shù)的指令,目的操作數(shù)在左邊一般格式標(biāo)號(hào):操作碼 目的操作數(shù),源操作數(shù);注釋3.1.2 符號(hào)指令的書(shū)寫格式2022/10/164 描述符號(hào)

3、Rn(n=07)-當(dāng)前工作寄存器組中的寄存器R0R7之一Ri(i=0,1)-當(dāng)前工作寄存器組中的寄存器R0或R1 -間址寄存器前綴#data -8位立即數(shù)#data16-16位立即數(shù)direct-片內(nèi)低128個(gè)RAM單元地址及SFR地址addr11-11位目的地址addr16-16位目的地址rel-8位地址偏移量,范圍:128127bit-片內(nèi)RAM位地址、SFR的位地址()-表示 地址單元或寄存器中的內(nèi)容/ -位操作數(shù)的取反操作前綴()-表示 所指地址單元的內(nèi)容 -表示數(shù)據(jù)傳輸?shù)姆较?022/10/1653.2.1 寄存器尋址尋址方式:尋找(源)操作數(shù)或指令轉(zhuǎn)移地址的方式80C51單片機(jī)有7

4、種尋址方式3.2 80C51的尋址方式操作數(shù)在寄存器中尋址空間:R0R7、A、B(AB形式)和DPTR特點(diǎn):傳送和執(zhí)行速度快【例】若(R0)=30H, 執(zhí)行MOV A,R0后,(A)=30H 2022/10/1663.2.2 直接尋址操作碼后字節(jié)存放的是操作數(shù)的地址尋址空間:片內(nèi)RAM低128字節(jié)SFR(符號(hào)形式)另一類直接尋址是轉(zhuǎn)移目標(biāo)地址的尋址。如:LJMP ADDR16【例】若(50H)=3AH , 執(zhí)行MOV A,50H后,(A)=3AH 2022/10/1673.2.3 寄存器間接尋址寄存器中的內(nèi)容是操作數(shù)的地址尋址空間:片內(nèi)RAM(Ri、SP)片外RAM(Ri、DPTR)【例】若(

5、R0)=30H,(30H)=5AH 執(zhí)行MOV A,R0后,(A)=5AH 片內(nèi):MOV片外:MOVX2022/10/1683.2.4 立即尋址操作數(shù)在指令編碼中尋址空間:ROM對(duì)于MOV DPTR,#2100H指令,立即數(shù)高8位“21H”裝入DPH 【例】執(zhí)行MOV A,#50H 結(jié)果:(A)=50H 2022/10/1693.2.5 變址尋址操作數(shù)地址:基地址+偏移量尋址空間:ROM變址尋址還用于跳轉(zhuǎn)指令,如JMP A+DPTR 【例】(A)0FH (DPTR)=2400H 執(zhí)行MOVC A,A+DPTR”后結(jié)果:(A)=88H 2022/10/16103.2.6 相對(duì)尋址用于跳轉(zhuǎn)指令,實(shí)

6、現(xiàn)程序分支Rel常用符號(hào)地址表示,離源地址不要超過(guò)(128127 ) 【例】若rel為75H,PSW.7為1,JC rel存于1000H開(kāi)始的單元。 執(zhí)行JC rel指令后,程序?qū)⑻D(zhuǎn)到1077H單元取指令并執(zhí)行。 2022/10/16113.2.7 位尋址尋址位數(shù)據(jù)尋址空間片內(nèi)RAM位空間SFR位空間【例】位地址00H內(nèi)容為1,MOV C,00H執(zhí)行后,位地址PSW.7的內(nèi)容為1。位尋址方式實(shí)質(zhì)屬于位的直接尋址。 2022/10/16123.3 數(shù)據(jù)傳送類指令(29條)一般不影響標(biāo)志寄存器PSW的狀態(tài)。 傳送類指令有兩大類 一般傳送( MOV ) 特殊傳送,如: MOVC MOVX PUSH

7、、POP XCH、XCHD SWAP 2022/10/16133.3.1 一般傳送指令16位傳送(僅1條)MOV DPTR,#data16; DPTR data16例:執(zhí)行指令 MOV DPTR,#1234H 后 (DPH)=12H,(DPL)=34H。8位傳送通用格式: MOV , ; 2022/10/1614 以A為目的【例3-9】若(R1)= 20H,(20H)= 55H。執(zhí)行指令 MOV A,R1 后,(A)= 55H。2022/10/16151、將R1內(nèi)容傳送至AMOV A,R12、將立即數(shù)16H傳送至AMOV A,#16H3、將R0指示的內(nèi)存單元20H單元傳送至AMOV R0,#2

8、0HMOV A,R04、將30H的內(nèi)容傳送至AMOV A,30H2022/10/1616 以Rn為目的【例3-10】執(zhí)行指令 MOV R6,#50H 后,(R6)= 50H例:如何將R1的內(nèi)容傳送給R2? MOV A,R1MOV R2,A2022/10/1617 以direct為目的【例3-11】若(R1)=50H,(50H)=18H,執(zhí)行指令 MOV 40H,R1 后,(40H)=18H 2022/10/1618 以Ri為目的【例3-12】若(R1)=30H,(A)=20H,執(zhí)行指令 MOV R1,A 后,(30H)=20H。 2022/10/16191、將20H開(kāi)始的32個(gè)單元全部清0 M

9、OV A , #00H ;A000H MOV R0,#20H ;R020H MOV R7,#20H ;R7計(jì)數(shù),R732 LP1:MOV R0,A ;R0指示單元清0 INC R0 ;R0R0+1 DJNZ R7,LP1 ;R7 R7-12022/10/16203.3.2 特殊傳送指令 以DPTR內(nèi)容為基址讀ROM中常數(shù)表項(xiàng)指令MOVCROM中可以存放程序代碼,還經(jīng)常存放常數(shù)表 MOVC A,A+DPTR;A (A)+(DPTR) 以PC內(nèi)容為基址MOVC A,A+PC ;A (A)+(PC)常數(shù)表存放約束小,稱為遠(yuǎn)程查表指令。占用DPTR 常數(shù)表存放約束大,稱為近程查表指令。不占用DPTR

10、2022/10/16211、LED顯示器09的字形顯示碼存放在程序存儲(chǔ)器中的情況如下:210AH:0C0H 字符“0”210BH:0F9H 字符“1”210CH:0A4H 字符“2”210DH:0B0H 字符“3”從段碼表中取出“3”并送LED端口為1200H顯示,可用如下指令完成:2100H:MOV A,#0AH2102H:MOVC A,A+PC2103H:MOV DPTR,#1200H2106H:MOVX DPTR,A2022/10/1622 讀片外RAM讀片外RAM及接口單元數(shù)據(jù)的指令MOVX片外RAM中經(jīng)常存放數(shù)據(jù)采集與處理的中間數(shù)據(jù) MOVX A,DPTR ;A (DPTR)MOVX

11、 A,Ri ;A (Ri) 寫片外RAMMOVX DPTR,A ;(DPTR)AMOVX Ri,A ;(Ri)A注意:用Ri尋址時(shí),高8位地址由P2口提供 2022/10/16231、將74H的內(nèi)容送到片外RAM3000H單元 MOV A,74H MOV DPTR,#3000H MOVX DPTR,A2、將片外RAM2040H的內(nèi)容送到片內(nèi) RAM20H單元。 MOV DPTR #2040H MOVX A,DPTR MOV 20H,A2022/10/1624 入棧指令PUSH堆棧操作指令PUSH和POP堆棧是一片存儲(chǔ)區(qū),遵循“后進(jìn)先出”原則,棧頂由SP指示。80C51的堆棧設(shè)在片內(nèi)RAM低端的

12、128個(gè)單元,向上生長(zhǎng)。 PUSH direct ;SP(SP)1,(SP)(direct) 出棧指令POPPOP direct ;(direct)(SP),SP (SP)1 注:堆棧用于子程序調(diào)用時(shí)保護(hù)返回地址,或者用于保護(hù)子程序調(diào)用之前的某些重要數(shù)據(jù)(即保護(hù)現(xiàn)場(chǎng)),還可以用于數(shù)據(jù)交換。 2022/10/1625利用堆棧完成40H與50H單元內(nèi)容的交換的示例 MOV SP,#6FH;將堆棧設(shè)在70H以上RAM空間PUSH 40H ;將40H單元的“23H”入棧,之后(SP)=70H PUSH 50H ;將50H單元的“45H”入棧,之后(SP)=71HPOP 40H ;將SP指向的71H單元

13、的內(nèi)容彈到40H單元,之后(SP)=70HPOP 50H ;將SP指向的70H單元的內(nèi)容彈到50H單元,之后(SP)=6FH(a)初始狀態(tài) (b)2條PUSH指令執(zhí)行后 (c)2條POP指令執(zhí)行后2022/10/1626 字節(jié)交換指令XCH數(shù)據(jù)交換指令XCH、XCHD和SWAP數(shù)據(jù)交換屬于同時(shí)進(jìn)行的雙向傳送 【例3-20】若(R0)=80H,(A)=20H。 執(zhí)行指令 XCH A,R0 后,(A)=80H,(R0)=20H。 2022/10/1627 半字節(jié)交換指令XCHD【例3-21】若(R0)30H,(30H)67H, (A)20H。執(zhí)行指令 XCHD A,R0 指令后,(A)27H,(3

14、0H)60H。 XCHD是間址操作數(shù)的低半字節(jié)與A的低半字節(jié)互換。SWAP是累加器的高低4位互換【例3-22】若(A)30H,執(zhí)行指令SWAP A后,(A)03H 。 2022/10/16281、編程將內(nèi)部數(shù)據(jù)存儲(chǔ)器20H30H內(nèi)容置1.2、試編寫8字節(jié)外部數(shù)據(jù)存儲(chǔ)器到內(nèi)部數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)傳送程序,外部數(shù)據(jù)存儲(chǔ)器地址為40H47H,內(nèi)部數(shù)據(jù)存儲(chǔ)器的范圍為30H37H。2022/10/16293.4 算數(shù)運(yùn)算類指令(24條)算數(shù)運(yùn)算結(jié)果要影響PSW中標(biāo)志位 CY為1,無(wú)符號(hào)數(shù)(字節(jié))加減發(fā)生進(jìn)位或借位 OV為1,有符號(hào)數(shù)(字節(jié))加減發(fā)生溢出錯(cuò)誤 溢出標(biāo)志位OV = D7C D67 = 1 0 =

15、 1 AC為1,十進(jìn)制數(shù)(BCD碼)加法的結(jié)果應(yīng)調(diào)整 P為1,存于累加器A中操作結(jié)果的“1”的個(gè)數(shù)為奇數(shù) 標(biāo)志位意義標(biāo)志位與相關(guān)指令影響 指令標(biāo)志ADD、ADDC、SUBBDAMULDIV CY00ACOVP2022/10/1630算數(shù)運(yùn)算影響標(biāo)志位示例【例3-23】有2個(gè)參與相加的機(jī)器數(shù),一個(gè)是84H,另一個(gè)是8DH。試分析運(yùn)算過(guò)程及其對(duì)狀態(tài)標(biāo)志的影響。結(jié)果:CY為1;AC為1 ;OV為1 ;P為0 2022/10/16313.4.1 加法不帶進(jìn)位加法【例3-24】若有2個(gè)無(wú)符號(hào)數(shù)存于累加器A和RAM的30H單元,即(A)=84H,(30H)=8DH,試分析執(zhí)行指令 ADD A,30H 后的

16、結(jié)果。由于對(duì)無(wú)符號(hào)數(shù)相加,要考察CY。由上頁(yè)圖可知,CY=1,因此知道運(yùn)算的結(jié)果發(fā)生了進(jìn)位,即實(shí)際值應(yīng)該是100H+11H。所以,編程者應(yīng)確保單字節(jié)無(wú)符號(hào)數(shù)運(yùn)算結(jié)果不要超過(guò)255 2022/10/1632【例3-25】若有2個(gè)有符號(hào)數(shù)存于累加器A和RAM的30H單元,即(A)=84H,(30H)=8DH,試分析執(zhí)行指令 ADD A,30H 后的結(jié)果。 有符號(hào)數(shù)相加,只需考察溢出標(biāo)志OV即可。由上圖可見(jiàn)OV=1,因此可知運(yùn)算的結(jié)果發(fā)生了溢出,這說(shuō)明累加器A中的結(jié)果已經(jīng)不是正確的值了。 溢出標(biāo)志位OV = D7C D6C = 1 0 = 1 編程者應(yīng)確保單字節(jié)有符號(hào)數(shù)運(yùn)算結(jié)果不超過(guò)-128127。

17、否則,就要將數(shù)據(jù)用多字節(jié)表示或在程序運(yùn)行中對(duì)狀態(tài)標(biāo)志進(jìn)行判斷: 無(wú)符號(hào)數(shù)用JNC或JC,有符號(hào)數(shù)要用JNB或JB。 2022/10/1633帶進(jìn)位加法(這組指令方便了多字節(jié)加法的實(shí)現(xiàn)) 這4條指令的功能是把源操作數(shù)所指示的內(nèi)容和A中的內(nèi)容及進(jìn)位標(biāo)志Cy相加,結(jié)果存入A中。運(yùn)算結(jié)果對(duì)PSW中相關(guān)位的影響同上述的4條加法指令。 帶進(jìn)位加法指令一般用于多字節(jié)數(shù)的加法運(yùn)算,低位字節(jié)相加時(shí)和可能產(chǎn)生進(jìn)位,可以通過(guò)帶進(jìn)位加法指令將低位字節(jié)的進(jìn)位加到高字節(jié)上去。高位字節(jié)求和時(shí)必須使用帶進(jìn)位的加法指令。 2022/10/1634多了加進(jìn)位標(biāo)志位CY,主要用于多字節(jié)的加運(yùn)算兩個(gè)雙字節(jié)數(shù)存放在內(nèi)部RAM 30H、

18、31H單元及40H、41H單元,設(shè)低位在前,高位在后,求和結(jié)果存放在30H、31H。 MOV A,30H ;取低8位ADD A,40H ;低8位相加MOV 30H,A ;存結(jié)果MOV A,31H ;取高8位ADDC A,41H ;高8位帶進(jìn)位加MOV 31H,A ;存結(jié)果例:35加1 這一組指令的功能是將操作數(shù)所指定的單元或寄存器中的內(nèi)容加1。其結(jié)果送回原操作數(shù)單元中。 2022/10/1636設(shè)R0=7EH,DPTR=10FEH,(7EH)=0FFH,(7FH)=38H,執(zhí)行下列指令I(lǐng)NC R0;(7EH)=00HINC R0 ;R0=7FHINCR0 ;(7FH)=39HINC DPTR

19、;DPTR=10FFHINC DPTR ;DPTR=1100HINC DPTR ;DPTR=1101H2022/10/1637十進(jìn)制調(diào)整DA A ;調(diào)整A的內(nèi)容為正確的BCD碼 兩個(gè)壓縮的BCD碼按二進(jìn)制相加后,必須經(jīng)過(guò)調(diào)整方能得到正確的和。注意:該指令必須用在加法指令后邊否則出錯(cuò)。 這條指令是在進(jìn)行BCD碼加法運(yùn)算時(shí),用來(lái)對(duì)BCD碼的加法運(yùn)算結(jié)果自動(dòng)進(jìn)行修正(主要是高、低4位是否+6)。另外,對(duì)BCD碼的減法運(yùn)算不能用此指令來(lái)進(jìn)行修正。執(zhí)行十進(jìn)制調(diào)整指令后,PSW中的CY表示結(jié)果的百位值 2022/10/1638 計(jì)算機(jī)中只能使用二進(jìn)制數(shù),所有在計(jì)算機(jī)中使用的字符和數(shù)字都要用特定的二進(jìn)制編碼

20、表示,編碼方法很多,常用的有ASCII碼(American Standard Code for Information Interchange)和BCD碼。BCD 碼 (Binary Coded Decimal)BCD碼的概念 用四位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)碼的編碼方法,稱為二-十進(jìn)制碼,即BCD碼。BCD碼表示的數(shù)叫BCD數(shù),即二進(jìn)制編碼的十進(jìn)制數(shù)。常用8421BCD碼:十進(jìn)制數(shù) 0 1 2 3 4 5 6 7 8 9BCD碼 0000 0001 0010 0011 0100 0101 0110 0111 1000 100139【例3-24】若(A)0110 1001B,表示的BCD碼為 (

21、R2)0101 1000B,表示的BCD碼為 ,執(zhí)行指令: ADD A,R2DA A(A)0010 0111B,即 且(CY)1,即正確的結(jié)果為:127 2022/10/16403.4.2 減法帶借位減法用此組指令完成不帶借位的減法,只需先清CY為0即可 CY為1,表示D7位需借位 AC為1,表示D3位需借位 OV為1,表示“D6有借位D7無(wú)借位”或“D7有借位D6無(wú)借位”2022/10/1641【例3-25】若(A)=C9H,(R2)=54H,(CY)=1,試分析指令SUBB A,R2執(zhí)行后,累加器的內(nèi)容及狀態(tài)標(biāo)志。 (A):1 1 0 0 1 0 0 1(201) (CY): 1(1)1

22、1 0 0 1 0 0 0(R2): 0 1 0 1 0 1 0 0(84)結(jié)果:0 1 1 1 0 1 0 0(116)即:(A)=74H,(CY)=0,(AC)=0,(OV)=1,(P)=0。分析:數(shù)據(jù)為無(wú)符號(hào)類型。該指令執(zhí)行前CY=1,說(shuō)明此指令不是運(yùn)算的最低字節(jié),即在此指令執(zhí)行之前,一定執(zhí)行過(guò)低字節(jié)的減法并產(chǎn)生了借位。因此,本次相減(201-1-84=116=74H)結(jié)果為74H。2022/10/1642減1這組指令僅 DEC A 影響P標(biāo)志。其余指令都不影響標(biāo)志位的狀態(tài)。無(wú)DPTR減1指令。2022/10/16433.4.3 乘法僅有一條乘法指令 MUL AB ;A與B相乘 ;BA

23、(A)(B) 無(wú)符號(hào) 結(jié)果:B中為積的高8位,A中為積的低8位。 CY總是被清0;OV=1表示積大于FFH 此條指令的功能是實(shí)現(xiàn)兩個(gè)8位無(wú)符號(hào)數(shù)的乘法操作,2個(gè)數(shù)分別存在累加器A和寄存器B中。乘積為16位,積的低8位在A中,積的高8位在B中。若積大于255,溢出標(biāo)志位OV置位,否則復(fù)位,而Cy位總是為0。乘法指令是整個(gè)指令系統(tǒng)中執(zhí)行時(shí)間最長(zhǎng)的2條指令之一,它需4個(gè)機(jī)器周期(48個(gè)振蕩周期)才能完成一次乘法操作。2022/10/16443.4.4 除法僅有一條除法指令DIV AB ;A (A)(B) (商),B AB(余) 無(wú)符號(hào) 結(jié)果:A中為商的整數(shù)部分,B中為余數(shù) CY總是被清0;OV=1表

24、示除數(shù)為0 除法指令可以實(shí)現(xiàn)兩個(gè)8位無(wú)符號(hào)數(shù)的除法。被除數(shù)放在A中,除數(shù)放在B中。指令執(zhí)行后,商放在A中而余數(shù)在B中。進(jìn)位標(biāo)志Cy和溢出標(biāo)志OV均清0,只有當(dāng)除數(shù)為0時(shí),A和B中的內(nèi)容為不確定值,此時(shí)OV位置位,說(shuō)明除法溢出。指令的執(zhí)行時(shí)間也是4個(gè)機(jī)器周期,和乘法指令相同是執(zhí)行時(shí)間最長(zhǎng)的2條指令之一。 2022/10/16453.5 邏輯運(yùn)算與循環(huán)類指令(24條)3.5.1 邏輯與 邏輯:與、或、異或、清0和取反 循環(huán):左、右移,帶進(jìn)位位左、右移【例】(A)=C3H,(R0)=AAH,執(zhí)行指令 ANL A,R0 后,(A)=82H【例】檢測(cè)P1口低四位高四位不關(guān)心采用指令 MOV A,P1 A

25、NL A,#0FH 與操作常用于對(duì)某些不關(guān)心位進(jìn)行“清0”,同時(shí)“保留”另一些關(guān)心位 2022/10/1646例:MOV A,30 ;取數(shù)ANL A,#0FH ;屏蔽高4位MOV 40H,A ;存低4位MOV A,30H ;再取ANL A,#0F0H ;屏蔽低4位SWAP A ;高低4位交換MOV 41H,A ;存高4位壓縮BCD碼拆成單字節(jié)BCD碼設(shè)30H單元內(nèi)容為56H,將高低四位拆開(kāi)存放在40H,和41H 拆字程序 06H 05H40H41H42H 00000110B 06H 01010110B 56H 00001111B 0FH 01010000B 50H 01010110B 56H

26、11110000B F0H 與操作:4710(1)將R0的內(nèi)容傳送到R1; MOV A,R0 MOV R1,A(2)內(nèi)部RAM單元60H的內(nèi)容傳送到寄存器R2 MOV R2,60H(3)外部RAM單元1000H的內(nèi)容傳送到內(nèi)部RAM單元60H; MOV DPTR,#1000H MOVX A,DPTR MOV 60H,A2022/10/1648 (4)外部RAM單元1000H的內(nèi)容傳送到寄存器R2; MOV DPTR,#1000H MOVX A,DPTR MOV R2,A (5)外部RAM單元1000H的內(nèi)容傳送到外部RAM單元2000H。 MOV DPTR,#1000H MOVX A,DPTR

27、 MOV DPTR,#2000H MOVX DPTR, A2022/10/164913若(50H)=40H,試寫出執(zhí)行以下程序段后累加器A、寄存器R0及內(nèi)部RAM的40H、41H、42H單元中的內(nèi)容各為多少? MOV A,50H MOV R0,A MOV A,#00H MOV R0,A MOV A,#3BH MOV 41H,A MOV 42H,41H(A)=3BH,(R0)=40H,(40H)=00H,(41H)=3BH,(42H)=3BH。2022/10/165016試編寫程序,完成兩個(gè)16位數(shù)的減法:7F4DH2B4EH,結(jié)果存入內(nèi)部RAM的30H和31H單元,30H單元存差的高8位,31

28、H單元存差的低8位。CLR CYMOV A,#4DHSUBB A ,#4EHMOV 31H,A ;保存低字節(jié)相減結(jié)果MOV A,#7FHSUBB A,#2BHMOV 30H,A ;保存高字節(jié)相減結(jié)果2022/10/165117試編寫程序,將R1中的低4位數(shù)與R2中的高4位數(shù)合并成一個(gè)8位數(shù),并將其存放在R1中MOV A, R1ANL A,#0FHMOV R1,AMOV A,R2ANL A,#0F0HORL A,R12022/10/16523.5.2 邏輯或【例】(A)=C3H,(R0)=55H,執(zhí)行指令 ORL A,R0 后,(A)=D7H【例】 將P1口的高4位設(shè)置為高電平,其他位不變。 O

29、RL P1,#0F0H 或操作常用于對(duì)某些關(guān)心位進(jìn)行“置1”,不關(guān)心位保持不變 2022/10/1653將累加器的A低四位數(shù)據(jù)送P1口的高四位,P1口的低四位不變。 ANL A,#0FH SWAP A ANL P1,#0FH ORL P1,A2022/10/16543.5.3 邏輯異或【例】(P1)=59H,高四位取反,其他位不變,執(zhí)行指令 XRL P1,#0F0H ;結(jié)果(A)=A9H 異或操作常用于對(duì)某些關(guān)心位進(jìn)行“取反”,不關(guān)心位保持不變 2022/10/16553.5.4 累加器清0和取反 把A的內(nèi)容取反,結(jié)果仍在A中。CPL ACLR A例 若(A)=A5H,執(zhí)行指令 CLR A 之

30、后,(A)=00H。 把A的內(nèi)容清 0 ,結(jié)果仍在A中。利用取反指令,對(duì)40H單元內(nèi)容求補(bǔ)。 MOV A,40H CPL A INC A MOV 40H,A573.5.4 邏輯清0和取反3.5.5 累加器循環(huán)移位2022/10/16583.6 控制轉(zhuǎn)移類指令(17條)3.6.1 無(wú)條件轉(zhuǎn)移短跳轉(zhuǎn)AJMP addr11 ;PC (PC)+ 2,PC100 addr11 指令A(yù)JMP addr11稱絕對(duì)轉(zhuǎn)移指令,指令中包含有11位的轉(zhuǎn)移地址,即轉(zhuǎn)移的目標(biāo)地址是在下一條指令地址開(kāi)始的2k字節(jié)范圍內(nèi)。它把PC的高5位與指令第一字節(jié)中的第75位(第40位為00001)和指令的第二字中的8位合并在一起構(gòu)成

31、16位的轉(zhuǎn)移地址。該指令為兩個(gè)字節(jié),在實(shí)際使用中要注意跳轉(zhuǎn)出范圍的問(wèn)題。2022/10/1659長(zhǎng)跳轉(zhuǎn)LJMP addr16 ;PC addr16 相對(duì)轉(zhuǎn)移SJMP rel ;PC (PC)+ 2,PC (PC)+ rel 目標(biāo)地址rel 對(duì)應(yīng)范圍為 127 128。 指令LJMP addr16稱長(zhǎng)跳轉(zhuǎn)指令,允許轉(zhuǎn)移的目標(biāo)地址在64kB空間的范圍內(nèi)。指令SJMP rel是無(wú)條件相對(duì)轉(zhuǎn)移指令又稱短轉(zhuǎn)移指令。該指令為雙字節(jié),指令中的相對(duì)地址是一個(gè)帶符號(hào)的8位偏移量其范圍為-128+127。負(fù)數(shù)表示向后轉(zhuǎn)移,正數(shù)表示向前轉(zhuǎn)移,該指令執(zhí)行后程序轉(zhuǎn)移到當(dāng)前PC與rel之和所指示的單元。 2022/10/

32、1660【例】若“NEWADD”為地址1022H,PC的當(dāng)前值為1000H。執(zhí)行指令 SJMP NEWADD 后,程序?qū)⑥D(zhuǎn)向1022H處執(zhí)行(rel=20H= 1022H1000H2)。解析如下:2022/10/1661 ORG 0000H LJMP MAIN ORG 0040H MAIN:MOV A,#0FEH LOOP:MOV P2,A LCALL D_1s RL A AJMP LOOP D_1s:MOV R6,#100D10ms:MOV R5,#40 DL:MOV R4,#123 NOP DJNZ R4,$ DJNZ R5,DL DJNZ R6,D10ms RET END2022/10/

33、1662散轉(zhuǎn)移(間接長(zhǎng)轉(zhuǎn)移)JMP A+DPTR;PC (PC)+ 1,PC (A)+(DPTR) 可完成多條判跳指令的功能 【例】功能:當(dāng)(A)=00H時(shí),程序?qū)⑥D(zhuǎn)到 ROUT0處執(zhí)行;當(dāng)(A)=02H時(shí),程序?qū)⑥D(zhuǎn)到 ROUT1處執(zhí)行;。 MOV DPTR,#TABLE JMP A+DPTRTABLE:AJMP ROUT0 AJMP ROUT1 AJMP ROUT2 AJMP ROUT32022/10/16633.6.2 條件轉(zhuǎn)移累加器判0轉(zhuǎn)移比較不等轉(zhuǎn)移比較兩個(gè)操作數(shù),不相等則轉(zhuǎn)移,相等順序執(zhí)行作減法,影響標(biāo)志位CY, 左 右,CY=0,無(wú)借位左 右,CY=1,有借位2022/10/166

34、4減1不為0轉(zhuǎn)移2022/10/16651、將20H開(kāi)始的32個(gè)單元全部清0將數(shù)據(jù)00H0FH寫入20H開(kāi)始的32個(gè)單元 MOV A , #00H ;A000H MOV R0,#20H ;R020H MOV R7,#20H ;R7計(jì)數(shù),R732 LP1:MOV R0,A ;R0指示單元清0 INC R0 ;R0R0+1 INC A DJNZ R7,LP1 ;R7 R7-12022/10/1666將數(shù)據(jù)00H0FH寫入RAM的30H3FH單元。可執(zhí)行一下指令: MOV A,#00H MOV R0,#30HLOOP:MOV R0,A INC A INC R0 CJNE R0,#40H,LOOP20

35、22/10/1667【例】有一段程序如下,該程序執(zhí)行后,(A)=10+9+8+7+6+5+4+3+2+1=37H MOV 23H,#0AH CLR ALOOPX:ADD A,23H DJNZ 23H,LOOPX SJMP $2022/10/16683.6.3 調(diào)用與返回調(diào)用 指令執(zhí)行時(shí)將返回地址入棧 SP應(yīng)設(shè)為合適值(默認(rèn)值07H) 2022/10/1669 ORG 0000H LJMP MAIN ORG 0040H MAIN:MOV A,#0FEH LOOP:MOV P2,A LCALL D_1s RL A AJMP LOOP D_1s:MOV R6,#100D10ms:MOV R5,#40 DL:MOV R4,#123 NOP DJNZ R4,$ DJNZ R5,DL DJNZ R6,D10ms RET END2022/10/1670【例3】若(SP)=07H,標(biāo)號(hào)“XADD”表示的實(shí)際地址為0345H,PC的當(dāng)前值為0123

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論