版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章
AT89S51單片機(jī)的
指令系統(tǒng)
1AT89S51單片機(jī)使用MCS-51指令系統(tǒng)。介紹指令系統(tǒng)尋址方式對(duì)111條基本指令按功能分類(lèi)詳細(xì)講解。掌握匯編語(yǔ)言指令是程序設(shè)計(jì)的基礎(chǔ)。內(nèi)容概要23.1指令系統(tǒng)概述1.特性:
1)51單片機(jī)的指令集為復(fù)雜指令集。2)AT89S51在硬件結(jié)構(gòu)中有一個(gè)位處理機(jī),一個(gè)處理位變
量的指令子集。2.分類(lèi)
1)按所占字節(jié)分,分三種:
(1)單字節(jié)指令49條;
(2)雙字節(jié)指令45條;
(3)三字節(jié)指令17條。2)執(zhí)行時(shí)間來(lái)分,分三種:
(1)1個(gè)機(jī)器周期(12個(gè)時(shí)鐘振蕩周期)的指令64條;
(2)2個(gè)機(jī)器周期指令45條;
(3)4個(gè)機(jī)器周期——乘、除指令。33.2指令格式
1.定義
指令格式:指令的表示方法。2.指令的組成
指令通常由兩部分組成:操作碼和操作數(shù)。
操作碼——指令進(jìn)行什么操作。
操作數(shù)——指令操作的對(duì)象。
★注意:操作數(shù)可能是具體數(shù)據(jù),也可能是指出到哪里
取得數(shù)據(jù)的地址或符號(hào)。43.不同長(zhǎng)度指令的格式(1)單字節(jié)指令:操作碼和操作數(shù)同在一個(gè)字節(jié)中。
MOVA,Rn
RnAE8H(2)雙字節(jié)指令:一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù)。
MOVA,#dataMOVA,directE5H,direct
(3)三字節(jié)指令:操作碼占一個(gè)字節(jié),操作數(shù)占二個(gè)字節(jié)。
5dataA74H,dataMOVdirect1,direct2*direct2*direct185H,direct1,direct2*direct1A3.3指令系統(tǒng)的尋址方式1.概念:
尋址方式——在指令中說(shuō)明操作數(shù)所在位置的方法??刂破髯x入指令解析指令取操作數(shù)執(zhí)行存運(yùn)算結(jié)果操作數(shù)在哪里取呢?操作數(shù)存到哪里呢?62.概述
總的來(lái)說(shuō),在指令中以以下四種方式給出操作數(shù)的信息:1)把操作數(shù)直接放在到指令中:告訴CPU,操作數(shù)就在指令中,無(wú)需到其他地方尋找;
2)把裝有操作數(shù)的寄存器放在指令中:告訴CPU,操作數(shù)在某個(gè)寄存器中,去寄存器中取就可以;
3)把操作數(shù)的地址直接放在指令中:告訴CPU,操作數(shù)的地址就在指令中,按該地址取數(shù)就可以;
4)把裝有操作數(shù)地址的寄存器放在指令中:告訴CPU,操作數(shù)的地址在某個(gè)寄存器中,按該地址取數(shù)就可以;對(duì)以上四種方式,稍加變化,再配合以不同的指令,最終形成51單片機(jī)的7種尋址方式。3.3指令系統(tǒng)的尋址方式73.尋址方式介紹1)學(xué)習(xí)內(nèi)容
★每一種尋址方式的書(shū)寫(xiě)語(yǔ)法;★每一種尋址方式的尋址范圍(片內(nèi)/外ROM、片內(nèi)/外RAM、SFR、位訪(fǎng)問(wèn)區(qū)、片外設(shè)備寄存器)。
注意:每一種尋址方式,都有特定的尋址范圍,不可能是每一種尋址方式都能訪(fǎng)問(wèn)到每一個(gè)地址空間;
同一種尋址方式,配合以不同的指令,尋址范圍可能不同。2)寄存器尋址方式
含義:指令中的操作數(shù)放在某一寄存器中,CPU應(yīng)在指定的寄存器中去讀取\寫(xiě)入操作數(shù)。
例如:MOV A,Rn
;(Rn)→A,n=0~78
語(yǔ)法:將寄存器名稱(chēng)寫(xiě)在指令中;
尋址范圍:
ABR0-R7
PCDPTRC(位)3)直接尋址方式含義:指令直接給出操作數(shù)的地址(8位)。一般性說(shuō)明中直接尋址方式的8位地址用“direct”
表示。
語(yǔ)法:直接把表示地址的8位二進(jìn)制數(shù)寫(xiě)在指令中。
例:
MOV A,direct
“direct”就是操作數(shù)的單元地址。
例:
MOV A,40H
表示把內(nèi)部RAM40H單元的內(nèi)容傳送到A。
源操作數(shù)(右邊的操作數(shù))采用的是直接尋址方式。目的操作數(shù)(左邊的操作數(shù))采用的是寄存器尋址方式。
9例:MOV42H,62H
把片內(nèi)RAM中62H單元的內(nèi)容送到片內(nèi)RAM中的42H單元中。
尋址范圍:所有SFR.訪(fǎng)問(wèn)片內(nèi)所有SFR的唯一尋址方式。
片內(nèi)RAM.
4)寄存器間接尋址方式
含義:操作數(shù)地址在指定的寄存器中,要先從寄存器中找
到操作數(shù)的地址,再按該地址找到操作數(shù)。
語(yǔ)法:在寄存器名稱(chēng)前面加前綴標(biāo)志“@”。以區(qū)分寄存器尋址和寄存器間接尋址。
能用于該尋址方式的寄存器只有R0、R1、DPTR.
例:
MOVA,@Ri
;i=0或1
若Ri的內(nèi)容為40H,即把內(nèi)部RAM40H地址單元中的
內(nèi)容傳送給A。10尋址范圍:
★當(dāng)寄存器間接尋址用于MOVX指令時(shí),訪(fǎng)問(wèn)的是片外數(shù)據(jù)存儲(chǔ)器空間;★用于其它指令時(shí),訪(fǎng)問(wèn)的是片內(nèi)數(shù)據(jù)存儲(chǔ)器單元?!顳PTR只能用于對(duì)片外數(shù)據(jù)存儲(chǔ)器的寄存器間接尋址。5)立即數(shù)尋址方式
含義:操作數(shù)直接包含在指令中,也稱(chēng)立即數(shù)。
語(yǔ)法:
在操作數(shù)前加前綴標(biāo)志“#”??膳c直接尋址指令中的直接地址加以區(qū)別,
例如:
MOVA,#40H將40H放入累加器A中
尋址范圍:程序存儲(chǔ)器中的常數(shù)。116)基址寄存器加變址寄存器間址尋址方式
含義:以DPTR或PC作為基址寄存器,以累加器A作為變址寄存器
,以?xún)烧邇?nèi)容相加形成的16位地址作為目的地址進(jìn)行尋
址。
語(yǔ)法:使用本尋址方式的指令只有3條:
MOVC A,@A+DPTR MOVCA,@A+PC JMP @A+DPTR
例:
MOVC A,@A+DPTR
其中,(A)=05H,(DPTR)=0400H,指令執(zhí)行結(jié)
果是把程序存儲(chǔ)器0405H單元的內(nèi)容傳送給A。12尋址范圍:前兩條指令適用于讀程序存儲(chǔ)器中固定的數(shù)據(jù)。
第3條為散轉(zhuǎn)指令,A中內(nèi)容為程序運(yùn)行后的動(dòng)態(tài)結(jié)果
,可根據(jù)A中不同內(nèi)容,實(shí)現(xiàn)跳向不同程序入口的跳轉(zhuǎn)。7)相對(duì)尋址方式含義:指令(機(jī)器碼)中出現(xiàn)的是程序要跳轉(zhuǎn)到的指令的位置和程序當(dāng)前位置之間的字節(jié)數(shù)。語(yǔ)法:直接在指令中寫(xiě)出程序要跳轉(zhuǎn)到的指令的地址(以標(biāo)號(hào)形式給出)。13
該尋址方式是專(zhuān)門(mén)用于跳轉(zhuǎn)指令的,偏移量由匯編程序自動(dòng)計(jì)算和填入。
例:
SJMPLOOP
“LOOP”為目的地址標(biāo)號(hào)。
注意:偏移量rel是帶符號(hào)8位二進(jìn)制補(bǔ)碼數(shù),–128~+127
。由匯編器計(jì)算和填入。按如下公式計(jì)算:14Rel=目的地址-轉(zhuǎn)移指令所在的地址-轉(zhuǎn)移指令字節(jié)數(shù)標(biāo)號(hào)1,2,3尋址范圍:程序存儲(chǔ)器。7.位尋址方式
含義:對(duì)內(nèi)部RAM和特殊功能寄存器具有位尋址功能的某位
內(nèi)容進(jìn)行置1和清0操作。語(yǔ)法:位地址一般以直接位地址給出,一般性說(shuō)明中位地
址符號(hào)為“bit”。
例:MOVC,bit
其具體指令:MOVC,40H
把位地址為40H單元的值送到位累加器C。尋址范圍:
內(nèi)部RAM和SFR中可為尋址的區(qū)域。15問(wèn)題:當(dāng)一條指令給定后,如何來(lái)確定該指令的尋址方式?
例如:
MOVA,#40H,屬于立即數(shù)尋址還是寄存器尋
址?
要看以哪個(gè)操作數(shù)作為參照系。
操作數(shù)分為源操作數(shù)和目的操作數(shù)。對(duì)于
源操作數(shù)“#40H”來(lái)說(shuō),是“立即數(shù)尋址”方式,
但對(duì)目的操作數(shù)“A”來(lái)說(shuō),是屬于“寄存器尋址”
方式。
一般而言,指令的尋址方式指的是源操作數(shù),
以此例為立即數(shù)尋址方式。1617序號(hào)尋址方式尋址空間1寄存器尋址R0~R7、A、B、C(位)、DPTR、PC2直接尋址內(nèi)部128字節(jié)RAM、特殊功能寄存器3寄存器間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器、片外數(shù)據(jù)存儲(chǔ)器4立即數(shù)尋址程序存儲(chǔ)器中的立即數(shù)5基址寄存器加變址寄存器間接尋址讀程序存儲(chǔ)器固定數(shù)據(jù)和程序散轉(zhuǎn)6相對(duì)尋址程序存儲(chǔ)器相對(duì)轉(zhuǎn)移7位尋址內(nèi)部RAM中的可尋址位、SFR中的可尋址位表3-17種尋址方式及其尋址空間3.4AT89S51指令系統(tǒng)分類(lèi)介紹共111條指令,按功能分為五類(lèi):(1)數(shù)據(jù)傳送類(lèi)(28條)(2)算術(shù)運(yùn)算類(lèi)(24條)(3)邏輯操作類(lèi)(25條)(4)控制轉(zhuǎn)移類(lèi)(17條)(5)位操作類(lèi)(17條)先簡(jiǎn)單介紹指令用到的符號(hào)。Rn
當(dāng)前寄存器區(qū)的8個(gè)工作寄存器R0~R7(n=0~7)。Ri
當(dāng)前寄存器區(qū)中作為間接尋址寄存器的2個(gè)寄存器R0、R1(i=0,1)。1819direct8位直接地址,即內(nèi)部RAM單元或SFR的地址。#data指令中的8位立即數(shù)。#data16指令中的16位立即數(shù)。rel偏移量,8位的帶符號(hào)補(bǔ)碼數(shù)。DPTR數(shù)據(jù)指針,可用作16位數(shù)據(jù)存儲(chǔ)器單元地址的寄存器。bit內(nèi)部RAM或特殊功能寄存器中的直接尋址位的地址。C或Cy進(jìn)位標(biāo)志位或位處理機(jī)中的位累加器。addr1111位目的地址。addr1616位目的地址。@間接尋址寄存器前綴,如@Ri,@A+DPTR。(х)表示х地址單元或寄存器中的內(nèi)容。((х))表示以х單元或寄存器中的內(nèi)容作為地址間接尋址單元的內(nèi)容?!^右邊的內(nèi)容被箭頭左邊的內(nèi)容所取代。指令的構(gòu)成四種基本形式:助記符操作數(shù)1,操作數(shù)2,操作數(shù)3
助記符操作數(shù)1,操作數(shù)2助記符操作數(shù)1助記符★助記符:由英文字母組成,表示指令的基本功能★操作數(shù):指令需要處理的數(shù)據(jù)。按七種不同的尋址方式表達(dá)。
注意:相同的助記符,其后的操作數(shù)采用的尋址方式不同,所生成的機(jī)器代碼是不同的。
201.助記符的基本書(shū)寫(xiě)格式;2.指令的基本功能;3.操作數(shù)的尋址方式;4.指令的尋址范圍;5.指令執(zhí)行后對(duì)相關(guān)標(biāo)志位的影響;6.了解指令生成的機(jī)器碼的大致情況;7.運(yùn)算結(jié)果是否保存,保存在哪里。指令學(xué)習(xí)的基本內(nèi)容21概述
數(shù)據(jù)傳送類(lèi)指令,按照基本功能的不同,包含如下幾類(lèi):
一般數(shù)據(jù)傳送類(lèi)指令MOV
堆棧操作類(lèi)指令PUSHPOP
外部數(shù)據(jù)傳送指令MOVX
查表指令MOVC
字節(jié)交換指令XCH
半字節(jié)交換指令XCHD
3.4.1數(shù)據(jù)傳送類(lèi)指令223.4.1數(shù)據(jù)傳送類(lèi)指令
1.一般數(shù)據(jù)傳送類(lèi)指令
通用格式:MOV<目的操作數(shù)>,<源操作數(shù)>
基本功能:
把源操作數(shù)傳送到目的操作數(shù)。指令執(zhí)行之后,源
操作數(shù)不改變,目的操作數(shù)修改為源操作數(shù)。所以數(shù)
據(jù)傳送類(lèi)操作屬“復(fù)制”性質(zhì),而不是“搬家”。指令對(duì)標(biāo)志位的影響:
不影響標(biāo)志位:Cy、Ac和OV;影響的標(biāo)志位:奇偶標(biāo)志位P。231)以累加器為目的操作數(shù)的指令
MOV A,Rn
;
(Rn)→A,n=0~7E8H~EFH
MOV A,@Ri
;((Ri))→Ai=0,1
E6H~E7H MOV A,direct ;
(direct)→AE5H,direct MOV A,#data ;
#data→A74H,data
把源操作數(shù)內(nèi)容送累加器A,源操作數(shù)有寄存器尋址、直接尋址、間接尋址和立即數(shù)尋址等方式.
例
(R6)=50H(R0)=30H(30H)=01H(70H)=FFH MOV A,R6 ; MOV A,@R0 ; MOV A,70H ; MOV A,#78H ;24(R6)→A,寄存器尋址
(A)=50H((R0))→A,間接尋址
(A)=
01H(70H)→A,直接尋址
(A)=FFH78H→A,立即數(shù)尋址
(A)=78H
2)以Rn為目的操作數(shù)的指令 MOVRn
,A ;(A)→Rn
,n=0~7 MOVRn
,direct ;(direct)→Rn
,n=0~7 MOVRn
,#data ;#data→Rn
,n=0~7把源操作數(shù)送入當(dāng)前寄存器區(qū)的R0~R7中的某一寄存器。3)以直接地址direct為目的操作數(shù)的指令 MOVdirect,A ;(A)→direct MOVdirect,Rn
;(Rn)→direct,n=0~7
MOVdirect1,direct2;(direct2)→direct1 MOVdirect,@Ri
;((Ri))→direct,i=0,1 MOVdirect,#data;
#data→direct25
把源操作數(shù)送入直接地址指定的存儲(chǔ)單元。direct指的是內(nèi)部RAM或SFR地址。4)以寄存器間接地址為目的操作數(shù)的指令
MOV @Ri,A ;(A)→((Ri)),i=0,1 MOV @Ri,direct;(direct)→((Ri)),i=0,1 MOV @Ri,#data;#data→((Ri)),i=0,1功能是把源操作數(shù)內(nèi)容送入R0或R1指定的存儲(chǔ)單元中。5)16位數(shù)傳送指令
MOV DPTR,#data16;
#data16→DPTR
功能是把16位立即數(shù)送入DPTR,用來(lái)設(shè)置數(shù)據(jù)存儲(chǔ)器的地址指針。26
注意:1)AT89S51有兩個(gè)DPTR,通過(guò)設(shè)置特殊功能寄存器
AUXR1中的DPS位來(lái)選擇。當(dāng)DPS=1,則指令中的
DPTR即為DPTR1,DPTR0被屏蔽,反之亦然。2)DPTR為16位的數(shù)據(jù)指針,分為DPH和DPL。操作十
分靈活方便。設(shè)有兩個(gè)DPTR后,就可避免頻繁的
出入堆棧操作。
問(wèn)題:指令中只能出現(xiàn)DPTR,但如果要把它作為兩個(gè)八位的寄存器使用,該如何做呢?272.堆棧操作指令
堆棧的概念:
內(nèi)部RAM中設(shè)定一個(gè)后進(jìn)先出,向上生長(zhǎng)的區(qū)域,稱(chēng)為堆棧。
在特殊功能寄存器中有一個(gè)堆棧指針SP,指示堆棧的棧頂位置。
堆棧操作有進(jìn)棧和出棧兩種,因此,在指令系統(tǒng)中相應(yīng)有兩條堆棧操作指令。280SP123進(jìn)棧0123出棧SPSPSPSPSPSPSP(1)進(jìn)棧指令
PUSH direct
首先將堆棧指針SP加1,然后把direct中的內(nèi)容送到SP指示的內(nèi)部RAM單元中。
例:當(dāng)(SP)=60H,(A)=30H,(B)=70H時(shí),執(zhí)行下列指令
PUSH Acc
注意:Acc在這里是直接尋址,機(jī)器碼:C0H,E0H
功能:(SP)+1=61H→SP,(A)→61H
結(jié)果:SP=61H,(61H)=30H PUSH B 注意:B在這里是直接尋址,機(jī)器碼:C0H,F0H
功能:(SP)+1=62H→SP,(B)→62H
結(jié)果:SP=62H,(62H)=70H29(2)出棧指令
POP direct
將SP指示的棧頂單元的內(nèi)容送入direct字節(jié)中,SP減1。
例:當(dāng)(SP)=62H,(62H)=70H,(61H)=30H時(shí),執(zhí)行指令
POPDPH ;((SP))→DPH,(SP)-1→SP
結(jié)果:(DPH)=(62H)=70HSP=61H POPDPL ;((SP))→DPL,(SP)-1→SP
結(jié)果:
(DPl)=(61H)=30H,(SP)=60H。3.累加器A與外部數(shù)據(jù)存儲(chǔ)器RAM/IO傳送指令
MOVXA,@DPTR ;((DPTR))→A,讀外部RAM/IO MOVXA,@Ri
;((Ri))→A,讀外部RAM/IO MOVX@DPTR,A
;(A)→((DPTR)),寫(xiě)外部RAM/IO MOVX@Ri
,A
;(A)→((Ri)),寫(xiě)外部RAM/IO30
說(shuō)明:MOV的后面加“X”,表示訪(fǎng)問(wèn)的是片外RAM或I/O口,在執(zhí)行前兩條指令,
(P3.7)有效;后兩條指令,
(P3.6)有效。
尋址范圍:
采用16位的
DPTR間接尋址,可尋址整個(gè)64KB片外數(shù)據(jù)存儲(chǔ)器空間,高8位地址(DPH)由P2口輸出,低8位地址(DPL)由P0口輸出。
采用Ri(i
=0,1)進(jìn)行間接尋址,可尋址片外256個(gè)單元的數(shù)據(jù)存儲(chǔ)器。8位地址(Ri)由P0口輸出,鎖存在地址鎖存器中,然后P0口再作為8位數(shù)據(jù)口。314.查表指令特性:
★共兩條,僅有的兩條讀程序存儲(chǔ)器中表格數(shù)據(jù)的指令。
★傳送為單向,從程序存儲(chǔ)器中讀出數(shù)據(jù)到A中;
★
兩條查表指令的源操作數(shù)均采用基址寄存器加變址寄存器
間接尋址方式。32(1)MOVC A,@A+PC
以PC作為基址寄存器,A為變址寄存器,A的內(nèi)容(無(wú)符號(hào)數(shù))和PC的當(dāng)前值(下一條指令的起始地址)相加后得到一個(gè)新的16位地址,把該地址的內(nèi)容送到A。
例如:當(dāng)
(A)=30H時(shí),執(zhí)行地址1000H處的查表指令:
1000H:
MOVC A,@A+PC該指令占用一個(gè)字節(jié),下一條指令的地址為1001H(PC當(dāng)前值)(PC)=1001H再加上A中的30H,得1031H,結(jié)果把程序存儲(chǔ)器中1031H的內(nèi)容送入累加器A。33優(yōu)點(diǎn):不改變特殊功能寄存器及PC的狀態(tài),根據(jù)A的內(nèi)容就
可以取出表格中的常數(shù)。缺點(diǎn):1)表格只能存放在該條查表指令所在地址的+256個(gè)
單元之內(nèi),表格大小受到限制;
2)且表格只能被一段程序所用。(2)MOVCA,@A+DPTRDPTR為基址寄存器,A的內(nèi)容(無(wú)符號(hào)數(shù))和DPTR的內(nèi)容相加得到一個(gè)16位地址,把由該地址指定的程序存儲(chǔ)器單元的內(nèi)容送到累加器A。34
例:(DPTR)=8100H,(A)=40H,執(zhí)行指令
MOVC A,@A+DPTR
將程序存儲(chǔ)器中8140H單元內(nèi)容送入A中。
★應(yīng)用本指令,表格的大小和位置可以在64KB程序存儲(chǔ)器
空間中任意安排。
★
一個(gè)表格可以為各個(gè)程序塊公用。
★
執(zhí)行上述兩條指令時(shí),單片機(jī)的
引腳信號(hào)(程序
存儲(chǔ)器讀)有效。
355.字節(jié)交換指令XCHA,Rn
;
(A)(Rn),n=0~7XCHA,direct ;
(A)(direct)XCHA,@Ri
;
(A)((Ri)),i=0,1
功能:將累加器A的內(nèi)容和源操作數(shù)的內(nèi)容相互交換。
尋址方式:源操作數(shù)有寄存器尋址、直接尋址和寄存器間
接尋址等方式。36XCHA,R7 ;(A)(R7)
80H
08H
(A)=08H(R7)=80HXCHA,40H ;(A)(40H)
08HF0H
(A)=F0H(40H)=08HXCHA,@R0 ;(A)((R0))(R0)=30H(30H)=0FH
F0H
0FH
(A)=0FH(30H)=F0H
結(jié)果為(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H。例:(A)=80H,(R7)=08H,(40H)=F0H,(R0)=30H,(30H)=0FH3710.半字節(jié)交換指令
XCHD A,@Ri
累加器的低4位與內(nèi)部RAM低4位交換。
例如:(R0)=60H,(60H)=3EH,
(
A)=59H,
XCHDA,@R0”(A)=59H(60H)=3EH
(A)=5EH,
(60H)=39H383.4.2算術(shù)運(yùn)算類(lèi)指令
指令構(gòu)成:
加、減、乘、除指令。使用限制:
算術(shù)運(yùn)算指令都是針對(duì)8位二進(jìn)制無(wú)符號(hào)數(shù)的,如要進(jìn)行帶符號(hào)或多字節(jié)二進(jìn)制數(shù)運(yùn)算,需編寫(xiě)具體的運(yùn)算程序,通過(guò)執(zhí)行程序?qū)崿F(xiàn)。
對(duì)標(biāo)志位的影響:
算術(shù)運(yùn)算的結(jié)果將使PSW的進(jìn)位(Cy)、輔助進(jìn)位(Ac)、溢出(OV)3種標(biāo)志位置1或清0。
注意:
增1和減1指令不影響這些標(biāo)志。391.加法指令
指令格式:
ADDA,Rn
;(A)+(Rn)→A,n=0~7 ADDA,direct ;(A)+(direct)→A ADDA,@Ri
;(A)+((Ri))→A,i=0,1 ADDA,#data ;(A)+#data→A
功能說(shuō)明:8位加法指令的一個(gè)加數(shù)總是來(lái)自累加器A,而另一個(gè)加數(shù)可由寄存器尋址、直接尋址、寄存器間接尋址和立即數(shù)尋址等不同的尋址方式得到。加的結(jié)果總是放在累加器A中。40練習(xí):
當(dāng)兩個(gè)加數(shù)都在片外RAM,運(yùn)算結(jié)果也需放在片外RAM中時(shí),程序如何編寫(xiě)?
硬件資源分配如下:片外RAM的指針用R0,兩個(gè)加數(shù)和結(jié)果地址由低到高依次存放,加法的源操作數(shù)用R1的寄存器尋址方式。MOVXA,@R0;取第一個(gè)加數(shù)放R1MOVR1,AINCR0;取第二個(gè)加數(shù)放AMOVXA,@R0ADDA,R1;做加法INCR0;存放運(yùn)算結(jié)果MOVX@R0,A41
對(duì)標(biāo)志位的影響:(1)如果位7有進(jìn)位,則進(jìn)位標(biāo)志Cy置1,否則Cy清0。(2)如果位3有進(jìn)位,輔助進(jìn)位標(biāo)志Ac置1,否則Ac(Ac為PSW寄
存器中的一位)清0。(3)如果位6有進(jìn)位,而位7沒(méi)有進(jìn)位,或者位6沒(méi)有進(jìn)位,而位7有
進(jìn)位,則溢出標(biāo)志位OV置1,否則OV清0。
溢出標(biāo)志位OV的狀態(tài),只有帶符號(hào)數(shù)加法運(yùn)算時(shí)才有意義。
當(dāng)兩個(gè)帶符號(hào)數(shù)相加時(shí),OV=1,表示加法運(yùn)算超出了累加器A所能表示的帶符號(hào)數(shù)的有效范圍(-128~+127),即產(chǎn)生了溢出,表示運(yùn)算結(jié)果是錯(cuò)誤的,否則運(yùn)算是正確的,即無(wú)溢出產(chǎn)生。42【例3-1】(A)=53H,(R0)=FCH,執(zhí)行指令
ADD A,R0運(yùn)算式為
結(jié)果:(A)=4FH,Cy=1,Ac=0(位3向位4無(wú)進(jìn)位),
OV=0(位6和位7同時(shí)有進(jìn)位)
P=1(A中1的位數(shù)為奇數(shù))。43【例3-2】
(A)=85H,(R0)=20H,(20H)=AFH,執(zhí)行指令
ADDA,@R0
運(yùn)算式為
結(jié)果:(A)=34H,Cy=1,Ac=1(位3向位4有進(jìn)位)
OV=1(位7有進(jìn)位,而位6無(wú)進(jìn)位)P=1(A中1的位數(shù)為奇數(shù))
。
442.帶進(jìn)位加法指令
特點(diǎn)是進(jìn)位標(biāo)志位Cy參加運(yùn)算,三個(gè)數(shù)相加。4條指令:
ADDCA,Rn
;(A)+(Rn)+C→A,n=0~7 ADDCA,direct ;(A)+(direct)+C→A ADDCA,@Ri
;(A)+((Ri))+C→A,i=0,1 ADDCA,#data ;(A)+#data+C→A
如果位7有進(jìn)位,則進(jìn)位標(biāo)志Cy置“1”,否則Cy清“0”;
如果位3有進(jìn)位,則輔助進(jìn)位標(biāo)志Ac置“1”,否則Ac清“0”;
如果位6有進(jìn)位而位7沒(méi)有進(jìn)位,或者位7有進(jìn)位而位6沒(méi)有
進(jìn)位,則溢出標(biāo)志OV置“1”,否則標(biāo)志OV清“0”。45【例3-3】(A)=85H,(20H)=FFH,Cy=1,執(zhí)行指令 ADDC A,20H
運(yùn)算式為
結(jié)果為
(A)=85H,Cy=1,Ac=1(位3向位4有進(jìn)位)
OV=0(第6位和第7位都有進(jìn)位)P=1(A中1的位數(shù)為奇數(shù))。
)。463.增1指令5條指令:
INCA INCRn
;n=0~7 INCdirect INC@Ri
;i=0,1 INCDPTR
★把指令中所指出的變量增1,且不影響PSW中的任何標(biāo)志。
★若變量原來(lái)為FFH,加1后溢出為00H(前四條指令),并且不影響標(biāo)志位。
★指令“INCDPTR”,16位數(shù)增1指令。首先對(duì)低8位指針
DPL
執(zhí)行加1,當(dāng)溢出時(shí),就對(duì)DPH的內(nèi)容進(jìn)行加1,不
影響標(biāo)志Cy。
474.十進(jìn)制調(diào)整指令
指令格式:
DAA
功能:
是對(duì)BCD碼的加法結(jié)果進(jìn)行十進(jìn)制調(diào)整。兩個(gè)BCD碼按二進(jìn)制相加之后,必須經(jīng)本指令的調(diào)整才能得到正確的壓縮BCD碼的和數(shù)。485.帶借位的減法指令4條指令:SUBB A,Rn
;
(A)-(Rn)-Cy→A,n=0~7SUBB A,direct ;
(A)-(direct)-Cy→ASUBB A,@Ri
;
(A)-((Ri))-Cy→A,
i=0,1SUBB A,#data ;
(A)-#data-Cy→A
從A的內(nèi)容減去指定變量和進(jìn)位標(biāo)志Cy的值,結(jié)果存在A中。
如果位7需借位則Cy置1,否則Cy清0;
如果位3需借位則Ac置1,否則Ac清0;
如果位6借位而位7不借位,或者位7借位而位6不借位,則溢出標(biāo)志位OV置“1”,否則OV清“0”。49【例3-5】(A)=C9H,(R2)=54H,Cy=1,執(zhí)行指令
SUBB A,R2
運(yùn)算式為
結(jié)果:
(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位,而第7位沒(méi)有向上產(chǎn)生借位)。506.減1指令 DEC A ;(A)-1→A DEC Rn
;(Rn)-1→Rn,n=0~7 DEC direct ;(direct)-1→direct DEC @Ri
;((Ri))-1→(Ri),i=0,1
功能是指定的變量減1。若原來(lái)為00H,減1后下溢為FFH,不影響標(biāo)志位(P標(biāo)志除外)?!纠?-6】(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,
(40H)=0FFH,執(zhí)行指令 DEC A ;(A)-1→A(A)=0EH DEC R7 ;(R7)-1→R7(R7)=18H
DEC 30H ;(30H)-1→30H(30H)=0FFH
DEC @R1 ;((R1))-1→(R1)(40H)=0FEH517.乘法指令
MUL AB;A×B→BA
功能:
乘積的低字節(jié)在累加器A中,高字節(jié)在B中。
標(biāo)志影響:如果積大于255,則OV置1,否則OV清0。
Cy標(biāo)志總是清0。8.除法指令
DIV AB ;A/B→A(商),余數(shù)→B
商(為整數(shù))存放在A中,余數(shù)存放在B中,且Cy和溢出標(biāo)志位OV清“0”。
如果B的內(nèi)容為0(即除數(shù)為0),則存放結(jié)果的A、B中的內(nèi)容不定,并溢出標(biāo)志位OV置1。523.4.3邏輯操作類(lèi)指令1.累加器A清“0”指令
CLR A
累加器A清0。不影響標(biāo)志位。2.累加器A求反指令
CPL A
將累加器A的內(nèi)容按位取反,不影響標(biāo)志位。533.左環(huán)移指令
RL A
功能是A向左循環(huán)移位,位7循環(huán)移入位0,不影響標(biāo)志位,如圖3-1所示。4.帶進(jìn)位左環(huán)移指令
RLC A
將累加器A的內(nèi)容和進(jìn)位標(biāo)志位Cy一起向左環(huán)移一位,如圖3-2所示。54圖3-1左環(huán)移操作圖3-2
帶進(jìn)位左環(huán)移操作5.右環(huán)移指令
RR A
這條指令的功能是A的內(nèi)容向右環(huán)移一位不影響其他標(biāo)志位,如圖3-3所示。6.帶進(jìn)位右環(huán)移指令
RRC AA的內(nèi)容和進(jìn)位標(biāo)志Cy一起向右環(huán)移一位,如圖3-4所示。55圖3-3
右環(huán)移操作圖3-4帶進(jìn)位右環(huán)移操作7.累加器半字節(jié)交換指令
SWAPA
是將累加器A的高半字節(jié)(Acc.7~Acc.4)和低半字節(jié)(Acc.3~Acc.0)互換?!纠?-8】(A)=95H,執(zhí)行指令
SWAPA結(jié)果為
(A)=59H。8.邏輯與指令A(yù)NLA,Rn
;(A)∧(Rn)→A,n=0~7ANL A,direct ;(A)∧(direct)→AANLA,#data ;(A)∧#data→AANL A,@Ri
;(A)∧((Ri))→A,i=0~1ANLdirect,A ;(direct)∧(A)→directANL direct,#data ;(direct)∧#data→direct56
是在指定的變量之間以位為基礎(chǔ)進(jìn)行“邏輯與”操作,結(jié)果存放到目的變量所在的寄存器或存儲(chǔ)器中?!纠?-9】
(A)=07H,(R0)=0FDH,執(zhí)行指令
ANL A,R0運(yùn)算式為結(jié)果:
(A)=05H。579.邏輯或指令 ORL A,Rn
;(A)∨(Rn)→A,n=0~7 ORL A,direct ;(A)∨(direct)→A ORL A,#data ;(A)∨#data→A ORL A,@Ri
;(A)∨((Ri))→A,i=0,1 ORL direct,A ;(direct)∨(A)→direct ORL direct,#data ;(direct)∨#data→direct
是在所指定的變量之間執(zhí)行位的“邏輯或”操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。58【例3-10】
(P1)=05H,(A)=33H,執(zhí)行指令
ORL P1,A運(yùn)算式為結(jié)果:(P1)=35H。5910.邏輯異或指令XRLA,Rn
;(A)⊕(Rn)→A,n=0~7XRL A,direct ;(A)⊕(direct)→AXRL A,@Ri
;(A)⊕((Ri))→A,i=0,1XRL A,#data ;(A)⊕#data→AXRL direct,A ;(direct)⊕(A)→directXRL direct,#data ;(direct)⊕#data→direct
功能是在所指定的變量之間執(zhí)行以位的“邏輯異或”操作,結(jié)果存到目的變量寄存器或存儲(chǔ)器中。60【例3-11】
(A)=90H,(R3)=73H,執(zhí)行指令
XRL A,R3運(yùn)算式為
結(jié)果:
(A)=E3H。613.4.4控制轉(zhuǎn)移類(lèi)指令1.長(zhǎng)轉(zhuǎn)移指令
LJMP addr16語(yǔ)法:addr16程序存儲(chǔ)器某單元的16位地址;程序中可以用目的地址標(biāo)號(hào)、符號(hào)常量或16位立即數(shù)表示;
功能:指令執(zhí)行時(shí),將addr16裝入PC,無(wú)條件地轉(zhuǎn)向addr16
指定的目的地址。
跳轉(zhuǎn)范圍:目的地址無(wú)限制??梢允?4KB程序存儲(chǔ)器地址空
間的任何位置。
指令特性:3字節(jié)2周期
622.相對(duì)轉(zhuǎn)移指令 SJMP rel
語(yǔ)法:rel
相對(duì)偏移量,帶符號(hào)8位二進(jìn)制補(bǔ)碼數(shù);
★注意:寫(xiě)代碼時(shí),程序中直接寫(xiě)目的位置的程序標(biāo)號(hào)就可以,相對(duì)偏移量在匯編時(shí)由匯編器自動(dòng)計(jì)算和填入。
功能:無(wú)條件轉(zhuǎn)移的雙向轉(zhuǎn)移;
跳轉(zhuǎn)范圍:跳轉(zhuǎn)指令下一條指令首地址的前128B到后127B
之間(-128B~+127B)。
指令性質(zhì):2字節(jié)2周期633.絕對(duì)轉(zhuǎn)移指令
AJMP addr11
語(yǔ)法:addr11
轉(zhuǎn)移目標(biāo)地址的低11位;程序中可以用符號(hào)常量或立即數(shù)表示;
功能:無(wú)條件轉(zhuǎn)移。執(zhí)行指令時(shí),將當(dāng)前PC值(下一條指令的首地址)的低11位用addr11代替,形成目標(biāo)地址并跳轉(zhuǎn)。
轉(zhuǎn)移范圍:以跳轉(zhuǎn)指令的下一條指令首地址的高五位做為高位地址的2KB的范圍內(nèi)。指令性質(zhì):2字節(jié)2周期
注意:該指令是為兼容MCS–48而設(shè)計(jì)的。
644.間接跳轉(zhuǎn)指令 JMP@A+DPTR
功能:無(wú)條件轉(zhuǎn)移。以DPTR內(nèi)容為基址,A的內(nèi)容作為變
址。給A賦予不同值,即可實(shí)現(xiàn)多分支轉(zhuǎn)移。
目的地址:由A中8位無(wú)符號(hào)數(shù)與DPTR的16位無(wú)符號(hào)數(shù)
內(nèi)容之和來(lái)確定。
注意:本指令不改變A和DPTR的值,也不影響標(biāo)志位。指令性質(zhì):1字節(jié)2周期655.條件轉(zhuǎn)移指令JZ rel
;如果累加器內(nèi)容為0,則執(zhí)行轉(zhuǎn)移 JNZ rel
;如果累加器內(nèi)容非0,則執(zhí)行轉(zhuǎn)移
語(yǔ)法:
rel
相對(duì)偏移量,帶符號(hào)8位二進(jìn)制補(bǔ)碼數(shù);
★注意:寫(xiě)代碼時(shí),程序中直接寫(xiě)目的位置的程序標(biāo)號(hào)就可以,相對(duì)偏移量在匯編時(shí)由匯編器自動(dòng)計(jì)算和填入。
功能:條件滿(mǎn)足,則轉(zhuǎn)移;不滿(mǎn)足,則順序執(zhí)行下一指令。
轉(zhuǎn)移范圍:以下一條指令首地址為中心的256B范圍內(nèi)(-128
~+127)。666.比較不相等轉(zhuǎn)移指令
CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel
功能:比較前兩個(gè)操作數(shù)大小,如果值不相等則轉(zhuǎn)移,
并轉(zhuǎn)向目的地址。
指令執(zhí)行不影響任何一個(gè)操作數(shù)的內(nèi)容。
注意:rel的含義、表達(dá)以及轉(zhuǎn)移的范圍,都與上一條指令相同。
符號(hào)位影響:
如果第一操作數(shù)(無(wú)符號(hào)整數(shù))小于第二操作數(shù)(無(wú)符號(hào)整數(shù)),則進(jìn)位標(biāo)志位Cy置1,否則Cy清0。677.減1不為0轉(zhuǎn)移指令 DJNZ Rn,rel
;n=0~7 DJNZ direct,rel功能:將源操作數(shù)減1,結(jié)果送回源操作數(shù),如果結(jié)果不為0則轉(zhuǎn)移。注意:rel的含義、表達(dá)以及轉(zhuǎn)移的范圍,都與上一條指令相同。
用途:用于實(shí)現(xiàn)程序循環(huán)。預(yù)先裝入循環(huán)次數(shù),以減1后是否
為“0”作為轉(zhuǎn)移條件,即實(shí)現(xiàn)按次數(shù)控制循環(huán)。
688.調(diào)用子程序指令(1)長(zhǎng)調(diào)用指令
LCALL addr16
功能:調(diào)用64KB范圍內(nèi)程序存儲(chǔ)器中的任何一個(gè)子程序。
原理:先把PC加3獲得下一條指令的地址(斷點(diǎn)地址),
并壓入堆棧(先低位字節(jié),后高位字節(jié)),堆棧
指針加2。
接著把a(bǔ)ddr16裝入PC,然后從該地址開(kāi)始執(zhí)行程
序。
★本指令執(zhí)行后不影響任何標(biāo)志位。
★本指令為三字節(jié)指令。69(2)絕對(duì)調(diào)用指令 ACALLaddr11
◆
與AJMP指令類(lèi)似,為兼容MCS–48的CALL指令而設(shè),不影
響標(biāo)志位。
◆2KB范圍內(nèi)的調(diào)用子程序的指令。同樣執(zhí)行時(shí)首先保護(hù)斷點(diǎn),然后形成目的地址。
◆子程序地址的高5位必須與ACALL指令下一條指令的高5位地址相同,否則將混亂?!舯局噶顬殡p字節(jié)指令。
709.子程序的返回指令
RET
執(zhí)行本指令時(shí): (SP)→PCH,然后(SP)-1→SP (SP)→PCL,然后(SP)-1→SP
功能:
從堆棧中退出PC的高8位和低8位字節(jié)(斷點(diǎn)地址),堆棧指
針減2,從PC值處開(kāi)始繼續(xù)執(zhí)行程序。不影響任何標(biāo)志位。10.中斷返回指令 RETI與RET指令相似。
不同處:該指令清除了中斷響應(yīng)時(shí)被置1的內(nèi)部中斷優(yōu)先級(jí)寄
存器的中斷優(yōu)先級(jí)狀態(tài),其他相同。7111.空操作指令
NOP
不進(jìn)行任何操作,耗一個(gè)機(jī)器周期時(shí)間,執(zhí)行(PC)+1→PC操作。3.4.5位操作類(lèi)指令
內(nèi)部有一個(gè)位處理機(jī),對(duì)應(yīng)位操作指令。1.?dāng)?shù)據(jù)位傳送指令
MOV C,bit位讀 MOV bit,C位寫(xiě)
語(yǔ)法:bit位地址,立即數(shù)或符號(hào)常量表達(dá),任何直接尋址位。
C進(jìn)位標(biāo)志(區(qū)分位尋址和字節(jié)尋址的關(guān)鍵)
功能:把源操作數(shù)指定的位變量送到目的操作數(shù)指定處。
不影響其他寄存器或標(biāo)志位。72例如: MOV C,06H ;(20H).6→Cy06H是位地址,20H是內(nèi)部RAM字節(jié)地址。06H是內(nèi)部RAM20H字節(jié)位6的位地址。 MOV P1.0,C ;Cy→P1.02.位變量修改指令 CLR C ;Cy位清0 CLR bit ;bit位清0SETB C ;Cy位置1 SETB bit ;bit位置1
CPL C ;Cy位求反
讀/修改/寫(xiě) CPL bit ;bit位求反
讀/修改/寫(xiě)
73
這組指令將操作數(shù)指定的位清0、求反、置1,不影響其他標(biāo)志位。例如: CLR C ;Cy位清0 CLR 27H ;0→(24H).7位 CPL 08H ;
(21H).0位取反 SETB P1.7 ;
P1.7位置13.位變量邏輯與指令 ANL C,bit
;bit∧Cy→Cy ANL C,/bit ;
bit
∧Cy→Cy744.位變量邏輯或指令 ORL C,bit ORL C,/bit
第1條指令是直接尋
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理部工作計(jì)劃匯編
- 小學(xué)一年級(jí)下學(xué)期工作計(jì)劃
- 區(qū)2025年度計(jì)劃生育工作計(jì)劃2
- 分廠(chǎng)第十六個(gè)百日安全無(wú)事故活動(dòng)計(jì)劃
- 《外科常見(jiàn)急腹癥》課件
- 《水暖理論知識(shí)培訓(xùn)》課件
- 《氨基酸之亮氨酸》課件
- 合同 第三方費(fèi)用 報(bào)銷(xiāo)條款
- 鐵路培訓(xùn)合同
- 2025年阿克蘇貨運(yùn)從業(yè)資格證模擬考試題目
- C語(yǔ)言程序設(shè)計(jì)-001-國(guó)開(kāi)機(jī)考復(fù)習(xí)資料
- 趣味英語(yǔ)與翻譯學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 統(tǒng)編版高中政治必修二經(jīng)濟(jì)與社會(huì)復(fù)習(xí)提綱
- 組織架構(gòu)圖可編輯
- (完整版)霍夫斯塔德文化差異五個(gè)維度
- 《地形對(duì)聚落及交通線(xiàn)路分布的影響》教學(xué)設(shè)計(jì)
- 《中國(guó)旅游地理》新課程標(biāo)準(zhǔn)
- seagull船員英語(yǔ)STCW甲板操作級(jí)答案
- 腦出血后遺癥臨床路徑
- 事故隱患排查治理統(tǒng)計(jì)分析制度
- 重慶大學(xué)--數(shù)學(xué)模型--數(shù)學(xué)實(shí)驗(yàn)作業(yè)二(共9頁(yè))
評(píng)論
0/150
提交評(píng)論