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

下載本文檔

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

文檔簡介

2023/2/51第3章 指令系統(tǒng)

《單片機原理與應(yīng)用系統(tǒng)設(shè)計》

電子工業(yè)出版社,2009.72023/2/52

本章主要內(nèi)容MCS-51單片機指令概述

7種尋址方式分類介紹89S51單片機的指令系統(tǒng)

2023/2/53

3.1MCS-51單片機指令概述

指令格式

符號說明

2023/2/54

3.1.1指令格式指令的基本格式

例如,工作寄存器向累加器傳送數(shù)據(jù)指令

匯編語言指令為:MOVA,Rn;A為目的操作數(shù),Rn為源操作數(shù)

機器碼指令為:11101rrr ;rrr=000~111,分別表示R0~R7

2023/2/55

3.1.2符號說明在編寫匯編語言源程序時,字母符號是不區(qū)分大小寫的。在本書中,匯編語言源程序一般采用大寫字母。匯編語言源程序符號說明

請參見教材第42頁。2023/2/56

3.2尋址方式

尋找操作數(shù)或指令的地址的方式稱為尋址方式。

寄存器尋址方式直接尋址方式寄存器間接尋址方式立即尋址方式變址尋址方式相對尋址方式位尋址方式2023/2/57

3.2.1寄存器尋址方式寄存器尋址時,指令中的操作數(shù)為某一寄存器的內(nèi)容,指定了寄存器,也就指定了操作數(shù)。

寄存器包括:

⑴工作寄存器R0~R7

⑵部分特殊功能寄存器,A、B、DPTR等

例如, MOVA,Rn;A←(Rn),n=0~7

2023/2/58

3.2.2直接尋址方式1.操作數(shù)直接以單元地址的形式給出:

MOVA,30H

;A←(30H)

2.尋址范圍只限于片內(nèi)RAM

⑴低128個存儲單元,8-bit二進(jìn)制數(shù)表示地址。

⑵特殊功能寄存器,用直接地址或稱號表示。

例如:MOVA,80H與MOVA,P0是等價的。2023/2/59

3.2.3寄存器間接尋址方式

寄存器中存放的是操作數(shù)的地址在寄存器的名稱前面加前綴標(biāo)志“@”

訪問內(nèi)部RAM或外部數(shù)據(jù)存儲器的低256個字節(jié)時,只能采用R0或R1作為間址寄存器。例如:

MOVR1,#40HMOVA,@R1;把內(nèi)部RAM中地址為40H單元內(nèi)容送A。2023/2/510

尋址范圍:(1)訪問內(nèi)部RAM區(qū),51系列128個字節(jié),52系列256個字節(jié),用R0或R1間接尋址,其通用形式為:

MOVA,@Ri(2)訪問片外數(shù)據(jù)存儲器的低256字節(jié),用R0或R1間接尋址,其通用形式為:

MOVXA,@Ri(3)對片外數(shù)據(jù)存儲器的64K字節(jié)的間接尋址,用DPTR作間址寄存器。例如:

MOVXA,@DPTR(4)堆棧區(qū)堆棧操作指令PUSH(壓棧)和POP(出棧)使用堆棧指針(SP)作間址寄存器2023/2/511

3.2.4立即尋址方式

操作數(shù)在指令中直接給出,需在操作數(shù)前面加前綴“#”,若立即數(shù)的首位為A~F,前面還要加零。例如:

MOVA,#40HMOVA,#0FFH

MOVDPTR,#5678H

;DPH←#56H,DPL←#78H2023/2/512

3.2.5變址尋址方式1.變址尋址方式是以程序計數(shù)器PC或數(shù)據(jù)指針DPTR作為基址寄存器,以累加器A作為變址寄存器,它們兩者內(nèi)容之和為有效地址。

數(shù)據(jù)地址=基地址+偏移量。2.尋址范圍:

程序存儲器空間。

3.變址尋址方式的指令只有3條:

⑴MOVCA,@A+DPTR ;查表指令

⑵MOVCA,@A+PC ;查表指令

⑶JMP @A+DPTR ;散轉(zhuǎn)指令2023/2/513

3.2.6相對尋址方式

在相對尋址的轉(zhuǎn)移指令中,給出了地址偏移量,以“rel”表示,即把PC的當(dāng)前值加上偏移量就構(gòu)成了程序轉(zhuǎn)移的目的地址:

目的地址=轉(zhuǎn)移指令所在的地址+轉(zhuǎn)移指令的字節(jié)數(shù)+rel

偏移量rel是一帶符號的8位二進(jìn)制數(shù)補碼數(shù)。范圍是:–128~+1272023/2/514

3.2.7位尋址方式

51系列單片機有位處理功能,可以對數(shù)據(jù)位進(jìn)行操作,例如:MOVC,40H;把位40H的值送到位累加器C。尋址范圍包括:(1)內(nèi)部RAM中的位尋址區(qū)。(2)特殊功能寄存器中的可尋址位。2023/2/515

特殊功能寄存器可尋址位在指令中有如下4種的表示方法:

a.直接使用位地址

SETB0D5Hb.位名稱的表示方法

SETBF0c.特殊功能寄存器符號加位數(shù)的表示方法

SETBPSW.5d.單元地址加位數(shù)的表示方法

SETB(0D0H).52023/2/516

操作數(shù)尋址方式和有關(guān)空間2023/2/517

符號注釋Rn(n=0-7):當(dāng)前選中的工作寄存器組R0-R7。Ri(I=0,1):作為地址指針的兩個工作寄存器R0,R1。#data:8位立即數(shù)。#data16:16位立即數(shù)。direct:8位片內(nèi)RAM單元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:補碼表示的8位地址偏移量。范圍:-128-+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號。/:位操作指令中對該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容。→:指令操作流程方向。2023/2/5183.389S51單片機的指令系統(tǒng)按操作功能分類:

1.數(shù)據(jù)傳送類指令(29條)

2.算術(shù)運算類指令(24條)

3.邏輯運算及移位類指令(24條)

4.控制轉(zhuǎn)移類指令(17條)

5.位操作類指令(17條)按指令字節(jié)分類:

1.單字節(jié)指令(49條)

2.雙字節(jié)指令(45條)

3.三字節(jié)指令(17條)

按指令執(zhí)行時間分類:

1.單周期指令(64條)

2.雙周期指令(45條)

3.四周期指令(2條)

2023/2/519

指令學(xué)習(xí)要點了解指令的操作了解指令的尋址方式了解指令對程序狀態(tài)字的影響合理使用指令2023/2/520

3.3.1數(shù)據(jù)傳送類指令語句格式:

MOV<目的操作數(shù)>,<源操作數(shù)>

屬“復(fù)制”性質(zhì),而不是“搬家”

在傳送指令中,有從右向左傳送數(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的指令除外。2023/2/521

8位傳送

#data不能用作目的字節(jié);源字節(jié)與目的字節(jié)不相同(除direct外);寄存器與寄存器、寄存器間址之間不相互傳送。傳送關(guān)系目的源操作數(shù)AARnRndirectdirect@Ri@Ri#data一般傳送指令2023/2/522

片內(nèi)數(shù)據(jù)存儲器的數(shù)據(jù)傳送示意圖2023/2/523

以A為目的

例:若(R1)=20H,(20H)=55H

執(zhí)行

MOVA,@R1MOVA,Rndirect@Ri#data結(jié)果:(A)=55H。2023/2/524

以Rn

為目的

例:若(50H)=40H

執(zhí)行

MOVR6,50H

MOVRn,Adirect#data結(jié)果:(R6)=40H。2023/2/525

以direct

為目的

例:若(R1)=50H,(50H)=18H

執(zhí)行MOV40H,@R1

結(jié)果:(40H)=18H。

MOVdirect,Rndirect1@Ri#dataAdirect指的是內(nèi)部RAM或SFR的地址2023/2/526

以@Ri為目的

例:若(R1)=30H,(A)=20H

執(zhí)行MOV@R1,A結(jié)果:(30H)=20HMOV@Ri,Adirect#data2023/2/527

16位傳送

將源操作數(shù)data16(通常是地址常數(shù))送入目的操作數(shù)DPTR中。例如:

MOVDPTR,#1234H

結(jié)果為:

(DPH)=12H,(DPL)=34H。2023/2/528

例:MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H習(xí)題:用兩種尋址方式實現(xiàn),將片內(nèi)RAM60H單元的數(shù)據(jù)傳送給累加器A。解:MOVA,#60H(×)MOVR0,#60H(√)

MOVA,@R0;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30HMOVR0,60HMOVA,@R0

(×)

解:MOVA,60H

(√)

結(jié)果A=32H順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。2023/2/529

說明:

只有指令表中的指令才有對應(yīng)指令代碼,計算機才能執(zhí)行。編程時,不能隨意創(chuàng)造發(fā)明指令。1.一條指令中不能同時出現(xiàn)兩個工作寄存器:

非法指令: MOVR1,R2

MOVR2,@R02.間址寄存器只能使用R0、R1。

非法指令:MOVA,@R23.SFR區(qū)只能直接尋址,不能用寄存器間接尋址。

非法指令:MOVR0,#80H

MOVA,@R04.指令表(P309):B:指令字節(jié)數(shù),M:機器周期數(shù)2023/2/530

ROM查表

2.MOVCA,@A+PC

以PC的當(dāng)前值與偏移量之和作為程序存儲器地址,將該地址單元的內(nèi)容傳送到A。指令執(zhí)行后PC的內(nèi)容不變。

特殊傳送指令1.MOVCA,@A+DPTR

以DPTR與偏移量之和作為程序存儲器地址,將該地址單元的內(nèi)容傳送到A。指令執(zhí)行后DPTR的內(nèi)容不變。2023/2/531

程序存儲器數(shù)據(jù)傳送示意圖2023/2/532

【例1】:(A)=30H,執(zhí)行地址1000H處的指令1000H:MOVCA,@A+PC

本指令占用一個字節(jié),執(zhí)行結(jié)果將程序存儲器中1031H的內(nèi)容送入A。缺點:表格只能存放在該條查表指令后面的256個單元之內(nèi),表格的大小受到限制,且表格只能被一段程序所利用?!纠?】:(DPTR)=8100H(A)=40H執(zhí)行指令MOVCA,@A+DPTR

本指令的執(zhí)行結(jié)果只和指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址及常數(shù)表格存放的地址無關(guān),因此表格的大小和位置可以在64K程序存儲器中任意安排,一個表格可以為各個程序塊公用。2023/2/533

片外數(shù)據(jù)存儲器數(shù)據(jù)傳送示意圖2023/2/534

讀寫片外RAM

1.讀片外RAMMOVXA,@DPTRMOVXA,@Ri2.寫片外RAM

MOVX@DPTR,AMOVX@Ri,A2023/2/535

例:實現(xiàn)片外數(shù)據(jù)存儲器數(shù)據(jù)傳送(2000H)?(2100H)。

MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A習(xí)題:將片外RAM0000H單元的數(shù)據(jù)傳送到片內(nèi)RAM的60H單元。

;DPTR=2000H

;A=X

;DPTR=2100H

;(2100H)=X片外數(shù)據(jù)存儲器不能直接尋址。下列為非法指令:

MOVXA,2000HMOVX2100H,2000HDPTRX2023/2/536

堆棧操作3.操作

PUSHdirectPOPdirect1.原則:向地址高端生長,后進(jìn)先出2.SP:指向棧頂(活動端),復(fù)位值07H例:若(SP)=07H,(40H)=88H

執(zhí)行PUSH40H結(jié)果:(SP)=08H,(08H)=88H。2023/2/537

[例1]:當(dāng)(SP)=60H,(A)=30H,(B)=70H時,執(zhí)行:PUSHACC;(SP)+1=61H→SP,(A)→61HPUSHB;(SP)+1=62H→SP,(B)→62H

結(jié)果:(61H)=30H,(62H)=70H,(SP)=62H[例2]:當(dāng)(SP)=62H,(62H)=70H,(61H)=30H,執(zhí)行:POPDPH;((SP))→DPH,(SP)-1→SPPOPDPL;((SP))→DPL,(SP)-1→SP

結(jié)果:(DPTR)=7030H,(SP)=60H2023/2/538

數(shù)據(jù)交換例:若(R0)=80H,(A)=20H。 執(zhí)行XCHA,R0交換類指令,傳送是雙向的1.字節(jié)交換XCHA,Rndirect@Ri結(jié)果:(A)=80H,(R0)=20H。2023/2/539

2.半字節(jié)交換

例1:若(R0)=30H,(30H)=67H,(A)=20H。執(zhí)行XCHDA,@R0后,(A)=27H,(30H)=60H。XCHDA,@RiSWAPA例2:若(A)=30H,執(zhí)行SWAPA后,(A)=03H。2023/2/540

3.3.2算術(shù)運算類指令89S51指令系統(tǒng)具有較強的加、減、乘、除四則運算功能,但只有8bits數(shù)據(jù)運算指令,沒有16bits數(shù)據(jù)運算指令。共有24條算術(shù)運算類指令。2023/2/541

算術(shù)運算類指令分類不帶進(jìn)位加法指令帶進(jìn)位加法指令帶借位減法指令加1指令減1指令二-十進(jìn)制調(diào)整指令2023/2/542

與數(shù)據(jù)傳送指令不同,多數(shù)算術(shù)運算指令會影響標(biāo)志位的狀態(tài),即CPU執(zhí)行算術(shù)運算指令后,根據(jù)數(shù)據(jù)操作情況自動設(shè)置標(biāo)志位的狀態(tài)。

MCS-51的程序狀態(tài)字寄存器PSW

為標(biāo)志寄存器。其格式如下:字節(jié)地址為D0H位序B7B6B5B4B3B2B1B0位符號CYACF0RS1RS0OVF1P2023/2/543

1.標(biāo)志位(自動設(shè)置狀態(tài)):1)Cy:進(jìn)位標(biāo)志位 保存運算后最高位的進(jìn)位/借位狀態(tài),當(dāng)有進(jìn)位/借位,Cy=1,否則Cy=0。2)AC:輔助進(jìn)位標(biāo)志位 保存低半字節(jié)的進(jìn)位/借位狀態(tài),當(dāng)D3產(chǎn)生進(jìn)位/借位,AC=1,否則AC=0。用于十進(jìn)制調(diào)整。3)OV:溢出標(biāo)志位

OV=Cy7?Cy6,補碼運算產(chǎn)生溢出OV=1,否則OV=0。4)P:奇偶標(biāo)志位 反映累加器A中數(shù)據(jù)的奇偶性。當(dāng)1的個數(shù)為奇數(shù),P=1,否則P=0。2023/2/544

2.用戶選擇位(編程設(shè)置狀態(tài))1)F0、F1:用戶自定義標(biāo)志位。

2)RS1、RS0:

工作寄存器區(qū)選擇位。

復(fù)位時,PSW=00H例:復(fù)位后,設(shè)置使用工作寄存器3區(qū),其余標(biāo)志位不變。解:MOVPSW,#18H位序B7B6B5B4B3B2B1B0位符號CYACF0RS1RS0OVF1P2023/2/545

1.加法類指令

不帶進(jìn)位加一個加數(shù)總是來自累加器A,而另一個加數(shù)可由不同的尋址方式得到。結(jié)果總是放在A中。影響:PSW的Cy、AC、OV、PADDA,Rndirect@Ri#data2023/2/546

使用加法指令時,要注意累加器A中的運算結(jié)果對各個標(biāo)志位的影響:(1)如果位7有進(jìn)位,則置“1”進(jìn)位標(biāo)志Cy,否則清“0”Cy(2)如果位3有進(jìn)位,置“1”輔助進(jìn)位標(biāo)志Ac,否則清“0”Ac(Ac為PSW寄存器中的一位)(3)如果位6有進(jìn)位,而位7沒有進(jìn)位,或者位7有進(jìn)位,而位6沒有,則溢出標(biāo)志位OV置“1”,否則清“0”O(jiān)V。2023/2/547

【例1】(A)=53H,(R0)=FCH,執(zhí)行指令A(yù)DDA,R0結(jié)果:(A)=4FH,Cy=1,Ac=0,OV=0,

P=1(A中結(jié)果1的位數(shù)為奇數(shù))注意:上面的運算中,由于位6和位7同時有進(jìn)位,所以標(biāo)志位OV=0。2023/2/548

【例2】(A)=85H,(R0)=20H,(20H)=AFH,執(zhí)行指令:ADDA,@R0結(jié)果:(A)=34H,Cy=1,Ac=1,OV=1,P=1注意:由于位7有進(jìn)位,而位6無進(jìn)位,所以標(biāo)志位OV=12023/2/549

【例3.2】片內(nèi)RAM單元40H、41H中分別存放被加數(shù)、加數(shù),相加結(jié)果存放到41H、40H單元。程序如下:

MOV R0,#40H ;設(shè)置地址指針

MOV A,@R0 ;取被加數(shù)

INC R0 ADD A,@R0 ;兩數(shù)相加

DEC R0 MOV @R0,A ;存放和的低8位

INC R0 JC CARRY MOV @R0,#0 ;相加結(jié)果無進(jìn)位

RETCARRY:MOV @R0,#1 ;相加結(jié)果有進(jìn)位

RET2023/2/550

帶進(jìn)位加

注釋:

1.源操作數(shù)與A的內(nèi)容相加再與Cy相加,結(jié)果送入目的操作數(shù)A中。ADDCA,Rndirect@Ri#data2.Cy是在該指令執(zhí)行之前已存在的值。2023/2/551

【例1】(A)=85H,(20H)=FFH,Cy=1執(zhí)行指令:

ADDCA,20H結(jié)果:(A)=85H,Cy=1,Ac=1,OV=0,P=1注意:上面的運算中,由于位6和位7同時有進(jìn)位,所以標(biāo)志位OV=0。2023/2/552

十進(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。

對A中剛進(jìn)行的2個BCD碼加法的結(jié)果調(diào)整。

DAA3.調(diào)整后,Cy表示結(jié)果的百位值。

2023/2/553

適應(yīng)條件:(1)該指令執(zhí)行前,一般有一條加法指令。(2)加法指令中的兩個加數(shù),應(yīng)該是用壓縮BCD碼表示的十進(jìn)制數(shù),和存放在A中。(3)執(zhí)行完DA指令后,A中存放的數(shù)是兩個加數(shù)的十進(jìn)制和,也使用壓縮BCD碼表示。

若(A)=56h(R5)=67hADDA,R5DAA

結(jié)果(A)=23;Cy=12023/2/554

十進(jìn)制加法指令:僅對加法結(jié)果進(jìn)行調(diào)整 ADDA,源操作數(shù)

DAA帶進(jìn)位十進(jìn)制加1法指令:

ADDCA,源操作數(shù)

DAA作業(yè):BCD碼加法編程。 設(shè)X、Y為4位壓縮BCD碼,求Z=X+Y。BCD調(diào)整指令:BCD:Binary-Coded-Decimal(二進(jìn)制編碼的十進(jìn)制)

DAA ;把A中按二進(jìn)制相加后的結(jié)果

調(diào)整成按BCD數(shù)相加的結(jié)果調(diào)整原因:1、相加結(jié)果大于9,進(jìn)入無效編碼區(qū);

2、相加結(jié)果有進(jìn)位,跳過無效編碼區(qū)。調(diào)整方法:進(jìn)行加“6”修正。2023/2/555

【例3.3】試編寫4位BCD碼加法程序。設(shè)被加數(shù)存放在片內(nèi)RAM單元40H、41H中,加數(shù)存放在42H、43H單元中,相加后結(jié)果存放到分別存放被加數(shù)、加數(shù),相加結(jié)果存放到40H、41H單元中(假定數(shù)據(jù)是高位在前,低位在后,且假定相加的結(jié)果仍為4位BCD碼)。程序如下:

MOV R0,#41H ;設(shè)置地址指針R0 MOV R1,#43H ;設(shè)置地址指針R1 MOV A,@R0 ADD A,@R1 ;十位、個位數(shù)相加

DA A ;十進(jìn)制調(diào)整

MOV @R0,A DEC R0 ;修改地址指針 DEC R1 MOV A,@R0ADDC A,@R1 ;千位、百位數(shù)相加

DA A ;十進(jìn)制調(diào)整

MOV @R0,A RET2023/2/556

2.減法類指令帶借位減法影響:PSW的Cy、AC、OV、P注:D7、D6位只有一個有借位時,(OV)=1。如要用此組指令完成不帶借位減法,只需先清“0”標(biāo)志位Cy。SUBBA,Rndirect@Ri#data2023/2/557

【例1】(A)=C9H,(R2)=54H,Cy=1執(zhí)行指令:

SUBBA,R2結(jié)果:(A)=74H,Cy=0,Ac=0,OV=1,P=0注意:上面的運算中,由于位6向位7借位,位7沒有借位,所以標(biāo)志位OV=1。2023/2/558

加1指令

源操作數(shù)的內(nèi)容加1,結(jié)果再送回原單元。這些指令中僅INCA影響P標(biāo)志。若原變量中內(nèi)容為FFH,則程序執(zhí)行后變量變?yōu)?0H。INC

Rndirect@RiDPTRA2023/2/559

減1指令

源操作數(shù)的內(nèi)容減1,結(jié)果再送回原單元。這些指令中僅DECA影響P標(biāo)志。若原變量中內(nèi)容為00H,則程序執(zhí)行后變量變?yōu)镕FH。DEC

Rndirect@RiA2023/2/560

INC單操作數(shù)

如: INCR2

;R2←R2+1DEC單操作數(shù)

如:DECR2

;R2←R2-1

INCDPTR

;DPTR←DPTR+1

不影響標(biāo)志位狀態(tài)。注意:沒有指令DECDPTR

可用指令DECDPL代替2023/2/561

3.乘法MULAB

例:若(A)=50H,(B)=A0H,執(zhí)行指令MULAB之后,(A)=00H,(B)=32H,(OV)=1,(Cy)=0。

當(dāng)乘積大于FFH時,溢出標(biāo)志位(OV)=1。標(biāo)志Cy總是被清“0”。X

ABAB乘數(shù)被乘數(shù)積2023/2/562

4.除法例:若(A)=FBH(251),(B)=12H(18),執(zhí)行指令DIVAB之后,(A)=0DH,(B)=11H,(OV)=0,(Cy)=0。DIVAB

除數(shù)為0,商的A和B內(nèi)容不確定,且(OV)=1。標(biāo)志Cy總是被清0。X

ABAB除數(shù)被除數(shù)整數(shù)部分商

余數(shù)部分2023/2/563

3.3.3邏輯運算及移位類指令

邏輯運算:與、或、異或、清“0”和取反

對A循環(huán)移位1.方向:左、右2.Cy:帶、不帶

共24條指令。

2023/2/564

邏輯與

源操作數(shù)與直接地址單元內(nèi)容相與

例:若(A)=C3H,(R0)=AAH,執(zhí)行指令A(yù)NLA,R0之后,(A)=82H。ANLdirect,A#dataANLA,Rndirect@Ri#data

源操作數(shù)與累加器A的內(nèi)容相與2023/2/565

邏輯或

源操作數(shù)與直接地址單元內(nèi)容相或

例:若(A)=C3H,(R0)=55H,執(zhí)行指令ORLA,R0之后,(A)=D7H。ORLdirect,A#dataORLA,Rndirect@Ri#data

源操作數(shù)與累加器A的內(nèi)容相或2023/2/566

邏輯異或

源操作數(shù)與直接地址單元內(nèi)容相異或

例若(A)=C3H,(R0)=AAH,執(zhí)行指令XRLA,R0之后,(A)=69H。XRLdirect,A#dataXRLA,Rndirect@Ri#data

源操作數(shù)與累加器A的內(nèi)容相異或2023/2/567

累加器清“0”和取反

把A的內(nèi)容取反,結(jié)果仍在A中。CPLACLRA例若(A)=A5H,執(zhí)行指令CLRA之后,(A)=00H。

把A的內(nèi)容清“0”

,結(jié)果仍在A中。2023/2/568

累加器循環(huán)移位

2023/2/569

3.3.4控制轉(zhuǎn)移類指令(17條)

程序執(zhí)行是順序的,改變程序執(zhí)行順序,稱作程序轉(zhuǎn)移。

控制程序轉(zhuǎn)移采用轉(zhuǎn)移指令1.無條件轉(zhuǎn)移2.條件轉(zhuǎn)移3.子程序調(diào)用與返回2023/2/570

1.無條件轉(zhuǎn)移指令

長轉(zhuǎn)移指令

LJMPaddr16指令第二、三字節(jié)地址碼分別裝入PC的高8位和低8位中。可轉(zhuǎn)到64KB的ROM空間的任何單元。例:若“NEWADD”表示轉(zhuǎn)移目標(biāo)地址1234H。執(zhí)行LJMPNEWADD時,目標(biāo)地址將裝入PC中,程序轉(zhuǎn)向地址1234H處運行。2023/2/571

1.無條件轉(zhuǎn)移指令

絕對轉(zhuǎn)移指令

AJMPaddr11

注釋:1.PC先指向AJMP的下一條指令,再把11位地址碼傳送到PC10~0,PC15~11不變。2.當(dāng)前PC值(下條指令地址)高5位,可確定32個2KB段之一。因此,AJMP轉(zhuǎn)移范圍為包含AJMP下條指令在內(nèi)的2KB區(qū)間。2023/2/572

1.無條件轉(zhuǎn)移指令

短轉(zhuǎn)移指令

SJMPrelrel是目標(biāo)地址的標(biāo)號,由匯編程序自動計算,并填入指令代碼中。第二字節(jié)為rel,(補碼),00H~7FH為正向轉(zhuǎn)移,80H~FFH(-128~-1)反向轉(zhuǎn)移。2023/2/573

1.無條件轉(zhuǎn)移指令

變址尋址轉(zhuǎn)移指令JMP@A+DPTR轉(zhuǎn)移地址由DPTR和A相加形成。例程: MOVDPTR,#TABLE JMP@A+DPTRTABLE: AJMPROUT0;(A)=00H時

AJMPROUT1;(A)=02H時

AJMPROUT2;(A)=04H時

AJMPROUT3;(A)=06H時2023/2/574

2.條件轉(zhuǎn)移指令累加器判0轉(zhuǎn)移例: 若A原來為00H,則

JNZL1;程序往下執(zhí)行

INCA;

JNZL2;程序轉(zhuǎn)向L2處執(zhí)行

JZrelA的內(nèi)容為0轉(zhuǎn)移JNZrelA的內(nèi)容不為0轉(zhuǎn)移2023/2/575

2.條件轉(zhuǎn)移指令

比較不相等轉(zhuǎn)移

對前面兩個操作數(shù)進(jìn)行比較,不相等則轉(zhuǎn)移比較時影響進(jìn)位標(biāo)志Cy,不影響操作數(shù)本身。

若左操作數(shù)=右操作數(shù),Cy=0,程序順序執(zhí)行;若左操作數(shù)>右操作數(shù),Cy=0,程序轉(zhuǎn)移;若左操作數(shù)<右操作數(shù),Cy=1,程序轉(zhuǎn)移;CJNEA,direct,relCJNE

ARn@Ri,#data,rel2023/2/576

2.條件轉(zhuǎn)移指令

減1不為0轉(zhuǎn)移

每執(zhí)行一次,循環(huán)控制單元減1,并判其是否為0

不為0,則轉(zhuǎn)移到目標(biāo)地址繼續(xù)循環(huán);為0,則結(jié)束循環(huán),程序往下執(zhí)行。DJNZRn,relDJNZdirect,rel2023/2/577

【例3.4】將片外RAM的1100H~11FFH的256個單元清0。程序如下:

MOV R7,#00H ;設(shè)置計數(shù)初值

CLR A MOV DPTR,#1100H;設(shè)置片外RAM單元首址LOOP:MOVX @DPTR,A INC DPTR DJNZ R7,LOOP RET2023/2/578

3.調(diào)用與返回指令

子程序調(diào)用指令

子程序的短調(diào)用和長調(diào)用目標(biāo)地址形成方式與AJMP和LJMP相似不影響任何標(biāo)志

ACALLaddr11LCALLaddr162023/2/579

3.調(diào)用與返回指令

返回指令

RET從堆棧中彈出壓入堆棧保護(hù)的斷點地址,并送入指令計數(shù)器PC,返回到斷點處繼續(xù)執(zhí)行。

RETI專用于中斷服務(wù)程序返回,除返回中斷斷點處執(zhí)行主程序以外,并有清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器(以保證正確的中斷邏輯)的功能。RETRETI

2023/2/580

4.空操作指令NOP1.不產(chǎn)生任何控制操作,但:

PC的內(nèi)容加1

消耗1個機器周期程序空間上占用一個字節(jié)2.常用來實現(xiàn)較短時間的延時。2023/2/581

3.3.5位操作類指令

以位為單位進(jìn)行的各種操作。位地址形式:(表示PSW中的位5

)直接位地址(如,0D5H)點操作符(如,0D0H.5、PSW.5等)位名稱(如,F(xiàn)0)偽指令定義(如,MYFLAGBITF0)位操作指令中,位累加器要用字符“C”表示。注:在位操作指令中Cy與具體的直接位地址D7H對應(yīng)。

2023/2/582

位傳送指令

MOVbit,C MOVC,bit

指定位地址中內(nèi)容與Cy的內(nèi)容的相互傳送

例:若(Cy)=1,(P3)=11000101B,(P1)=00110101B。執(zhí)行以下指令:

MOVP1.3,C MOVC,P3.3 MOVP1.2,C

結(jié)果:(Cy)=0,P3的內(nèi)容未變,P1的內(nèi)容變?yōu)?0111001B。2023/2/583

位清“0”指令

位累加器Cy清“0”

例:若(P1)=10011101B。執(zhí)行指令CLRP1.3后,結(jié)果為:(P1)=10010101B。CLRC

CLRbit

位地址內(nèi)容清“0”2023/2/584

位置“1”指令

例若(P1)=10011100B。執(zhí)行指令SETBP1.0后,(P1)=10011101B。

位累加器Cy置“1”SETBC

SETBbit

位地址內(nèi)容置“1”2023/2/585

位邏輯與指令

例:若(P1)=10011100B,(Cy)=1。執(zhí)行指令A(yù)NLC,P1.0后,結(jié)果為:P1內(nèi)容不變,而(Cy)=0。位地址單元內(nèi)容與位累加器內(nèi)容“與”ANLC,bit

位地址單元內(nèi)容取反后的值與位累加器內(nèi)容“與”ANLC,/bit2023/2/586

位邏輯或指令

位地址單元內(nèi)容取反后的值與位累加器內(nèi)容“或”

位地址單元內(nèi)容與位累加器內(nèi)容“或”O(jiān)RLC,bitORLC,/bit

位取反CPLCCPLbit2023/2/587

判Cy轉(zhuǎn)移指令

當(dāng)(Cy)=1,轉(zhuǎn)向PC當(dāng)前值與rel之和的目標(biāo)地址執(zhí)行,否則程序順序執(zhí)行。

JCrel

JNCrel當(dāng)(Cy)=0,轉(zhuǎn)向PC當(dāng)前值與rel之和的目標(biāo)地址去執(zhí)行,否則程序順序執(zhí)行。

2023/2/588

判位bit轉(zhuǎn)移指令

JBbit,rel

JBCbit,relJNBbit,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í)行。

與上面指令相同,但還有將該位清0功能。

2023/2/589

3.5思考題與習(xí)題什么是尋址方式?89S51指令系統(tǒng)有哪些尋址方式?相應(yīng)的尋址空間在何處?訪問片外數(shù)據(jù)存儲器、程序存儲器,可以使用哪些指令來實現(xiàn)?請舉例說明。要訪問特殊功能寄存器和片內(nèi)數(shù)據(jù)存儲器,應(yīng)采用哪些尋址方式?說明下列指令中源操作數(shù)采用的尋址方式。

MOV55H,R7

MOVA,55H

MOVA,#55H

JMP@A+DPTR

MOV30H,C MOVA,@R0 MOVXA,@R02023/2/590

3.5思考題與習(xí)題請判斷下列的單片機指令的書寫格式是否有錯,若有,請說明錯誤原因。 MOVR0,R3 MOVR0,@R3 MOVC A,@R0+DPTR ADDR0,R1 MULAR0試編寫一個子程序,其功能是將PSW中的用戶標(biāo)志位F0、F1中的內(nèi)容進(jìn)行“異或”邏輯運算,將運算結(jié)果存放到進(jìn)位標(biāo)志Cy。2023/2/591

3.5思考題與習(xí)題寫出實現(xiàn)下列要求的指令或程序片段。 ⑴將R0的內(nèi)容傳送到R1; ⑵片內(nèi)RAM20H單元的內(nèi)容傳送到寄存器R1; ⑶片內(nèi)RAM20H單元的位D7和D3清0,其他位保持不變; ⑷片外RAM1000H單元的內(nèi)容傳送到片內(nèi)RAM60H單元中; ⑸片外RAM1080H單元的內(nèi)容傳送到寄存器R7中。 ⑹累加器A的高4位清0,其他位保持

溫馨提示

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

最新文檔

評論

0/150

提交評論