第三章匯編語(yǔ)言及程序設(shè)計(jì)_第1頁(yè)
第三章匯編語(yǔ)言及程序設(shè)計(jì)_第2頁(yè)
第三章匯編語(yǔ)言及程序設(shè)計(jì)_第3頁(yè)
第三章匯編語(yǔ)言及程序設(shè)計(jì)_第4頁(yè)
第三章匯編語(yǔ)言及程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩149頁(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)介

第3章MCS-51單片機(jī)的指令系統(tǒng)

?:?教學(xué)提示:指令是CPU用于控制功能部件完成某一指定動(dòng)

作的指示和命令。一臺(tái)計(jì)算機(jī)全部指令的集合稱為指令系

統(tǒng)。指令系統(tǒng)體現(xiàn)了計(jì)算機(jī)的性能,也是計(jì)算機(jī)重要的組

成部分,應(yīng)用計(jì)算機(jī)進(jìn)行程序設(shè)計(jì)的基礎(chǔ)。

?:?教學(xué)要求:了解單片機(jī)指令系統(tǒng)的特點(diǎn)和功能、操作的對(duì)

象和結(jié)果、匯編語(yǔ)言程序結(jié)構(gòu)的設(shè)計(jì)。重點(diǎn)掌握指令的基本

形態(tài)、格式、尋址方式及匯編語(yǔ)言編程的基本方法,熟悉常

用的子程序,能夠正確運(yùn)用匯編指令編制單片機(jī)應(yīng)用系統(tǒng)的

用戶程序和監(jiān)控程序。

?3.1指令格式及其符號(hào)說(shuō)明

?3.2尋址方式

*3.3MCS-51的指令集

?3.4匯編語(yǔ)言程序的基本形式

?3.5匯編語(yǔ)言程序的基本結(jié)構(gòu)

3.6本章小節(jié)

3.1指令格式及其符號(hào)說(shuō)明

。MCS-51單片機(jī)匯編語(yǔ)言與指令格式

指令由操作碼助記符和操作數(shù)兩部組成。

指令格式如下:

[標(biāo)號(hào):]操作碼助記符[目的操作數(shù)]L源操作數(shù)注釋]

(1)符號(hào)“[]”其包含的內(nèi)容因指令的不同可有可無(wú)。

(2)標(biāo)號(hào):根據(jù)編程需要給指令設(shè)定的符號(hào)地址,可有可

無(wú);通常在子程序入口或轉(zhuǎn)移指令的目標(biāo)地址

處才賦予標(biāo)號(hào)。標(biāo)號(hào)由1?8個(gè)字符組成,第一

個(gè)字符必須是英文字母,不能是數(shù)字或其他符

號(hào),標(biāo)號(hào)后必須用冒號(hào)。

(3)操作碼助記符:指令的核心部分,用于指示機(jī)器執(zhí)行何種

操作,如加、減、乘、除、傳送等。

⑷操作數(shù):是指令操作的對(duì)象,可以是一個(gè)具體的數(shù)據(jù),也

可以是參加運(yùn)算的數(shù)據(jù)所在的地址。操作數(shù)一般有以下幾種

形式:

沒有操作數(shù),操作數(shù)隱含在操作碼中,如RET指令;

只有一個(gè)操作數(shù),如INCA指令;

有兩個(gè)操作數(shù),如MOVA,30H指令;

有3個(gè)操作數(shù),如CJNEA,#00H,10H指令。

(5)注釋:對(duì)指令的解釋說(shuō)明,用以提高程序的可讀性,注釋

前必須加辦號(hào),注釋換行時(shí)行前也要加分號(hào)。

3.1指令格式及其符號(hào)說(shuō)明

指令的字節(jié)

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

?:?無(wú)操作數(shù)單字節(jié)指令

這類指令只有操作碼字段,操作數(shù)隱含在操作碼中。

例如:INCDPTR

指令碼為:

十六進(jìn)

位D7D6D5D4D3D2D1DO

制碼

操作

10101XA3H

碼00

含有操作數(shù)寄存器號(hào)的單字節(jié)指令

指令碼由操作碼字段和指示操作數(shù)所在寄存器號(hào)的字段組成。

例如:MOVA,Rn

指令碼為

十六進(jìn)

位D7D6D5D4D3D2D1DO

制碼

操作碼+E8H~

11101rrr

操作數(shù)EFH

其中,rrr為寄存器Rn的編號(hào)。

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

雙字節(jié)指令的操作碼字節(jié)在前,其后的操作數(shù)字節(jié)可

以是立即數(shù),也可以是操作數(shù)所在的片內(nèi)RAM地址。

例如:MOVA,#23H

指令碼為

十六進(jìn)制

位D7D6D5D4D3D2D1DO

操作碼01110100

操作數(shù)(立即74H23H

00100011

數(shù))

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

這類指令的指令碼的第1字節(jié)為操作碼;第2和第3字節(jié)為

操作數(shù)或操作數(shù)地址,有如下4類:

(1)16位數(shù)據(jù)

例如:MOVDPTR,#26ABH

指令碼為

位D7D6D5D4D3D2D1DO十六進(jìn)制碼

操作碼10010000

90H26H

操作數(shù)(立即數(shù)高)00100110

ABH

操作數(shù)(立即數(shù)低)10101011

(2)8位地址和8位數(shù)據(jù)

例如:MOV74H,#0FFH

指令碼為

十六進(jìn)制

位D7D6D5D4D3D2D1DO

操作碼01110101

操作數(shù)(地

0111010075H74H

址)

FFH

操作數(shù)(立

11111111

即數(shù))

(3)8位數(shù)據(jù)和8位地址

例如:CJNEA,#00,60H

指令碼為

十六進(jìn)制

位D7D6D5D4D3D2D1D0

操作碼10110100

B4H00H

操作數(shù)(立即數(shù))00000000

60H

操作數(shù)(地址)01100000

(4)16位地址

例如:LCALL2020H

指令碼為

十六進(jìn)制

位D7D6D5D4D3D2D1DO

操作碼00010010

12H20H

操作數(shù)(地址高)00100000

20H

操作數(shù)(地址低)00100000

程序設(shè)計(jì)中,應(yīng)盡可能選用字節(jié)少的指令。這

樣,指令所占存儲(chǔ)單元少,執(zhí)行速度也快。

.:?MCS-51單片機(jī)的助記符語(yǔ)言

為了便于人們識(shí)別、讀/寫、記憶和交流用英文單詞或縮

寫字母來(lái)表征指令功能,這些指令的助記符形式稱為匯編語(yǔ)

言指令,常用于匯編語(yǔ)言源程序的程序設(shè)計(jì)。

MCS-51單片機(jī)制造廠家對(duì)每一條指令都給出了助記符。

不同的指令,具有不同的功能和不同的操作對(duì)象。

如附錄一MCS-51助記符意義

助記符意義助記符意義

MOV送數(shù)MUL乘法

MOVCROM送累加器(A)DIV除法

MOVX外部送數(shù)DA十進(jìn)制調(diào)整

PUSH壓入堆棧AJMP絕對(duì)轉(zhuǎn)移

POP堆棧彈出LJMP長(zhǎng)轉(zhuǎn)移

XCH數(shù)據(jù)交換SJMP短轉(zhuǎn)移

XCHD交換低4位JMP相對(duì)轉(zhuǎn)移,

ANL與運(yùn)算JZ判累加器A為0轉(zhuǎn)移

ORL或運(yùn)算JNZ判累加器A非0轉(zhuǎn)移'

XRL異或運(yùn)算JC判CY為0轉(zhuǎn)移

SETB置位JNC判CY非0轉(zhuǎn)移

CLR清。JB直接位為1轉(zhuǎn)移

CPL取反JNB直接位為。轉(zhuǎn)移

RL循環(huán)左移JBC直接位為1轉(zhuǎn)移,并清該位)

RLC帶進(jìn)位循環(huán)左移CJNE比較不相等轉(zhuǎn)移

RR循環(huán)右移DJNZ減1不為。轉(zhuǎn)移

RRC帶進(jìn)位循環(huán)右移ACALL絕對(duì)調(diào)用子程序

SWAP高低半字節(jié)交換LCALL長(zhǎng)調(diào)用子程序

ADD加法RET子程序返回

ADDC帶進(jìn)位加法RETI中斷子程序返回

SUBB帶進(jìn)位減法NOP空操作

-fin1nrr淚

常用符號(hào)說(shuō)明

/rfvD

付節(jié)含義

Rn表于當(dāng)前選定寄存器組的工作寄存器RO?R7,0?7

Ri表不作為間接尋址的地址指針RO?Rl,z-0,1

#data表示8位立即數(shù),即00H?FFH

#datal6表示16位立即數(shù),即0000H?FFFFH

Addrl616位地址,可表示用于64KB范圍內(nèi)尋址,用于LCALL和LJMP指令中

Addrll11位地址,可表示2KB范圍內(nèi)尋址,用于ACALL和AJMP指令中

direct8位直接地址,可以是片內(nèi)RAM區(qū)的某單兀或某一專用功能寄存器的地址

rel帶符號(hào)的8位地址偏移量(128?+127),用于SJMP和條件轉(zhuǎn)移指令中

bit位尋址區(qū)的直接尋址位,表示片內(nèi)RAM中可尋址位和SFR中的可尋址位

(X)X地址單元中的內(nèi)容,或X作為間接尋址寄存器時(shí)所指單元的內(nèi)容

((X))由X尋址的單元的內(nèi)容

<—將箭頭后面的內(nèi)容傳送到箭頭前面去

$當(dāng)前指令所在地址

DPTR數(shù)據(jù)指針

/加在位地址之刖,表示該位狀態(tài)取反

@間接尋址寄存器或基址寄存器的前綴

3.2尋址方式

i.立即尋址

指令中跟在操作碼后面的字節(jié)就是直接參加運(yùn)算的操

作數(shù),稱為立即數(shù),用符號(hào)表示,以區(qū)別直接地址。

立即數(shù)通常使用8位二進(jìn)制數(shù)#data,但指令系統(tǒng)中有一條立

即數(shù)為#datal6的指令。

【例】執(zhí)行指令:

MOVA,#30H;(A)-30H

MOVDPTR,#1638H;(DPH)-16H,(DPL)-38H

結(jié)果:(A)=30H

(DPTR)=1638H

圖3.1立即尋址示意圖

2.直接尋址

指令中含有操作數(shù)的地址,該地址指出了參與運(yùn)算或

傳送的數(shù)據(jù)所在的字節(jié)單元或位。直接尋址方式可訪問的存

儲(chǔ)空間包括特殊功能寄存器和片內(nèi)RAM的低128B。

(1)特殊功能寄存器:只能用直接尋址方式訪問,并且

特殊功能寄存器常以符號(hào)的形式表示。

(2)片內(nèi)RAM的低128B:52及以上子系列單片機(jī)的高

128B不能用直接尋址方式訪問,只能用后面提到的寄存器間

接尋址方式,因?yàn)楦?28B的編碼與特殊功能寄存器的地址重

疊。

【例】已知:(30H)二OAAH,執(zhí)行指令:

MOVA,30H;(A)-(30H)

MOVPS肌#20H;(PSW)-20H

結(jié)果:(A)=OAAH(PSW)二20H

第1條指令的功能是將片內(nèi)RAM的30H單元內(nèi)容“OAAH”

傳送到累加器(A)o第2條指令的功能是將立即數(shù)20H傳送給

特殊功能寄存器PSW。操作數(shù)采用直接尋址方式。第1條指令

尋址如圖3.2所示。

SFRROM

圖3.2指令MOVA,30H執(zhí)行于意圖

3.寄存器尋址

由指令指出某一個(gè)寄存器的內(nèi)容作為操作數(shù)。可以采

用寄存器尋址的寄存器有:

(1)工作寄存器R0?R7;組別的選擇由程序狀態(tài)字(PSW)

中的RSO、RS1決定;

(2)累加器(A);

(3)寄存器(B);

(4)數(shù)據(jù)指針(DPTR)。

【例】已知:(RO)二OAAH,執(zhí)行指令:

MOVA,RO;(A)—(RO)

指令碼為:E8H

結(jié)果:(A)二OAAH

該指令的功能是將R0中的內(nèi)容30H傳送到累加器(A)。

操作數(shù)采用寄存器尋址方式。尋址如圖3.3所示。

圖3.3指令MOVA,R0的執(zhí)行示意圖

4.寄存器間接尋址

指令中寄存器中存放的不是操作數(shù)而是操作數(shù)的地址,

操作數(shù)是通過寄存器間接得到的。而寄存器尋址中寄存器存

放的就是操作數(shù)。在間接尋址的寄存器前加前綴標(biāo)志“貯?

相區(qū)別。

寄存器間接尋址時(shí)訪問片內(nèi)RAM和片外RAM有一些區(qū)別:(

⑴片內(nèi)RAM:I

共有128B,采用形式為@R0、@R1或SP,訪問時(shí)用MOV操

作符。

(2)片外RAM:

最大容量64KB,尋址時(shí)由P2口提供高8位地址,RO、R1

提供低8位地址共同尋址64KB范圍;也可用16位的DPTR作寄

存器間接尋址64KB存儲(chǔ)空間,訪問時(shí)用MOVX操作符。

【例】已知:(RO)-OAAH,(OAAH)二5BH,執(zhí)行指令:

MOVA,?RO;A-((RO))

結(jié)果:(A)-5BH

該例中用寄存器間接尋址將片內(nèi)RAM中由RO的內(nèi)容為地

址所指示的單元的內(nèi)容傳送到累加器(A)。該指令的操作數(shù)

采用寄存器間接尋址方式,如圖3.4所示。

SFRROM

圖3.4指令MOVA,@R0的執(zhí)行示意圖

采用“MOVX”類操作的片外RAM的數(shù)據(jù)傳送指令如:

MOVXA,@R0

MOVXA,@DPTR

5.變址尋址

操作數(shù)地址=基址寄存器的內(nèi)容+變址寄存器的內(nèi)容。

>基址寄存器:程序計(jì)數(shù)器(PC)或數(shù)據(jù)指針(DPTR);

>變址寄存器:Ao

形成的地址是16位地址,這種尋址方式只能用來(lái)訪問

ROM的查表操作,所以變址尋址操作只有讀操作而無(wú)寫

操作。變址尋址指令操作符有M0VC查表指令。

【例】已知:(A)=08H,(DPH)=20H,(DPL)二OOH,即

(DPTR)二2000H,(2008H)=88H,執(zhí)行指令:

MOVCA,?A+DPTR

首先將DPTR的內(nèi)容2000H與累加器(A)的內(nèi)容08H相加,

得到地址2008H。然后將該地址的內(nèi)容88H取出傳送到累加器

(A),這時(shí),累加器(A)的內(nèi)容為88H,原來(lái)累加器(A)的內(nèi)容

08H被沖掉。如圖3.5所示。

SFRROM

另外兩條變址尋址指令為:

MOVCA,@A+PC;JMP@A+DPTR

【例】已知:(A)二30H,(1031H)=20H

執(zhí)行地址1000H處的指令:

1000H:MOVCA,?A+PC

這條指令占用一個(gè)單元,下一條指令的地址為1001H,

即執(zhí)行完本指令后(PC)二1001H,(PC)二1001H再加上累加

器(A)中的30H,指令執(zhí)行結(jié)果將ROM1031H的內(nèi)容20H傳

送給累加粳A),不改變程序計(jì)數(shù)器(PC)的內(nèi)容。示意圖

如囪3.6折不。

SFRROM

MOVCA,@A+PC

圖3.6指令MOVCA,@A+PC的執(zhí)行示意圖

【例】已知:(A)=08H,(DPTR)=2000H

執(zhí)行指令JMP@A+DPTR后,(PC)二2008H,程序從ROM

的2008H地址開始執(zhí)行。示意圖如圖3.7所示。

SFRROM

08H<—ACC(EOH)

20H<—DPH(83H)73HpJMP@A+DPTR

OOH<—DPL(82H)

指令執(zhí)行后PC=2008HOOH1NOP

PC=(A)+(DP1R)=2OO8H

程序轉(zhuǎn)到此處開始執(zhí)行

OFFFFHf

圖3.7指令JMP@A+DPTR的執(zhí)行示意圖

6.位尋址

指令中對(duì)數(shù)據(jù)位直接進(jìn)行操作。位尋址與直接尋

址不同,位尋址只給出位地址,而不是字節(jié)地址。可位

尋址區(qū)為:

(1)片內(nèi)RAM中的位尋址區(qū)20H?2FH,共16個(gè)單元,

128個(gè)位,位地址是00H?7FH。

(2)特殊功能寄存器(SFR)的可尋址位。習(xí)慣上可尋

址位常用符號(hào)位地址表示,如TI、RR

【例】執(zhí)行指令:

CLRACC.0

MOV30H,C

第1條指令的功能都是將累加器(ACC)的位。清“0”。第

2條指令的功能是把位累加器(注:在指令中用表示)的

內(nèi)容傳送到片內(nèi)RAM位地址為30H的單元。

7.相對(duì)尋址

轉(zhuǎn)移的目的地址可用如下公式表示:

B的地址二轉(zhuǎn)移指令下條指令地址+rel

此種尋址方式主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。

其中,rel是一個(gè)帶符號(hào)的8位二進(jìn)制數(shù),取值范圍

是-128?+127,以補(bǔ)碼形式置于操作碼之后。執(zhí)行

跳轉(zhuǎn)指令時(shí),先取出該指令,PC指向下一條指令地

址。再把rel的值加到PC上以形成轉(zhuǎn)移的目標(biāo)地

址。

【例】已知:(PC)=2000H執(zhí)行指令:

ORG2000H

2000HSJMP08H

2002HNOP

??????

200AHNOP

結(jié)果:程序轉(zhuǎn)移到200A處開始繼續(xù)執(zhí)行。因?yàn)椤癝JMP

08H”指令碼本身占2B,CPU執(zhí)行完該指令之后PC值已等于

下一條指令的地址即2002H,此時(shí)的PC值加上偏移量08H后

賦給PC,(PC)二200AH,程序轉(zhuǎn)到200AH處開始執(zhí)行。操作

示意圖如圖3.8所示。

ROM

圖3.8指令SJMPO8H的執(zhí)行示意圖

3.3MCS-51單片機(jī)指令系統(tǒng)

以MCS-51為內(nèi)核的單片機(jī)指令系統(tǒng)為例,用44種操

作碼助記符來(lái)描述33種操作功能,構(gòu)成了111條基本指令。

r單字節(jié)指令49條;

r按字節(jié)分1雙字節(jié)指令45條;

〔三字節(jié)指令17條;

r單周期指令64條;

J按指令執(zhí)行時(shí)間分雙周期指令45條;

ni條基本指令:14個(gè)機(jī)器周期指令2條;

f數(shù)據(jù)傳送類指令;

算術(shù)運(yùn)算類指令;

〔按功能分邏輯運(yùn)算及移位類指令;

控制轉(zhuǎn)移類指令;

布爾變量操作類指令。

3.3.1數(shù)據(jù)傳送類指令

。CPU在進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算時(shí)總需要有操作數(shù)

據(jù),所以數(shù)據(jù)傳送是一種最基本最主要的操作。在

MCS-51系列單片機(jī)中的數(shù)據(jù)傳送指令相當(dāng)豐富。數(shù)

據(jù)傳送指令按數(shù)據(jù)傳送的區(qū)域可分為3組:

>一組:內(nèi)部數(shù)據(jù)傳送;

>二組:與片外RAM或I/O接口之間的數(shù)據(jù)傳送;

?三組:ROM到累加器(A)的傳送。

3.3.1數(shù)據(jù)傳送類指令

1.片內(nèi)數(shù)據(jù)傳送

這組指令是實(shí)現(xiàn)片內(nèi)RAM之間數(shù)據(jù)交換的。這組指令共有7

種方式。

1)以累加器(A)為目的操作數(shù)的指令

操作符指令編碼指令功能

'Rn11101rrrB(A)<-(Rn)

direct11100101B(A)<-(direct)

MOVA,<

Ri1110011iB(A)<-((Ri))(

.#data

11100100B(A)<-data

這組指令的功能是把源操作數(shù)的內(nèi)容送入累加器(A)。

源操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和

立即尋址方式。

【例】執(zhí)行指令:

MOVA,R6;(A)-(R6),寄存器尋址

MOVA,70H;(A)-(70H),直接尋址

MOVA,?RO;(A)-((RO)),寄存器間接尋址(

MOVA,#78H;(A)<-78H,立即尋址

2)以Rn為目的操作數(shù)的指令

操作符指令編碼指令功能

[AlllllrrrB(Rn)—(A)

I

MOVRn,^directlOlOlrrrB(Rn)<—(direct

ci1〕1

IOllllrrrB(Rn)<-data

這組指令的功能是把源操作數(shù)的內(nèi)容送入當(dāng)前工作寄存

器區(qū)的R0?R7中的某一個(gè)寄存器。源操作數(shù)有寄存器尋址、

直接尋址和立即尋址等方式。

以Rn為目的操作數(shù)的指令如:

MOVR2,A;(R2)—(A),寄存器尋址

MOVR7,70H;(R7)—(70H),直接尋址

MOVR3,#0AH;(R3K0A0H,立即尋址

3)以寄存器間接地址為目的操作數(shù)的指令

操作數(shù)指令編碼指令功能

A

llllOlliB((Ri))—(A)

MOV@Ri,《direct

lOlOOlliB((Ri))<—(direct

#data

OlllOlliB((Ri))<—data

這組指令的功能是把源操作數(shù)內(nèi)容送入RO或R1指出

的存儲(chǔ)單元中。源操作數(shù)有寄存器尋址、直接尋址和立即

尋址等方式。

【例】執(zhí)行指令:

MOV@R1,A;((R1))—(A),寄存器尋址

MOV@R0,70H;((RO))—(70H),直接尋址

MOV@R1,#80H;((R1))<-80H,立即尋址

4)以直接地址為目的的操作數(shù)的指令

操作符指令編碼指令功能

fA11110101B(direct)(A)

RnlOlOlrrr-B(diret)<r-(Rn)

MOVdirect,〈direct1OOOO1O1B(direct)(direct)

@RilOOOOlliB

(direct)<—(Ri)

#dataO111O1O1B

(diret)<—(data)

這組指令的功能是把源操作數(shù)送入由直接地址指出的

存儲(chǔ)單元。

源操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即

尋址等方式。

【例】執(zhí)行指令:

MOVP1,A;(P1)—(A),直接尋址

MOV70H,R2;(70H)-(R2),寄存器尋址

MOVOEOH,78H;(OEOH)—(78H),直接尋址

MOV40H,@R0;(40H)一((R0)),寄存器間接尋址

MOV01H,#80H;(01H)-80H,立即尋址

Rn寄存器<----#data立即數(shù)

圖3.5內(nèi)部RAM間數(shù)據(jù)傳遞關(guān)系圖

5)16位數(shù)據(jù)傳送指令

操作數(shù)指令功能

MOVDPTR,#data16(DPTR)<-data16

這條指令的功能是把16位常數(shù)送入DPTR。16位的

DPTR由DPH和DPL組成,指令執(zhí)行結(jié)果把高位立即數(shù)送入

DPH,低位立即數(shù)送入DPL。

【例】執(zhí)行指令:

MOVDPTR,#1342H;

(DPH)-13H,(DPL)-42H,立即尋址

6)堆棧操作指令

堆棧操作是通過SP(堆棧指針寄存器)實(shí)現(xiàn)的,分為入

棧操作和出棧操作:

>入棧操作:把直接尋址單元的內(nèi)容傳送到SP所指的單元中;

>出棧操作:把SP所指單元的內(nèi)容送到直接尋址單元中。

開辟棧區(qū)通過向SP中送一個(gè)數(shù)。MCS-51單片機(jī)開機(jī)或

復(fù)位后(SP)二07H,一般需重新設(shè)定SP的初始值。SP的初始

值就是棧頂?shù)奈恢谩?/p>

堆棧指令有兩條,進(jìn)棧指令和出棧指令:

操作符指令編碼指令功能

PUSHdirect11000000B;入棧

POPdirect11010000B

□入棧指令PUSH:首先將棧頂指針(SP)加“1”,然后把直

接地址中的內(nèi)容傳送到SP尋址的片內(nèi)RAM單元中。

□出棧指令POP:將SP尋址的片內(nèi)RAM單元中的內(nèi)容送入直接

地址指出字節(jié)單元中,SP減“1”。

【例】已知:(A)二30H,(B)二70H執(zhí)行指令:

MOVSP,#60H;(SP)二60H設(shè)堆棧指針

PUSHACC;(SP)-(SP)+1,(SP)二61H,((SP))-(A)

PUSHB;(SP)-(SP)+1,(SP)二62H,((SP))-(B)

?結(jié)果:(61H)=30H,(62H)=70H,(SP)=62H.

POPB;(B)-((SP)),(SP)=(SP)-1,(SP)二61H

POPACC;(ACC)一((SP)),(SP)=(SP)-1,(SP)二60H

?結(jié)果:(B)二70H,(ACC)二30H,(SP)二60H

由于MCS-51單片機(jī)堆棧操作指令中的操作數(shù)只能使用直

接尋址方式,不能使用寄存器尋址方式,所以將累加器(A)

壓入堆棧時(shí),累加器(ACC)不能簡(jiǎn)寫A。堆棧操作時(shí)指令PUSH

和POP要成對(duì)出現(xiàn),且先后順序要相反排列,先進(jìn)后出,后

進(jìn)先出。

7)交換指令

操作符指令編碼指令功能

fRnllOOlrrrB(Rn)3(A)

I

XCHA,〈direct11OOO1O1B(direct)<->(A)

@Ri

llOOOlliB((Ri))3((A))

這組指令的功能是將累加器(A)的內(nèi)容和源操作數(shù)的

內(nèi)容相互交換。源操作數(shù)有寄存器尋址、直接地址尋址、

寄存器間接尋址。

【例】已矢口:(ACC)=80H,(R7)=08H,(40H)=0F0H,

(R0)=30H,(30H)=0FH,執(zhí)行指令:

XCHA,R7;(A)<-->(R7),寄存器尋址

XCHA,40H;(A)<-->(40H),直接地址尋址

XCHA,@R0;(A)<-->((R0)),寄存器間接尋址

?結(jié)果:(ACC)=OFH,(R7)=80H,

(40H)=08H,(R0)=30H,(30H)=0FH

?操作符指令編碼指令功能

XCHDA,@RillOlOlliB(A300、,C口『)

這條指令是低半字節(jié)交換指令,將累加器(A)的內(nèi)容和

避操數(shù)內(nèi)容的低半字節(jié)相互交換。它們各自的高半字節(jié)都不

受影響。

【例】已矢口:(ACC)=0FH,(R0)=30H,(30H)=0F0H

執(zhí)行指令:

XCHDA,@R0;(ACC3-0)《-->((Ri)3~0)

?結(jié)果:(ACC)=00H,(R0)=30H,(30H)=0FFH

操作符指令編碼指令功能

SWAPA11000010B(A3?0)一(A7?4)

這條指令將累加器(A)的高半字節(jié)(A7?4)和低半字節(jié)

(A3?0)互換。

【例】已知:(A)=0C5H執(zhí)行指令:

SWAPA

結(jié)果:(A)=5CH

2.累加器(A)與片外RAM或I/O接口的數(shù)據(jù)傳送指令

操作符指令編碼指令功能

[A,@DPTR111OOOOOB(A)一((DPTR))

((Ri))

A,@Ri1llOOOOiB

M0VX\

((DPTR))(A)

|@DPTR,A11110000B

((Ri))(A)

@Ri,A1lllOOliB

>片外RAM和I/O端口只能和累加器(A)進(jìn)行一個(gè)8位數(shù)據(jù)傳送。

>由DPTR間接尋址時(shí),DPTR的DPH和DPL分別從P2端口和P0端口輸

出組成16位地址,并由ALE信號(hào)將P0端口信號(hào)(低八位地址)鎖

存在地址鎖存器中。

由RO、R1進(jìn)行間接尋址時(shí),高8位地址在P2口中,由P2口輸

出;低8位地址在R0或R1中,由P0口輸出,組成16位地址,

并由ALE信號(hào)鎖存在地址鎖存器中。

向累加器(A)傳送數(shù)據(jù)時(shí)MCS-51單片機(jī)P3.7產(chǎn)生信號(hào)RD選

通片外RAM或I/O口;

累加壑A)向片外RAM或1/端口傳送數(shù)據(jù)時(shí)MCS-51單片機(jī)P3.7

產(chǎn)生西信號(hào)選通片外RAM或I/O口。

【例】已知:(DPTR)=3000H,(3000H)=30H,執(zhí)行命令:

MOVXA,@DPTR;(A)一((DPTR)),寄存器間接尋址

?結(jié)果:(A)=30H

【例】已知(P2)=20H,(R1)=48H,(A)=66H,執(zhí)行命令:

MOVX@R1,A;(R1))—(A),寄存器尋址

?結(jié)果:(2048H)=66H

3,只讀存儲(chǔ)器(ROM)到累加器(A)的傳送

操作符指令編碼指令功能

(PC)—(PC)+1

@A+PC10000011B

MOVCA,《(A)—((A)+(PC))

@A+DPTR10010011B(A)<-((A)+(DPTR))

a這兩條指令主要用于ROM的查表,只能讀,不能寫。

>以程序計(jì)數(shù)器(PC)內(nèi)容為基址時(shí):(PC)-(PC)+L以加“1”

后的當(dāng)前值和累加器(A)的變址相加形成ROM源操作數(shù)地址,

然后將其地址內(nèi)容送累加器(A)o

>以DPTR內(nèi)容為基址時(shí):DPTR的內(nèi)容和累加器(A)的內(nèi)容作16

位無(wú)符號(hào)數(shù)相加形成ROM源操作數(shù)地址,然后將其地址內(nèi)容

送累加器(A)。

【例】已知:(PC)=1000H,(A)=3OH,(1031H)二12H,執(zhí)行指令:

MOVCA,?A+PC

?結(jié)果:(A)=12H(PC)=1OO1H

【例】已知:(DPTR)二8100H,(A)=40H(8140H)=0ABH執(zhí)行指

令:

MOVCA,?A+DPTR

?結(jié)果:(A)=OABH(DPTR)=8100H

?:?使用這兩條查表指令時(shí)要注意,指令執(zhí)行完后不改變程序計(jì)

數(shù)器(PC)和DPTR的內(nèi)容,但是改變累加器(A)的內(nèi)容。

以程序計(jì)數(shù)器(PC)內(nèi)容為基址,地址改變量?jī)H有8位,查表

的尋址空間只在該條查表指令的以下256B之內(nèi),表格只能被

一段程序使用。

以DPTR內(nèi)容為基址,地址改變量有16位,查表可以在64KB程

序存儲(chǔ)空間尋址,并且表格可以被各個(gè)程序塊公用。

3.3.2笆3術(shù)運(yùn)算類指令

。算術(shù)運(yùn)算指令多數(shù)以累加器(A)為目的操作數(shù)。算

術(shù)運(yùn)算指令大多數(shù)影響程序狀態(tài)字(PSW)。主要分

為以下幾類:

加法指令、減法指令、乘法指令、除法指令、

加“1”指令、減“1”指令、十進(jìn)制調(diào)整指令。

1.不帶進(jìn)位的加法指令

操作符指令編碼指令功能

f#data00100100B(A)<-(A)+data

(A)<-(A)+(direct)

direct00100101B

ADDA,〈

(A)<-(A)+((Ri))

|eRiOOlOOlliB

(A)<-(A)+(Rn)

RnOOlOlrrrB

這組指令采用立即數(shù)、直接地址、間接地址以及寄存器尋址方

式將其內(nèi)容與累加器(A)內(nèi)容相加,結(jié)果送入累加器(A)中。

>若結(jié)果的最高位D7有進(jìn)位輸出,則將進(jìn)位標(biāo)志位(CY)置

“1”,否則將CY清“0”;

>若D3有進(jìn)位輸出,將輔助進(jìn)位標(biāo)志位(AC)置“1”,否則將

AC清“0”;

>若D6有進(jìn)位輸出而D7沒有或者D7有進(jìn)位輸出D6沒有,將溢

出標(biāo)志位OV置“1”,否則將(0V)清“0”;

奇偶標(biāo)志位(P)隨累加器(A)中1的個(gè)數(shù)的奇偶性變化。

【例】已知:(A)=53H,(RO)=OFCH,執(zhí)行指令:

ADDA,RO

?結(jié)果:(A)=4FHCY=1AC=0OV=0P=1

【例】已知:(A)=85H,(R0)=20H,(20H)=0AFH,執(zhí)行指

令:

ADDA,@R0

?結(jié)果:(A)=34HCY=1AC=1OV=1P=1

*2.帶進(jìn)位的加法指令

操作符指令編碼指令功能

fRnOOlllrrrB(A)<-(A)+(Rn)+(c)

(A)<-(A)+(direct)+(C)

directOO11O1O1B

ADDCA,\

|@RiOOllOlliB(A)<-(A)+((Ri))+(C)

#dataOO11O1OOB(A)<-(A)+data+(C)

這組指令對(duì)程序狀態(tài)字(PSW)的影響和指令的尋址方式都與

ADD指令相同。

這組帶進(jìn)位加法指令是同時(shí)把所指出的字節(jié)變量、進(jìn)

位標(biāo)志與累加器(A)內(nèi)容相加,結(jié)果留在累加器(A)中。

【例】已知:(A)=85H(20H)二OFFHCY-1,執(zhí)行指令:

ADDCA,20H

?結(jié)果:(A)二85HCY=1AC=10V二0P二1

。3.帶借位的減法指令

操作符指令編碼指令功能

lOOllrrrB

fRn(A)<-(A)-(Rn)-(C)

1OO1O1O1B

direct(A)<-(A)-(direct)-(C)

SUBBA,{

|@RilOOlOlliB(A)<-(A)-((Ri))-(C)

#data10010100B(A)<-(A)-data-(C)

>帶借位減法指令從累加器(A)中減去指定的變量和進(jìn)位標(biāo)志,

結(jié)果存在累加器(A)中。

>源操作數(shù)采用了寄存器尋址、直接尋址、寄存器間接尋址和

立即尋址的尋址方式。

>如果累加器(A)中的最高位D7需借位則將進(jìn)位標(biāo)志位(CY)置

“1”,否則將CY清“0”;

>如果D3需借位將輔助進(jìn)位標(biāo)志位(AC)置“1",否則將AC清

“0”;

>如果D7需借位而D6不需借位或D6需借位而D7不需借位將溢出

標(biāo)志位(OV)置“1”,否則清“0”;

>奇偶標(biāo)志位(P)隨著累加器(A)中“1”的個(gè)數(shù)而變化。

£4,加“1”指令

操作符指令編碼指令功能

fA00000100B(A)<-(A)+1

I

?Rn00001rrrB(Rn)<-(Rn)+1

工NC〈diirec:七00000101B(direct)<-(direct)+1

?@Ri00000111B((Ri))—((Ri))+1

IDPTR10100011B(DPTR)<-(DPTR)+1

>這條指令把所指的寄存器內(nèi)容加"I",結(jié)果仍送回原寄存器。

>源操作數(shù)采用了直接尋址、寄存器尋址、寄存器間接尋址的

尋址方式。

>當(dāng)所尋址的寄存器不是累加器(A)或程序狀態(tài)字(PSW)時(shí),不

影響任何標(biāo)志,否則將對(duì)標(biāo)志位影響。

>若直接地址是I/O口,則CPU進(jìn)行“讀一修改一寫”操作,

不是從引腳讀入。其功能是先讀入端口鎖存器的內(nèi)容,然后

在CPU中力口“1”,繼而輸出到端口。

【例】已知:(A)=OFFH,(R3)=0FH,(30H)=0F1H,(R0)=40H,

(40H)=01H,(DPTR)=1235H執(zhí)行如下指令:

INCA

INCR3

INC30H

INC@R0

INCDPTR

?結(jié)果:(A)=OOH(R3)=10H(30H)=0F2H

(40H)=02H(DPTR)=1236HPSW中僅P改變

3.3.2算術(shù)運(yùn)算類指令

?5,減“1”指令

操作符指令編碼指令功能

fA00010100B(A)~(A)-1

@RiOOOlOlliB((Ri))—((Ri))-1

DEC〈

|direct00010101B(direct)<-(direct)-1

RnOOOllrrrB(Rn)-(Rn)-1

這條指令把所指的寄存器內(nèi)容減“1”,結(jié)果仍送回原寄存器。

>源操作數(shù)采用了直接尋址、寄存器尋址、寄存器間接尋址的

尋址方式。

>當(dāng)所尋址的寄存器不是累加器(A)或程序狀態(tài)字(PSW)時(shí),不

影響任何標(biāo)志位,否則將影響標(biāo)志位。

>若直接地址是I/O端口,貝IJCPU進(jìn)行“讀一修改一寫”操作,

不是從引腳讀入。其功能是先讀入接口鎖存器的內(nèi)容,然后

在CPU中減“1”,繼而輸出到端口。

【例】已知:(A)=OFH(R7)=19H,(30H)=00H,(R1)=40H,

(40H)=0FFHo執(zhí)行指令:

DECA

DECR7

DEC30H

DEC@R1

?結(jié)果:(A)=OEH(R7)=18H(30H)=0FFH

(40H)=0FEHP=1PSW其他位不變

6.乘法指令

操作符指令編碼指令功能

MULAB10100100B(B)(A)一(A)x(B)

>這條指令把累加器(A)和寄存器(B)中的無(wú)符號(hào)8位整數(shù)相乘,

其16位積的低8位存放在累加器(A)中,高8位存在寄存器(B)

中。

>如果積大于OFFH,則將溢出標(biāo)志位(0V)置“1",否則0V清

“0”。進(jìn)位標(biāo)志位(CY)總為“0”。

【例】已知:(A尸50H,(B)=0A0H,執(zhí)行指令:

MULAB

?結(jié)果:(B)=32H(A)=00H即積為3200H

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論