單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)第03章 指令系統(tǒng)-02_第1頁
單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)第03章 指令系統(tǒng)-02_第2頁
單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)第03章 指令系統(tǒng)-02_第3頁
單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)第03章 指令系統(tǒng)-02_第4頁
單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)第03章 指令系統(tǒng)-02_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 指令系統(tǒng) 單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì) 電子工業(yè)出版社 , 2009.7 歐偉明 何靜 凌云 劉劍 等編著8/14/20221本章主要內(nèi)容 MCS51單片機(jī)指令概述 7種尋址方式 分類介紹89S51單片機(jī)的指令系統(tǒng) 8/14/202223.1 MCS51單片機(jī)指令概述 指令格式 符號(hào)說明 8/14/202233.1.1 指令格式指令的基本格式 :例如,工作寄存器向累加器傳送數(shù)據(jù)指令匯編語言指令為:MOV A, Rn ; A為目的操作數(shù),Rn為源操作數(shù) 機(jī)器碼指令為 :1110 1rrr ; rrr = 000111,分別表示R0 R7 8/14/202243.1.2 符號(hào)說明 在編寫匯編語

2、言源程序時(shí),字母符號(hào)是不區(qū)分大小寫的。在本書中,匯編語言源程序一般采用大寫字母。匯編語言源程序符號(hào)說明請(qǐng)參見教材第 頁。8/14/202253.2 尋址方式 尋找操作數(shù)或指令的地址的方式稱為尋址方式。 寄存器尋址方式 直接尋址方式 寄存器間接尋址方式 立即尋址方式 變址尋址方式 相對(duì)尋址方式 位尋址方式 8/14/202263.2.1 寄存器尋址方式寄存器尋址時(shí),指令中的操作數(shù)為某一寄存器的內(nèi)容,指定了寄存器,也就指定了操作數(shù)。 寄存器包括: 工作寄存器R0R7 部分特殊功能寄存器,A、AB寄存器對(duì)、DPTR等例如,指令 INC R0; R0 (R0)+1 8/14/202273.2.2 直接

3、尋址方式直接尋址時(shí),指令中的操作數(shù)部分直接給出了操作數(shù)的地址。 尋址范圍只限于片內(nèi)RAM : 低128個(gè)存儲(chǔ)單元,8-bit二進(jìn)制數(shù)表示地址。 特殊功能寄存器,用直接地址或稱號(hào)表示。例如,指令 MOV A, 30H ; A (30H) 8/14/202283.2.3 寄存器間接尋址方式寄存器間接尋址時(shí),指令中給出的寄存器為地址指針。 尋址范圍: 片內(nèi)和片外RAM 256單元,用R0或R1間接尋址。 片外RAM 65536單元,用DPTR間接尋址。 例如:MOV A, RiMOVX A, Ri MOVX DPTR, A 8/14/202293.2.4 立即尋址方式操作數(shù)直接包含在指令中,這種給定

4、操作數(shù)的方式稱為立即尋址方式。 尋址范圍: 僅限于程序存儲(chǔ)器空間。 例如: MOV A, #18H ;將立即數(shù)18H送到累加器A MOV DPTR, #5678H ; DPH #56H,DPL #78H 8/14/2022103.2.5 變址尋址方式變址尋址方式是以程序計(jì)數(shù)器PC或數(shù)據(jù)指針DPTR作為基址寄存器,以累加器A作為變址寄存器,它們兩者內(nèi)容之和為有效地址。 尋址范圍: 程序存儲(chǔ)器空間。 變址尋址方式的指令只有3條: MOVC A, A+DPTR; 查表指令 MOVC A, A+PC; 查表指令 JMP A+DPTR; 散轉(zhuǎn)指令8/14/2022113.2.6 相對(duì)尋址方式相對(duì)尋址是以

5、PC的相對(duì)值為基地址,加上指令中所給定的偏移量,形成有效的轉(zhuǎn)移地址。 目的地址 = 轉(zhuǎn)移指令所在地址 +轉(zhuǎn)移指令的字節(jié)數(shù) +偏移量rel例如,指令 SJMP rel ; PC (PC)+2+rel 8/14/2022123.2.7 位尋址方式位尋址時(shí),操作數(shù)是二進(jìn)制數(shù)表示的地址,其位地址出現(xiàn)在指令中。 尋址范圍: 片內(nèi)RAM中的位尋址區(qū)。字節(jié)地址為20H2FH,位地址為 00H7FH ,共16字節(jié)128-bit 。 特殊功能寄存器的可尋址位 。例如,指令 CLR bit ; 地址為bit的位單元清0 8/14/2022133.3 89S51單片機(jī)的指令系統(tǒng)共有111條指令,分為5大類: 數(shù)據(jù)傳

6、送類指令(29條) 算術(shù)運(yùn)算類指令(24條) 邏輯運(yùn)算及移位類指令(24條) 控制轉(zhuǎn)移類指令(17條) 位操作類指令(17條) 8/14/2022143.3.1 數(shù)據(jù)傳送類指令語句格式: MOV , 在傳送指令中,有從右向左傳送數(shù)據(jù)的約定,即指令的右邊操作數(shù)是源操作數(shù),表達(dá)的是數(shù)據(jù)的來源,而左邊的操作數(shù)是目的操作數(shù),表達(dá)的是傳送數(shù)據(jù)的目的地址。 源操作數(shù):累加器A、工作寄存器Rn、直接地址direct、間址寄存器、立即數(shù)。 目的操作數(shù):累加器A、工作寄存器Rn、直接地址direct、間址寄存器。 除了奇偶標(biāo)志位P外,數(shù)據(jù)傳送類指令一般不影響程序狀態(tài)字PSW的其他標(biāo)志位,當(dāng)然,直接訪問PSW的指

7、令除外。8/14/202215一般傳送指令 16位傳送 將源操作數(shù)data16(通常是地址常數(shù))送入目的操作數(shù)DPTR中。例如: MOV DPTR,#1234H 結(jié)果為: (DPH)=12H,(DPL)=34H。8/14/202216 8位傳送 data不能用作目的字節(jié); 源字節(jié)與目的字節(jié)不相同(除direct外); 寄存器與寄存器、寄存器間址之間不相互傳送。傳送關(guān)系目的源操作數(shù)AARnRndirectdirectRiRi#data8/14/202217 以A為目的 例:若(R1)= 20H,(20H)= 55H 執(zhí)行 MOV A,R1MOV A,RndirectRi#data結(jié)果:(A)=

8、55H。8/14/202218 以Rn 為目的 例:若(50H)= 40H 執(zhí)行 MOV R6,50H MOV Rn,Adirect#data結(jié)果:(R6)= 40H。8/14/202219 以direct 為目的 例:若(R1)=50H,(50H)=18H 執(zhí)行MOV 40H,R1 結(jié)果:(40H)=18H。 MOV direct,Rndirect1Ri#dataA8/14/202220 以Ri為目的 例:若(R1)=30H,(A)=20H 執(zhí)行 MOV R1,A結(jié)果:(30H)=20HMOV Ri,Adirect#data8/14/202221 ROM查表 2. MOVC A,A+PC 以

9、PC的當(dāng)前值與偏移量之和作為程序存儲(chǔ)器地址,將該地址單元的內(nèi)容傳送到A。指令執(zhí)行后PC的內(nèi)容不變。 特殊傳送指令1. MOVC A,A+DPTR 以DPTR與偏移量之和作為程序存儲(chǔ)器地址,將該地址單元的內(nèi)容傳送到A。指令執(zhí)行后DPTR的內(nèi)容不變。8/14/202222 讀寫片外RAM 1. 讀片外RAM MOVX A,DPTR MOVX A,Ri2. 寫片外RAM MOVX DPTR,A MOVX Ri,A8/14/202223 堆棧操作3. 操作 PUSH direct POP direct1. 原則:向地址高端生長,后進(jìn)先出2. SP :指向棧頂(活動(dòng)端),復(fù)位值07H例:若(SP)=07

10、H,(40H)=88H 執(zhí)行 PUSH 40H 結(jié)果:(SP)=08H,(08H)=88H。8/14/202224 數(shù)據(jù)交換例:若(R0)=80H,(A)=20H。執(zhí)行 XCH A,R0交換類指令, 傳送是雙向的1. 字節(jié)交換XCH A,RndirectRi結(jié)果:(A)=80H,(R0)=20H。8/14/2022252. 半字節(jié)交換 例1:若(R0)30H,(30H)67H, (A)20H。 執(zhí)行 XCHD A,R0 后, (A)27H,(30H)60H。 XCHD A,Ri SWAP A例2:若(A)30H,執(zhí)行SWAP A后,(A)03H。8/14/2022263.3.2 算術(shù)運(yùn)算類指令

11、 89S51指令系統(tǒng)具有較強(qiáng)的加、減、乘、除四則運(yùn)算功能,但只有8bits數(shù)據(jù)運(yùn)算指令,沒有16bits數(shù)據(jù)運(yùn)算指令。 共有24條算術(shù)運(yùn)算類指令。8/14/2022271. 加法類指令 不帶進(jìn)位加影響:PSW的Cy、AC、OV、PADD A,RndirectRi#data注:D7、D6位只有一個(gè)有進(jìn)位時(shí),(OV)= 1。例如,兩個(gè)正數(shù)相加結(jié)果為負(fù)數(shù)或兩個(gè)負(fù)數(shù)相加結(jié)果為正數(shù)時(shí)屬于錯(cuò)誤結(jié)果,此時(shí)(OV)= 1。8/14/202228 帶進(jìn)位加 注釋: 1. 源操作數(shù)與A的內(nèi)容相加再與Cy相加,結(jié)果送入目的操作數(shù)A中。ADDC A,RndirectRi#data2. Cy是在該指令執(zhí)行之前已存在的值

12、。8/14/202229 加1指令 源操作數(shù)的內(nèi)容加 1 ,結(jié)果再送回原單元。這些指令中僅 INC A 影響P標(biāo)志。INC RndirectRiDPTRA8/14/202230 十進(jìn)制調(diào)整指令 注釋: 1. 當(dāng)A中低4位數(shù)出現(xiàn)了非BCD碼或低4位產(chǎn)生進(jìn)位(AC=1),則在低4位加6。2. 當(dāng)A中高4位數(shù)出現(xiàn)了非BCD碼或高4位產(chǎn)生進(jìn)位(Cy=1),則在高4位加6。 對(duì)A中剛進(jìn)行的2個(gè)BCD碼加法的結(jié)果調(diào)整。 DA A3. 調(diào)整后,Cy表示結(jié)果的百位值。 8/14/2022312. 減法類指令 不帶借位減影響:PSW的Cy、AC、OV、P注: D7、D6位只有一個(gè)有借位時(shí),(OV)=1。如要用此

13、組指令完成不帶借位減法,只需先清“0”標(biāo)志位Cy。SUBB A,RndirectRi#data8/14/202232 減1指令 源操作數(shù)的內(nèi)容減 1 ,結(jié)果再送回原單元。這些指令中僅 DEC A 影響P標(biāo)志。DEC RndirectRiA8/14/2022333. 乘法MUL AB 例: 若(A)=50H,(B)=A0H,執(zhí)行指令 MUL AB 之后,(A)=00H,(B)=32H,(OV)=1,(Cy)=0。 當(dāng)乘積大于FFH時(shí),溢出標(biāo)志位(OV)=1。 標(biāo)志Cy總是被清“0”。X ABAB乘數(shù)被乘數(shù)積8/14/2022344. 除法例: 若(A)=FBH(251),(B)=12H(18),

14、執(zhí)行指令 DIV AB 之后,(A)=0DH,(B)=11H,(OV)=0,(Cy)=0。DIV AB 除數(shù)為0,商的A和B內(nèi)容不確定,且(OV)=1 。 標(biāo)志Cy總是被清0。X ABAB除數(shù)被除數(shù)整數(shù)部分商 余數(shù)部分8/14/2022353.3.3 邏輯運(yùn)算及移位類指令 邏輯運(yùn)算:與、或、異或、清“0”和取反 A清“0”操作對(duì)P標(biāo)志有影響。 對(duì)A循環(huán)移位1. 方向:左、右2. Cy:帶、不帶 共24條指令。 8/14/202236 邏輯與 源操作數(shù)與直接地址單元內(nèi)容相與 例: 若(A)=C3H,(R0)=AAH,執(zhí)行指令 ANL A,R0 之后,(A)=82H。ANL direct,A#da

15、taANL A,RndirectRi#data 源操作數(shù)與累加器A的內(nèi)容相與8/14/202237 邏輯或 源操作數(shù)與直接地址單元內(nèi)容相或 例: 若(A)=C3H,(R0)=55H,執(zhí)行指令ORL A,R0 之后,(A)=D7H。ORL direct,A#dataORL A,RndirectRi#data 源操作數(shù)與累加器A的內(nèi)容相或8/14/202238 邏輯異或 源操作數(shù)與直接地址單元內(nèi)容相異或 例 若(A)=C3H,(R0)=AAH,執(zhí)行指令 XRL A,R0 之后,(A)=69H。XRL direct,A#dataXRL A,RndirectRi#data 源操作數(shù)與累加器A的內(nèi)容相異

16、或8/14/202239 邏輯與 源操作數(shù)與直接地址單元內(nèi)容相與 例: 若(A)=C3H,(R0)=AAH,執(zhí)行指令 ANL A,R0 之后,(A)=82H。ANL direct,A#dataANL A,RndirectRi#data 源操作數(shù)與累加器A的內(nèi)容相與8/14/202240 累加器清“0”和取反 把A的內(nèi)容取反,結(jié)果仍在A中。CPL ACLR A例 若(A)=A5H,執(zhí)行指令 CLR A 之后,(A)=00H。 把A的內(nèi)容清“0” ,結(jié)果仍在A中。8/14/202241 累加器循環(huán)移位 8/14/2022423.3.4 控制轉(zhuǎn)移類指令(17條) 程序執(zhí)行是順序的,改變程序執(zhí)行順序,

17、稱作程序轉(zhuǎn)移。 控制程序轉(zhuǎn)移采用轉(zhuǎn)移指令無條件轉(zhuǎn)移條件轉(zhuǎn)移子程序調(diào)用與返回8/14/2022431. 無條件轉(zhuǎn)移指令 短跳轉(zhuǎn) AJMP addr11 注釋:1. PC先指向AJMP的下一條指令,再把11位地址碼傳送到PC100,PC1511不變。2. 當(dāng)前PC值(下條指令地址)高5位,可確定32個(gè)2KB段之一。因此,AJMP轉(zhuǎn)移范圍為包含AJMP下條指令在內(nèi)的2KB區(qū)間。8/14/2022441. 無條件轉(zhuǎn)移指令 長跳轉(zhuǎn) LJMP addr16指令第二、三字節(jié)地址碼分別裝入PC的高8位和低8位中。可轉(zhuǎn)到64KB的ROM空間的任何單元。例:若“NEWADD”表示轉(zhuǎn)移目標(biāo)地址1234H。執(zhí)行 LJ

18、MP NEWADD 時(shí),目標(biāo)地址將裝入PC中,程序轉(zhuǎn)向地址 1234H 處運(yùn)行。8/14/2022451. 無條件轉(zhuǎn)移指令 相對(duì)轉(zhuǎn)移 SJMP rel rel 是目標(biāo)地址的標(biāo)號(hào),由匯編程序自動(dòng)計(jì)算,并填入指令代碼中。 第二字節(jié)為 rel,(補(bǔ)碼),00H7FH為正向轉(zhuǎn)移,80HFFH(1281)反向轉(zhuǎn)移。 例:若“NEWADD”表示地址0123H,PC當(dāng)前值為0100H。執(zhí)行 SJMP NEWADD 后,程序轉(zhuǎn)向 0123H 執(zhí)行(此時(shí)re l= 0123H(01002)= 21H)。8/14/2022461. 無條件轉(zhuǎn)移指令 散轉(zhuǎn)移 JMP A+DPTR轉(zhuǎn)移地址由DPTR和A相加形成。例程:

19、MOV DPTR,#TABLE JMP A+DPTRTABLE:AJMP ROUT0; (A)=00H 時(shí) AJMP ROUT1; (A)=02H 時(shí) AJMP ROUT2; (A)=04H 時(shí) AJMP ROUT3; (A)=06H 時(shí)8/14/2022472. 條件轉(zhuǎn)移指令累加器判0轉(zhuǎn)移例:若A原來為00H,則 JNZ L1 ;程序往下執(zhí)行 INC A ; JNZ L2 ;程序轉(zhuǎn)向L2 處執(zhí)行 JZ rel A的內(nèi)容為 0轉(zhuǎn)移JNZ rel A的內(nèi)容不為 0轉(zhuǎn)移8/14/2022482. 條件轉(zhuǎn)移指令 比較不相等轉(zhuǎn)移 對(duì)目的字節(jié)與源字節(jié)比較,不等則轉(zhuǎn)移 比較時(shí)影響進(jìn)位標(biāo)志Cy,左操作數(shù)右操

20、作數(shù)。 若目的字節(jié)等于源字節(jié),程序?qū)⒗^續(xù)往下執(zhí)行。CJNE A,direct,rel CJNE ARnRi,#data,rel 8/14/2022492. 條件轉(zhuǎn)移指令 減1不為0轉(zhuǎn)移 每執(zhí)行一次,循環(huán)控制單元減1,并判其是否為 0 不為0,則轉(zhuǎn)移到目標(biāo)地址繼續(xù)循環(huán); 為0,則結(jié)束循環(huán),程序往下執(zhí)行。DJNZ Rn,rel DJNZ direct ,rel 8/14/2022503. 調(diào)用與返回指令 子程序調(diào)用指令 子程序的短調(diào)用和長調(diào)用 目標(biāo)地址形成方式與AJMP和LJMP相似 不影響任何標(biāo)志 ACALL addr11 LCALL addr16 8/14/2022513. 調(diào)用與返回指令 返

21、回指令 RET 從堆棧中彈出壓入堆棧保護(hù)的斷點(diǎn)地址,并送入指令計(jì)數(shù)器PC,返回到斷點(diǎn)處繼續(xù)執(zhí)行。 RETI 專用于中斷服務(wù)程序返回,除返回中斷斷點(diǎn)處執(zhí)行主程序以外,并有清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器(以保證正確的中斷邏輯)的功能。RET RETI 8/14/2022524. 空操作指令NOP 1. 不產(chǎn)生任何控制操作,但: PC的內(nèi)容加1 消耗1個(gè)機(jī)器周期 程序空間上占用一個(gè)字節(jié) 2. 常用來實(shí)現(xiàn)較短時(shí)間的延時(shí)。8/14/2022533.3.5 位操作類指令 以位為單位進(jìn)行的各種操作。位地址形式:(表示PSW中的位5 ) 直接位地址(如,0D5H) 點(diǎn)操作符(如,0D0H.5、PSW.5等) 位

22、名稱(如,F(xiàn)0) 偽指令定義(如,MYFLAG BIT F0)位操作指令中,位累加器要用字符“C”表示。注:在位操作指令中Cy與具體的直接位地址D7H對(duì)應(yīng)。 8/14/202254 位傳送指令 MOV bit,C MOV C ,bit 指定位地址中內(nèi)容與Cy的內(nèi)容的相互傳送 例:若(Cy)=1,(P3)=1100 0101B,(P1)=0011 0101B。執(zhí)行以下指令: MOV P1.3,C MOV C,P3.3 MOV P1.2,C 結(jié)果:(Cy)=0,P3的內(nèi)容未變,P1的內(nèi)容變?yōu)?0011 1001B。8/14/202255 位清“0”指令 位累加器Cy清“0” 例: 若(P1)=10

23、01 1101B。執(zhí)行指令CLR P1.3 后,結(jié)果為:( P1 )=1001 0101B。CLR C CLR bit 位地址內(nèi)容清“0”8/14/202256 位 置“1”指令 例 若(P1)=1001 1100B。執(zhí)行指令SETB P1.0 后,(P1)1001 1101B。 位累加器Cy置“1”SETB C SETB bit 位地址內(nèi)容置“1”8/14/202257 位邏輯與指令 例: 若(P1)=1001 1100B,(Cy)1。執(zhí)行指令A(yù)NL C, P1.0 后,結(jié)果為:P1 內(nèi)容不變,而(Cy)0。位地址單元內(nèi)容與位累加器內(nèi)容“與”ANL C,bit 位地址單元內(nèi)容取反后的值與位累

24、加器內(nèi)容“與”ANL C,/bit 8/14/202258 位邏輯或指令 位地址單元內(nèi)容取反后的值與位累加器內(nèi)容“或” 位地址單元內(nèi)容與位累加器內(nèi)容“或”O(jiān)RL C,bit ORL C,/bit 位取反CPL C CPL bit 8/14/202259 判 C y 轉(zhuǎn)移指令 當(dāng)(Cy)=1,轉(zhuǎn)向PC當(dāng)前值與rel之和的目標(biāo)地址執(zhí)行,否則程序順序執(zhí)行。 JC rel JNC rel 當(dāng)(Cy)=0,轉(zhuǎn)向PC當(dāng)前值與rel之和的目標(biāo)地址去執(zhí)行,否則程序順序執(zhí)行。 8/14/202260 判位 bit 轉(zhuǎn)移指令 JB bit,rel JBC bit,rel JNB bit,rel 當(dāng)( bit )=1,轉(zhuǎn)向PC當(dāng)前值與rel之和的目標(biāo)地址執(zhí)行,否則程序順序執(zhí)行。 當(dāng)( bit )=0,轉(zhuǎn)向PC當(dāng)前值與rel之和的目標(biāo)地址執(zhí)行,否則程序順序執(zhí)行。 與上面指

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論