




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 一年級(jí)語(yǔ)文下冊(cè) 第三單元 語(yǔ)文園地配套教學(xué)設(shè)計(jì) 新人教版
- 七年級(jí)語(yǔ)文上冊(cè) 第三單元 11《禮物》教學(xué)設(shè)計(jì) 冀教版
- 三年級(jí)道德與法治上冊(cè)教案(部編版)
- 人教部編版六年級(jí)下冊(cè)魯濱遜漂流記第一課時(shí)教案
- 九年級(jí)體育 第17周 第34次課教學(xué)設(shè)計(jì)
- 六年級(jí)下科學(xué)教案飛速發(fā)展的信息技術(shù)-青島版
- 七年級(jí)信息技術(shù)上學(xué)期 第十二課畫圖軟件使用技巧 教學(xué)設(shè)計(jì)
- 2024兵器裝備集團(tuán)中國(guó)長(zhǎng)安春季校園招聘筆試參考題庫(kù)附帶答案詳解
- 九年級(jí)物理上冊(cè) 11.1怎樣才叫做功教學(xué)設(shè)計(jì) (新版)粵教滬版
- 三年級(jí)數(shù)學(xué)上冊(cè) 二 千克和克第1課時(shí) 認(rèn)識(shí)千克教學(xué)設(shè)計(jì) 蘇教版
- 2024年環(huán)境保護(hù)工作責(zé)任制度(4篇)
- 【MOOC】大學(xué)公共體育-華南理工大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 通訊設(shè)備故障處理預(yù)案
- 帝豪EV450維修手冊(cè)
- 旅游專業(yè)模擬考試題(含參考答案)
- 數(shù)字經(jīng)濟(jì)學(xué)-教學(xué)案例及答案 唐要家
- 零食股東店合作協(xié)議書范文范本
- V帶傳動(dòng)設(shè)計(jì)說(shuō)明書
- 道路建設(shè)工程施工招投標(biāo)書范本
- 氣管插管脫管的應(yīng)急預(yù)案演練腳本
- 2024版合同及信息管理方案
評(píng)論
0/150
提交評(píng)論