版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)匯編指令第1頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月項(xiàng)目引入1.項(xiàng)目描述利用P1口外接的8只LED發(fā)光二極管模擬彩燈。2.硬件電路與工作原理讓學(xué)生根據(jù)任務(wù)分析硬件要求,畫(huà)出具體電路,并在實(shí)驗(yàn)開(kāi)發(fā)板上接線(xiàn)3.程序設(shè)計(jì)(給出控制程序)
8051第2頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月開(kāi)始55H送P1口延時(shí)0.3秒AAH送P1口延時(shí)0.3秒流水式彩燈控制程序框圖第3頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月控制程序ORG0000HLOOP:MOVP1,#55H;將立即數(shù)55H送P1端口LCALLTIME;調(diào)延時(shí)子程序TIMEMOVP1,#0AAH ;將立即數(shù)AAH送P1端口LCALLTIME;調(diào)延時(shí)子程序TIMESJMPLOOP ;轉(zhuǎn)移到LOOPTIME:MOVR6,#200 ;延時(shí)子程序TIMETIME1:MOVR7,#200TIME2:NOPNOPNOPDJNZR7,TIME2DJNZR6,TIME1RETEND第4頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月高級(jí)語(yǔ)言:匯編語(yǔ)言:機(jī)器語(yǔ)言:用二進(jìn)制代碼表示指令和數(shù)據(jù)。用助記符表示指令操作功能,用標(biāo)號(hào)表示操作對(duì)象。獨(dú)立于機(jī)器,面向過(guò)程,接近自然語(yǔ)言和數(shù)學(xué)表達(dá)式.2.1匯編語(yǔ)言與指令系統(tǒng)簡(jiǎn)介
一、匯編語(yǔ)言程序設(shè)計(jì)的意義什么是程序?完成某項(xiàng)特定任務(wù)的指令的集合。計(jì)算機(jī)按程序一條一條地依次執(zhí)行指令,從而完成指定任務(wù)。要讓計(jì)算機(jī)完成各項(xiàng)任務(wù),就應(yīng)設(shè)計(jì)各種程序。程序設(shè)計(jì)語(yǔ)言:第5頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月匯編語(yǔ)言程序的每一條語(yǔ)句都與計(jì)算機(jī)的某一條指令對(duì)應(yīng),所以必需熟悉指令系統(tǒng)。指令
=
操作碼
+
操作數(shù)操作碼——表示了該指令所能執(zhí)行的操作功能。操作數(shù)——表示參加操作的數(shù)的本身或操作數(shù)所在的地址。MCS-51指令格式:標(biāo)號(hào)是程序員根據(jù)編程需要給指令設(shè)定的符號(hào)地址,可有可無(wú);標(biāo)號(hào)由1~8個(gè)字符組成,第一個(gè)字符必須是英文字,不能是數(shù)字或其它符號(hào);標(biāo)號(hào)后必須用冒號(hào)。[標(biāo)號(hào):]操作碼助記符[第一操作數(shù)][,第二操作數(shù)][;注釋]第6頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月操作碼表示指令的操作種類(lèi),如MOV表示數(shù)據(jù)傳送操作,ADD表示加法操作等。操作數(shù)或操作數(shù)地址表示參加運(yùn)算的數(shù)據(jù)或數(shù)據(jù)的有效地址。操作數(shù)一般有以下幾種形式:沒(méi)有操作數(shù)項(xiàng),操作數(shù)隱含在操作碼中,如RET指令;只有一個(gè)操作數(shù),如CPLA指令;有兩個(gè)操作數(shù),如MOVA,#00H指令,操作數(shù)之間以逗號(hào)相隔;有三個(gè)操作數(shù),如CJNEA,#00H,NEXT指令,操作數(shù)之間也以逗號(hào)相隔。注釋是對(duì)指令的解釋說(shuō)明,用以提高程序的可讀性;注釋前必須加分號(hào)。第7頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月二、MCS-51系列單片機(jī)的指令系統(tǒng)111條指令,共分五大類(lèi):數(shù)據(jù)傳送類(lèi);(29條)算術(shù)運(yùn)算類(lèi);(24條)邏輯運(yùn)算類(lèi);(24條)控制轉(zhuǎn)移類(lèi);(17條)位操作類(lèi)。(17條)第8頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月指令中操作數(shù)的描述符號(hào):
Rn——工作寄存器R0~R7@Ri——間接尋址寄存器R0、R1
Direct——直接地址,包括內(nèi)部128BRAM單元地址、26個(gè)SFR地址。#data——8位常數(shù)#data16——16位常數(shù)addr16——16位目的地址addr11——11位目的地址
rel——8位帶符號(hào)的偏移地址
DPTR——16位外部數(shù)據(jù)指針寄存器
bit——可直接位尋址的位
第9頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
A——累加器
B——寄存器B
C——進(jìn)、借位標(biāo)志位,或位累加器
@——間接寄存器或基址寄存器的前綴/——指定位求反(x)——x地址單元中的內(nèi)容
((x))——x地址單元中的內(nèi)容為地址的單元中的內(nèi)容
$——當(dāng)前指令的地址
第10頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
三、
尋
址
方
式操作數(shù)是指令的重要組成部分,指出了參與操作的數(shù)據(jù)或數(shù)據(jù)的地址。尋找操作數(shù)地址的方式稱(chēng)為尋址方式。一條指令采用什么樣的尋址方式,是由指令的功能決定的。尋址方式越多,指令功能就越強(qiáng)。MCS-51指令系統(tǒng)共使用了7種尋址方式,包括寄存器尋址、直接尋址、立即數(shù)尋址、寄存器間接尋址、變址尋址、相對(duì)尋址和位尋址。第11頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月1.寄存器尋址寄存器尋址是指將操作數(shù)存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOVR1,A的操作是把累加器A中的數(shù)據(jù)傳送到寄存器R1中,其操作數(shù)存放在累加器A中,所以尋址方式為寄存器尋址。如果程序狀態(tài)寄存器PSW的RS1:RS0=01(選中1組工作寄存器,對(duì)應(yīng)地址為08H~0FH),設(shè)累加器A的內(nèi)容為20H,則執(zhí)行MOVR1,A指令后,內(nèi)部RAM09H單元的值就變?yōu)?0H,如圖2.1所示。第12頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月采用寄存器尋址的指令如下:
MOVP1,A ;將累加器A的內(nèi)容送到P1口
MOVP1,R4 ;將寄存器R4的內(nèi)容送到P1口
CLRA ;將累加器A清0CPLA ;將累加器A中的內(nèi)容取反RLA ;將累加器A的內(nèi)容循環(huán)左移第13頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月圖2.1寄存器尋址示意圖
第14頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月2.直接尋址直接尋址是指把存放操作數(shù)的內(nèi)存單元的地址直接寫(xiě)在指令中。在MCS-51單片機(jī)中,可以直接尋址的存儲(chǔ)器主要有內(nèi)部RAM區(qū)和特殊功能寄存器SFR區(qū)。例如,指令MOVA,3AH執(zhí)行的操作是將內(nèi)部RAM中地址為3AH的單元內(nèi)容傳送到累加器A中,其操作數(shù)3AH就是存放數(shù)據(jù)的單元地址,因此該指令是直接尋址。設(shè)內(nèi)部RAM3AH單元的內(nèi)容是88H,那么指令MOVA,3AH的執(zhí)行過(guò)程如圖2.2所示。第15頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
圖2.2直接尋址示意圖
采用直接尋址的指令如下:MOVP1,20H ;將20H單元的內(nèi)容傳送到P1口第16頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月3.立即數(shù)尋址立即數(shù)尋址是指將操作數(shù)直接寫(xiě)在指令中。例如,指令MOVA,#3AH執(zhí)行的操作是將立即數(shù)3AH送到累加器A中,該指令就是立即數(shù)尋址。注意:立即數(shù)前面必須加“#”號(hào),以區(qū)別立即數(shù)和直接地址。該指令的執(zhí)行過(guò)程如圖2.3所示。第17頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月圖2.3立即數(shù)尋址示意圖
第18頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月采用立即數(shù)尋址的指令如下:
MOV 20H,#55 ;將立即數(shù)55H送20H單元
MOV A,#0F0H ;將立即數(shù)0F0H送累加器AMOV R4,#0FH ;將立即數(shù)0FH送寄存器R4中
MOV R0,#20H ;將立即數(shù)20H送寄存器R0口第19頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
ANDA,#0FH ;累加器A的內(nèi)容與立即數(shù)0FH進(jìn)行
邏輯與操作
OR A,#0F0H ;累加器A的內(nèi)容與立即數(shù)0F0H進(jìn)行邏輯
或操作
MOVA,#01H ;將立即數(shù)01H送累加器A中
MOVA,#55H ;將立即數(shù)55H送累加器A中第20頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
4.寄存器間接尋址
寄存器間接尋址是指將存放操作數(shù)的內(nèi)存單元的地址放在寄存器中,指令中只給出該寄存器。執(zhí)行指令時(shí),首先根據(jù)寄存器的內(nèi)容,找到所需要的操作數(shù)地址,再由該地址找到操作數(shù)并完成相應(yīng)操作。在MCS-51指令系統(tǒng)中,用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱(chēng)為寄存器間接尋址寄存器。注意:間接尋址寄存器前面必須加上符號(hào)“@”。例如,指令MOVA,@R0執(zhí)行的操作是將R0的內(nèi)容作為內(nèi)部RAM的地址,再將該地址單元中的內(nèi)容取出來(lái)送到累加器A中。第21頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月設(shè)R0=3AH,內(nèi)部RAM3AH中的值是65H,則指令MOVA,@R0的執(zhí)行結(jié)果是累加器A的值為65H,該指令的執(zhí)行過(guò)程如圖2.4所示。
第22頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月圖2.4寄存器間接尋址示意圖
第23頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月5.變址尋址變址尋址是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類(lèi)尋址方式主要用于查表操作。例如,指令MOVCA,@A+DPTR執(zhí)行的操作是將累加器A和基址寄存器DPTR的內(nèi)容相加,相加結(jié)果作為操作數(shù)存放的地址,再將操作數(shù)取出來(lái)送到累加器A中。設(shè)累加器A=02H,DPTR=0300H,外部ROM中,0302H單元的內(nèi)容是55H,則指令MOVCA,@A+DPTR的執(zhí)行結(jié)果是累加器A的內(nèi)容為55H。該指令的執(zhí)行過(guò)程如圖2.5所示。第24頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月圖2.5變址尋址示意圖第25頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
6.相對(duì)尋址相對(duì)尋址是指程序計(jì)數(shù)器PC的當(dāng)前內(nèi)容與指令中的操作數(shù)相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(也稱(chēng)目的地址)。該類(lèi)尋址方式主要用于跳轉(zhuǎn)指令。例如,指令SJMP54H執(zhí)行的操作是將PC當(dāng)前的內(nèi)容與54H相加,結(jié)果再送回PC中,成為下一條將要執(zhí)行指令的地址。設(shè)指令SJMP54H的機(jī)器碼80H,54H存放在2000H處,當(dāng)執(zhí)行到該指令時(shí),先從2000H和2001H單元取出指令,PC自動(dòng)變?yōu)?002H;再把PC的內(nèi)容與操作數(shù)54H相加,形成目標(biāo)地址2056H,再送回PC,使得程序跳轉(zhuǎn)到2056H單元繼續(xù)執(zhí)行。該指令的執(zhí)行過(guò)程如圖2.6所示。第26頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月圖2.6相對(duì)尋址示意圖
第27頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月7.位尋址位尋址是指按位進(jìn)行的尋址操作,而上述介紹的指令都是按字節(jié)進(jìn)行的尋址操作。MCS-51單片機(jī)中,操作數(shù)不僅可以按字節(jié)為單位進(jìn)行操作,也可以按位進(jìn)行操作。當(dāng)我們把某一位作為操作數(shù)時(shí),這個(gè)操作數(shù)的地址稱(chēng)為位地址。位尋址區(qū)包括專(zhuān)門(mén)安排在內(nèi)部RAM中的兩個(gè)區(qū)域:一是內(nèi)部RAM的位尋址區(qū),地址范圍是20H~2FH,共16個(gè)RAM單元,位地址為00H~7FH;二是特殊功能寄存器SFR中有11個(gè)寄存器可以位尋址,參見(jiàn)有關(guān)章節(jié)中位地址定義。第28頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例如,指令SETB3DH執(zhí)行的操作是將內(nèi)部RAM位尋址區(qū)中的3DH位置1。設(shè)內(nèi)部RAM27H單元的內(nèi)容是00H,執(zhí)行SETB3DH后,由于3DH對(duì)應(yīng)內(nèi)部RAM27H的第5位,因此該位變?yōu)?,也就是27H單元的內(nèi)容變?yōu)?0H。該指令的執(zhí)行過(guò)程如圖2.7所示。第29頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月圖2.7位尋址示意圖
第30頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月§2-2數(shù)據(jù)傳送類(lèi)指令一、內(nèi)部RAM數(shù)據(jù)傳送類(lèi)1、一般數(shù)據(jù)傳送指令片外程序存儲(chǔ)器ROMEPROM特殊功能寄存器SFR片內(nèi)RAM128字節(jié)片外數(shù)據(jù)存儲(chǔ)器RAMMOVCMOVXMOVPUSHPOPXCHXCHD第31頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
數(shù)據(jù)傳送指令是MCS-51單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)中使用最頻繁的指令,包括內(nèi)部RAM、寄存器、外部RAM以及程序存儲(chǔ)器之間的數(shù)據(jù)傳送。數(shù)據(jù)傳送操作是指把數(shù)據(jù)從源地址傳送到目的地址,源地址內(nèi)容不變。
數(shù)據(jù)目的地址源地址第32頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
1.內(nèi)部8位數(shù)據(jù)傳送指令(15條)
內(nèi)部8位數(shù)據(jù)傳送指令共15條,主要用于MCS-51單片機(jī)內(nèi)部RAM與寄存器之間的數(shù)據(jù)傳送。指令基本格式:
MOV<目的操作數(shù)>,<源操作數(shù)>
第33頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月回憶前述操作數(shù)描述符:A,direct,Rn,@Ri,#data,DPTR等。經(jīng)排列組合可寫(xiě)出下列指令:MOVA,Rn;ARn以下類(lèi)似。MOVA,directMOVA,@RiMOVA,#dataMOVRn,ARnAMOVRn,directMOVRn,#data第34頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月MOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#dataMOV@Ri,A(Ri)AMOV@Ri,directMOV@Ri,#dataMOVDPTR,#data16;唯一的16位數(shù)據(jù)傳送指令。上述指令不影響任何標(biāo)志位,但PSW的P位除外。(direct)AMOVdirect,A;第35頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月ХХХХ上述指令不影響任何標(biāo)志位,但PSW的P位除外。注意:MOVRn,RnMOV@Ri,@RiMOVRn,@RiMOV#data,A
等等指令是非法指令。
哇!好容易出錯(cuò)??!第36頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.1
已知相應(yīng)單元的內(nèi)容如下,請(qǐng)指出每條指令執(zhí)行后相應(yīng)單元內(nèi)容的變化。
累加器A40H寄存器R050H內(nèi)部RAM:40H30H內(nèi)部RAM:50H10H第37頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
(1)MOVA,#20H(2)MOVA,40H(3)MOVA,R0(4)MOVA,@R0解:(1)MOVA,#20H執(zhí)行后A=20H。
(2)MOVA,40H執(zhí)行后A=30H。
(3)MOVA,R0執(zhí)行后A=50H。
(4)MOVA,@R0執(zhí)行后A=10H。第38頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.2
已知相應(yīng)單元的內(nèi)容如下,請(qǐng)指出下列指令執(zhí)行后各單元內(nèi)容相應(yīng)的變化。寄存器R050H寄存器R166H寄存器R630H內(nèi)部RAM:50H60H內(nèi)部RAM:66H45H內(nèi)部RAM:70H40H第39頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月(1)MOVA,R6(2)MOVR6,70H(3)MOV70H,50H(4)MOV40H,@R0(5)MOV@R1,#88H解:(1)MOVA,R6執(zhí)行后A=30H。(2)MOVR6,70H執(zhí)行后R6=40H。(3)MOV70H,50H執(zhí)行后(70H)=60H。(4)MOV40H,@R0執(zhí)行后(40H)=60H。(5)MOV@R1,#88H執(zhí)行后(66H)=88H
第40頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月二、外部RAM數(shù)據(jù)傳送MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A例:若DPTR=3020H,外部RAM(3020H)=48H,執(zhí)行指令MOVXA,@DPTR后,A=?第41頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月注意:①外部RAM只能通過(guò)累加器A進(jìn)行數(shù)據(jù)傳送。②累加器A與外部RAM之間傳送數(shù)據(jù)時(shí)只能間接尋址方式,間接尋址寄存器為DPTR,R0,R1。③以上傳送指令結(jié)果通常影響程序狀態(tài)字寄存器PSW的P標(biāo)志。
第42頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.3把外部數(shù)據(jù)存儲(chǔ)器2040H單元中的數(shù)據(jù)傳送到外部數(shù)據(jù)存儲(chǔ)器2560H單元中去。解:MOVDPTR,#2040HMOVXA,@DPTR;先將2040H單元的內(nèi)容傳送到累加器A中MOVDPTR,#2560HMOVX@DPTR,A;再將累加器A中的內(nèi)容傳送到2560H單元中第43頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月三、字節(jié)交換指令XCHA,RnARn
XCHA,directA(direct)XCHA,@RiA(Ri)XCHDA,@Ri半字節(jié)交換,低4位交換,高4位不變A3~0(Ri)3~0SWAPA半字節(jié)交換不影響任何標(biāo)志位。
第44頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月四、棧操作指令PUSHdirectPOPdirect不影響任何標(biāo)志位。PUSHdirect指令執(zhí)行中,機(jī)器自動(dòng)進(jìn)行兩步操作:(1)SPSP+1(2)(SP)(direct)例2.4、設(shè)SP=09H,(DPTR)=0123H,分析:執(zhí)行PUSHDPLPUSHDPH
后,各單元中的內(nèi)容。第45頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月POPdirect指令執(zhí)行中,機(jī)器也自動(dòng)進(jìn)行兩步操作:(1)(direct)(SP)(2)SP(SP)-1例2.5、設(shè)SP=0BH,(0BH)=01H,(0AH)=23H
執(zhí)行POPDPHPOPDPL
后,各單元中的內(nèi)容。第46頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月注意:①堆棧是用戶(hù)自己設(shè)定的內(nèi)部RAM中的一塊專(zhuān)用存儲(chǔ)區(qū),使用時(shí)一定先設(shè)堆棧指針,堆棧指針缺省為SP=07H。②堆棧遵循后進(jìn)先出的原則安排數(shù)據(jù)。③堆棧操作必須是字節(jié)操作,且只能直接尋址。將累加器A入棧、出棧指令可以寫(xiě)成:PUSH/POPACC或PUSH/POP0E0H而不能寫(xiě)成:PUSH/POPA④堆棧通常用于臨時(shí)保護(hù)數(shù)據(jù)及子程序調(diào)用時(shí)保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。⑤以上指令結(jié)果不影響程序狀態(tài)字寄存器PSW標(biāo)志。第47頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
例2.6
設(shè)堆棧指針為30H,把累加器A和DPTR中的內(nèi)容壓入,然后根據(jù)需要再把它們彈出,編寫(xiě)實(shí)現(xiàn)該功能的程序段。解:MOVSP,#30H;設(shè)置堆棧指針,SP=30H為棧底地址
PUSHACC;SP+1→SP,SP=31H,ACC→(SP)PUSHDPH;SP+1→SP,SP=32H,DPH→(SP)第48頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月PUSH DPL;SP+1→SP,SP=33H,DPL→(SP)…POP DPL ;(SP)→DPL,SP-1,SP=32HPOP DPH ;(SP)→DPH,SP-1,SP=31HPOP ACC ;(SP)→ACC,SP-1,SP=30H第49頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.7:設(shè)(10H)=01H,(20H)=1AH。將內(nèi)部RAM的10H與20H兩單元的內(nèi)容交換。解:PUSH10HPUSH20HPOP10HPOP20H第50頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月五、查表指令與ROM之間的數(shù)據(jù)傳送。MOVCA,@A+DPTRMOVCA,@A+PCMOVC含義是傳送常數(shù)。以DPTR為基地址的指令,可在ROM的64KB范圍內(nèi)查表;而以PC為基地址的指令只能在(PC)+1為中心上、下256B范圍內(nèi)查表。第51頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月§2-3算術(shù)運(yùn)算類(lèi)指令包括:加、減、乘、除;加一、減一。一、加法指令A(yù)DDA,Rn;AA+Rn以下類(lèi)同。ADDA,directADDA,@RiADDA,#data第52頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月ADDCA,Rn;AA+Rn+C;以下類(lèi)同。ADDCA,directADDCA,@RiADDCA,#data上述四條指令多用于多字節(jié)數(shù)相加。INCA;AA+1,以下類(lèi)同。INCRnINCdirectINC@RiINCDPTR
第53頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.8
分別指出指令I(lǐng)NCR0和INC@R0的執(zhí)行結(jié)果。設(shè)R0=30H,(30H)=00H。解:INCR0;R0+1=30H+1=31H→R0,R0=31HINC@R0;(R0)+1=(30H)+1→(R0),(30H)=01H,R0中內(nèi)容不變
第54頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月DAA;二——十進(jìn)制調(diào)整指令。執(zhí)行過(guò)程中,CPU能根據(jù)加法運(yùn)算后,累加器中的值和PSW中的AC及C標(biāo)志位的狀況自動(dòng)選擇一個(gè)修正值(00H、06H、60H、66H)與原運(yùn)算結(jié)果相加,進(jìn)行二——十進(jìn)制調(diào)整。第55頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.9設(shè)A=56H為56的壓縮的BCD碼數(shù),R3=67H,CY=1
執(zhí)行ADDCA,R3DAA
結(jié)果為:124注意:1)DA指令只能跟在加法指令后面使用;2)調(diào)整前參與運(yùn)算的兩數(shù)是BCD碼數(shù);3)DA指令不能與減法指令配對(duì)使用,但可以實(shí)現(xiàn)對(duì)A中壓縮BCD數(shù)進(jìn)行減一操作。
第56頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月二、減法指令SUBBA,Rn;AA-Rn-C,以下類(lèi)同。SUBBA,directSUBBA,@RiSUBBA,#data注意:減法之前先清零C。
DECA;AA-1 ,以下類(lèi)同。DECRnDEC@RiDECdirect第57頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.10設(shè)R0=7FH,在內(nèi)RAM中,(7EH)=00H,(7FH)=40H
執(zhí)行:DEC@R0DECR0DEC@R0
結(jié)果為
:(7FH)=3FH
R0=7EH,(7EH)=0FFH。第58頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月三、乘法和除法指令乘法:MULAB;(A)×(B),積的低8位在A中,
積的高8位在B中。
除法:DIVAB;(A)÷(B),商在A中,余數(shù)在B中。;若(B)=0,則結(jié)果不定,(OV)=1。
第59頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.11設(shè)A=C2H,R1=AAH,CY=1,分析執(zhí)行指令A(yù)DDCA,R1后的執(zhí)行結(jié)果。第60頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月§2-4邏輯運(yùn)算類(lèi)指令共分兩大類(lèi):?jiǎn)巫止?jié)邏輯操作,雙字節(jié)邏輯操作,共24條。一、單字節(jié)邏輯操作指令CLRA;A0CPLAA中8位按位求反。
循環(huán)左移、右移指令:RLARLCARRARRCA注:左移一位相當(dāng)于乘2;右移一位相當(dāng)于除2。第61頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月二、雙字節(jié)邏輯操作指令“與操作”:ANLA,Rn;AA∧Rn,以下類(lèi)同。ANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data
例2.12、P1=35H,使其高4位輸出0,低4位不變。解:
ANLP1,#0FH
此做法稱(chēng)為“屏蔽”位。第62頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月“或操作”:ORLA,Rn;AA∨Rn,以下類(lèi)同。ORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data例2.13、將A中的低3位送入P1中,并且保持P1中高5位不變。ANLA,#07HANLP1,#0F8HORLP1,A;(P1)=P7P6P5P4P3A2A1A0這稱(chēng)為“數(shù)位組合”。第63頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月“異或操作”:XRLA,Rn;AA⊕Rn,以下類(lèi)同。XRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data例2.14、設(shè)P1=0B4H=10110100B,執(zhí)行:
XRLP1,#00110001B
結(jié)果按#00110001取反,即:
P1=10000101B=85H這稱(chēng)為“指定位取反”。第64頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月§2-5控制轉(zhuǎn)移類(lèi)指令作用:改變程序計(jì)數(shù)器PC的值,從而改變程序執(zhí)行方向。分為四大類(lèi):無(wú)條件轉(zhuǎn)移指令;條件轉(zhuǎn)移指令;調(diào)用指令;返回指令。
一、無(wú)條件轉(zhuǎn)移指令LJMPaddr16AJMPaddr11SJMPrelJMP@A+DPTR第65頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
LJMPaddr16;長(zhǎng)跳轉(zhuǎn)指令轉(zhuǎn)移目的地址addr16(PC),0000H~FFFFH,64KB
AJMPaddr11;絕對(duì)轉(zhuǎn)移轉(zhuǎn)移目的地址的形成:先(PC)(PC)+2;然后PC15~11不變,PC10~0addr10~064KB=216=25×211=32×2KB轉(zhuǎn)移目的地址與(PC)+2在同一個(gè)2KB范圍內(nèi)。
第66頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月SJMPrel;短轉(zhuǎn)移,相對(duì)尋址。轉(zhuǎn)移目的地址=(PC)+2+rel,所以rel=轉(zhuǎn)移目的地址-(PC)-2但,實(shí)際使用中常寫(xiě)成SJMPaddr16,匯編時(shí)會(huì)自動(dòng)轉(zhuǎn)換成rel。
JMP@A+DPTR;間接轉(zhuǎn)移,散轉(zhuǎn)移指令。轉(zhuǎn)移目的地址=A+DPTR本指令不影響標(biāo)志位。常用于多分支程序結(jié)構(gòu)中,可在程序運(yùn)行過(guò)程中動(dòng)態(tài)地決定程序分支走向。第67頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.15、執(zhí)行下列程序解:MOVDPTR,#TABLEJMP@A+DPTR………TABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3………第68頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月比較LJMP、AJMP、SJMP、JMP轉(zhuǎn)移的起點(diǎn)和范圍:
LJMPLJMPPC64K
AJMPAJMP2K
SJMPSJMPPC+2-128+127
JMPJMP@A+DPTRPCPC+2DPTR256第69頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月二、條件轉(zhuǎn)移指令實(shí)現(xiàn)按照一定條件決定轉(zhuǎn)移的方向,分三類(lèi):判零轉(zhuǎn)移指令比較轉(zhuǎn)移指令循環(huán)轉(zhuǎn)移指令JZrel:若A=0,則轉(zhuǎn)移,否則順序執(zhí)行。JNZrel:若A≠0,則轉(zhuǎn)移,否則順序執(zhí)行。轉(zhuǎn)移目的地址=PC+2+rel不影響任何標(biāo)志位。
1、判零轉(zhuǎn)移
第70頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.16、將外RAM的一個(gè)數(shù)據(jù)塊(首地址為DATA1)傳送到內(nèi)部數(shù)據(jù)RAM(首地址為DATA2),遇到傳送的數(shù)據(jù)為零時(shí)停止傳送,試編程。解:MOVR0,#DATA2MOVDPTR,#DATA1LOOP1:MOVXA,@DPTRJZLOOP2MOV@R0,AINCR0INCDPTRSJMPLOOP1LOOP2:SJMPLOOP2第71頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月2、比較轉(zhuǎn)移指令功能:比較二個(gè)字節(jié)中的值,若不等,則轉(zhuǎn)移。CJNEA,#data,rel;若A≠#data,則PCPC+3+rel,否則順序
執(zhí)行;若A<#data,則CY=1;否則CY=0。CJNEA,direct,relCJNE@Ri,#data,relCJNERn,#data,rel該類(lèi)指令具有比較和判斷雙重功能。
轉(zhuǎn)移目的地址=PC+3+rel若第一操作數(shù)內(nèi)容小于第二操作數(shù)內(nèi)容,則Cy=1,否則Cy=0。第72頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月該類(lèi)指令可產(chǎn)生三分支程序:相等分支;大于分支;小于分支。
A=B嗎?
出口YNA>B嗎?
入口YN123第73頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.17、設(shè)P1口的P1.0~P1.3為準(zhǔn)備就緒信號(hào)輸入端,當(dāng)該四位為全1時(shí),說(shuō)明各項(xiàng)工作已準(zhǔn)備好,單片機(jī)可順序執(zhí)行,否則,循環(huán)等待。解:WAIT:MOVA,P1ANLA,#0FHCJNEA,#0FH,WAIT;P1.0~P1.3不為全1時(shí),返回WAITMOVR2,A第74頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月3、循環(huán)轉(zhuǎn)移指令DJNZRn,rel;RnRn-1,若Rn≠0,則PCPC+2+rel,否則順序執(zhí)行(二字節(jié)指令)DJNZdirect,rel;(direct)(direct)-1,若(direct)≠0,則PCPC+3+rel,否則順序執(zhí)行(三字節(jié)指令)本指令也為雙功能指令,即減1操作和判斷轉(zhuǎn)移操作。第一操作數(shù)內(nèi)容減1后,若差值不為零,則轉(zhuǎn)移;否則順序執(zhí)行。轉(zhuǎn)移目的地址=PC+2或3+rel第75頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.18、將8031內(nèi)部RAM的40H~4FH單元置初值#A0H~#AFH。解:MOVR0,#40HMOVR2,#10HMOVA,#0A0HLOOP:MOV@R0,AINCR0INCADJNZR2,LOOP
………
第76頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月LCALLaddr16;長(zhǎng)調(diào)用ACALLaddr11;絕對(duì)調(diào)用LCALLaddr16;轉(zhuǎn)移范圍64KB,不影響標(biāo)志位。執(zhí)行中自動(dòng)完成如下過(guò)程:
PCPC+3SPSP+1(SP)PC7~0,保護(hù)斷點(diǎn)地址低字節(jié);
SPSP+2(SP)PC15~8,保存斷點(diǎn)地址高字節(jié); PCaddr16,目的地址送PC,轉(zhuǎn)子程序。
三、調(diào)用指令第77頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月LCALL34H56H
MOV????執(zhí)行結(jié)果:SP=09H,(09H)=21H,(08H)=03H,
PC=3456H
SP07HSPSP08H09H2100H3456H外ROM內(nèi)RAMPC+3PC2103HPC03H21H例2.19、設(shè)SP=07H,PC=2100H,子程序首地址為3456H,執(zhí)行:
LCALL3456HMOVA,20H第78頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月ACALLaddr11:
轉(zhuǎn)移范圍與(PC)+2在同一個(gè)2KB內(nèi)。不影響任何標(biāo)志位,執(zhí)行中機(jī)器自動(dòng)完成下列過(guò)程:
PCPC+2SPSP+1(SP)PC7~0SPSP+2
(SP)PC15~8PC10~0addr10~0
第79頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月三、返回指令從子程序返回主程序。RET;調(diào)用子程序返回;RETI;中斷子程序返回。結(jié)論:RET返回地址事先已知,而RETI的返回地址在程序執(zhí)行中產(chǎn)生的,不固定。不影響標(biāo)志位,但PSW不能恢復(fù)到中斷前的狀態(tài)。其機(jī)器自動(dòng)操作過(guò)程如下:
PC15~8
(SP)
SPSP-1PC7~0(SP)
SPSP-1
第80頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.20、設(shè)SP=0BH,(0AH)=23H,(0BH)=01H
執(zhí)行:RETMOV
????
(PC)=0123H(返回主程序)結(jié)果:SP=09H,0123HSP0BHSPSP0AH09H3456H外ROM內(nèi)RAMPCPC
23H01H23H01H(PC)=第81頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月空操作指令NOP;空操作不執(zhí)行任何操作,僅僅使(PC)+1,繼續(xù)執(zhí)行下條指令,不影響標(biāo)志位,在ROM中占一個(gè)字節(jié)。用于延時(shí)調(diào)整。
第82頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月§2-6位操作類(lèi)指令包括:位傳送指令、條件轉(zhuǎn)移指令、位運(yùn)算指令。位操作由單片機(jī)內(nèi)布爾處理器來(lái)完成。位地址的三種表示:1)使用直接位地址表示;如20H、30H、33H等;2)使用位寄存器名來(lái)表示;如C、OV、F0等;3)用字節(jié)寄存器名后加位數(shù)來(lái)表示;如PSW.4、P0.5、ACC.3等;第83頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月一、位傳送指令MOVC,bitMOVbit,C功能:C(bit);或(bit)C
二、位狀態(tài)控制指令CLRbit;(bit)0SETBbit;(bit)1CPLbit;(bit)
(/bit)
CLRCSETBCCPLC第84頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月例2.21:若C=1,P3=11000101B,P1=00110101B,執(zhí)行以下指令: MOVP1.3,CMOVC,P3.3MOVP1.2,C第85頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月
ANLC,bit;CC∧(bit)ANLC,/bit;CC∧(/bit)
ORLC,bit;CC∨(bit)ORLC,/bit;CC∨(/bit)三、位邏輯操作指令第86頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月四、布爾條件轉(zhuǎn)移指令有5條,分別對(duì)C和直接位地址進(jìn)行測(cè)試,并根據(jù)其狀態(tài)執(zhí)行轉(zhuǎn)移。1、判布爾累加器轉(zhuǎn)移JCrel;C=1,轉(zhuǎn)移,否則順序執(zhí)行。JNCrel;C=0,轉(zhuǎn)移,否則順序執(zhí)行。不影響標(biāo)志。轉(zhuǎn)移地址:PCPC+rel第87頁(yè),課件共97頁(yè),創(chuàng)作于2023年2月解:MOVA,30HCJNEA,40H,LOOP1SETB7FHSJMP$LOOP1:JCLOOP2MOV20H,AMOV21H,40HSJMP$LOOP2:MOV20H,40HMOV21H,A
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)一體化燈具數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)針管市場(chǎng)調(diào)查研究報(bào)告
- 五年級(jí)語(yǔ)文在線(xiàn)教學(xué)計(jì)劃與評(píng)估
- 化工行業(yè)工序銜接措施最佳實(shí)踐
- 2025年部編版一年級(jí)語(yǔ)文上教學(xué)計(jì)劃跨學(xué)科融合
- 旅游業(yè)環(huán)境管理體系與措施
- 部編版九年級(jí)語(yǔ)文教學(xué)計(jì)劃評(píng)估標(biāo)準(zhǔn)
- IT行業(yè)節(jié)能降耗方案與實(shí)施
- 市政管網(wǎng)工程風(fēng)險(xiǎn)管理措施
- 建筑行業(yè)國(guó)際標(biāo)準(zhǔn)與認(rèn)證培訓(xùn)
- 深圳2024-2025學(xué)年度四年級(jí)第一學(xué)期期末數(shù)學(xué)試題
- 中考語(yǔ)文復(fù)習(xí)說(shuō)話(huà)要得體
- 《工商業(yè)儲(chǔ)能柜技術(shù)規(guī)范》
- 華中師范大學(xué)教育技術(shù)學(xué)碩士研究生培養(yǎng)方案
- 醫(yī)院醫(yī)學(xué)倫理委員會(huì)章程
- xx單位政務(wù)云商用密碼應(yīng)用方案V2.0
- 風(fēng)浪流耦合作用下錨泊式海上試驗(yàn)平臺(tái)的水動(dòng)力特性試驗(yàn)
- 高考英語(yǔ)語(yǔ)法專(zhuān)練定語(yǔ)從句含答案
- 有機(jī)農(nóng)業(yè)種植技術(shù)操作手冊(cè)
- 【教案】Unit+5+Fun+Clubs+大單元整體教學(xué)設(shè)計(jì)人教版(2024)七年級(jí)英語(yǔ)上冊(cè)
- 2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版期末測(cè)評(píng)卷(含答案)
評(píng)論
0/150
提交評(píng)論