版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
教學(xué)目的:熟悉80C51系列單片機(jī)的尋址方式及 每一種尋址方式對(duì)應(yīng)的尋址空間;掌 握每一條指令功能。教學(xué)重點(diǎn):1.80C51系列單片機(jī)尋址方式所對(duì)應(yīng) 的尋址空間; 2.80C51系列單片機(jī)指令功能。教學(xué)難點(diǎn):1.數(shù)據(jù)傳送類指令中對(duì)不同的存儲(chǔ)空 間應(yīng)采用的傳送指令及尋址方式。 2.間接尋址方式第4章80C51系列指令系統(tǒng)
●一臺(tái)計(jì)算機(jī)所能執(zhí)行的全部的指令集合§4.1指令系統(tǒng)概述指令是計(jì)算機(jī)中具有特定功能的操作命令●程序與程序設(shè)計(jì)按預(yù)定要求編排的指令序列稱為程序。編排的過程稱為程序設(shè)計(jì)●指令系統(tǒng)一種機(jī)器的指令系統(tǒng)是機(jī)器本身固有的決定了機(jī)器的性能用戶無法改變,必須繼承、學(xué)習(xí)、掌握、應(yīng)用機(jī)器語言:二進(jìn)制代碼,是機(jī)器唯一能直接識(shí)別、執(zhí)行的語言。匯編語言(也稱符號(hào)語言):為了記憶和閱讀方便,制造商對(duì)指令系統(tǒng)每一條指令,都給出了指令助記符。用助記符,操作數(shù),標(biāo)號(hào)編寫的程序稱為匯編語言源程序。一、匯編語言匯編語言必須翻譯成機(jī)器語言才能被機(jī)器執(zhí)行●程序設(shè)計(jì)語言匯編語言:高級(jí)語言:完成由匯編語言到機(jī)器代碼的過程叫匯編匯編的方法有兩種:自動(dòng)匯編、手工匯編由機(jī)器代碼到匯編語言的過程叫反匯編匯編語言源程序機(jī)器語言匯編反匯編交叉匯編二、匯編語言的格式[標(biāo)號(hào):]操作碼[操作數(shù)][;注釋]其中除操作碼部分是必須的,括號(hào)內(nèi)的區(qū)段是任選項(xiàng)。1、標(biāo)號(hào)標(biāo)號(hào)是該指令的符號(hào)地址,可根據(jù)需要設(shè)定必須以字母開始,以“
:”結(jié)束,長(zhǎng)度不超過8個(gè)字符系統(tǒng)中的保留字符不能作標(biāo)號(hào),如:SFR名、ADD等標(biāo)號(hào)可被其他語句的操作數(shù)直接引用源程序中,一個(gè)標(biāo)號(hào)只能定義一個(gè)語句,不能相重名字一個(gè)匯編語句分為四個(gè)區(qū)段操作碼操作碼操作碼2、操作碼由指令系統(tǒng)的助記符、偽指令助記符組成。操作碼是每一句匯編語言所必須的操作碼和操作數(shù)之間用空格分開3、操作數(shù)可為二進(jìn)制數(shù)(B),十進(jìn)制數(shù)(D),十六進(jìn)制數(shù)(H)數(shù)字大于9,則數(shù)字應(yīng)以“0”開頭可以是操作數(shù)地址、立即數(shù)、標(biāo)號(hào)、表達(dá)式如M+3目的操作數(shù)和源操作數(shù)之間用“,”分開可以是寄存器名如A、B、R、DPTRM標(biāo)號(hào)被定義過的BinaryDecimalHexadecimal指出該語句的操作性質(zhì)4、注釋以“;”開頭,是程序員對(duì)指令操作的解釋,以幫助閱讀、理解程序的意義可有可無匯編時(shí)對(duì)這部分不予處理,不譯成任何機(jī)器代碼可用英語或某種簡(jiǎn)潔的方式解釋指令,或打印程序清單
1.匯編指令格式 助記符目的操作數(shù),源操作數(shù);(注釋) 例如:MOV A,#40H ;把40H送累加器A2.指令代碼格式 指令代碼在程序存儲(chǔ)器中存放的數(shù)據(jù)形式。 例如上條指令的指令代碼為:74H.40H,其中74H為操作碼,表達(dá)了指令的操作功能,40H為操作數(shù)。 根據(jù)代碼長(zhǎng)度,80C51單片機(jī)的指令有單字節(jié)、雙字節(jié)和三字節(jié)指令。 按照指令執(zhí)行速度又可分為單周期、雙周期和四周期指令。80C51在基本時(shí)鐘為12MHz時(shí),單周期指令執(zhí)行速度為1MIPS。4.2尋址方式
指令系統(tǒng)的尋址方式規(guī)定了操作數(shù)的訪問方式。80C51指令系統(tǒng)有寄存器尋址、直接尋址、間接尋址、立即尋址、基址變址尋址和相對(duì)尋址等七種尋址方式。4.2.1匯編指令中的符號(hào)約定Rn(n=0~7)--當(dāng)前選中的8個(gè)工作寄存器R0~R7,它在片內(nèi)數(shù)據(jù)存儲(chǔ)器中的地址由PSW中RSl、RS0確定;Ri(i=0或1)--當(dāng)前選中的用于間接尋址的工作寄存器R0、R1,它在片內(nèi)數(shù)據(jù)存儲(chǔ)器中的地址由RS0、RS1確定;direct--8位直接地址,可以是片內(nèi)RAM單元地址或SFR地址;#data8--8位常數(shù);#datal6--16位常數(shù);
addrl6--
16位目的地址,尋址空間64K字節(jié)程序存儲(chǔ)器;addr11--11位目的地址;rel--補(bǔ)碼形式的8位地址偏移量,用于相對(duì)轉(zhuǎn)移指令中bit--位地址,片內(nèi)RAM或SFR的可尋址位的位地址;@--間接尋址寄存器的前綴;/--位操作數(shù)的取反操作前綴。以下符號(hào)僅出現(xiàn)在指令注釋或功能說明中。X--片內(nèi)RAM的直接地址(包含位地址)或寄存器。(X)--在直接尋址方式中,表示直接地址X中的內(nèi)容;在間接尋址方式中,表示由間址寄存器X指出的地址單元。((X))--在間接尋址方式中,表示由間址寄存器X指出的地址單元中的內(nèi)容。--指令操作流程,將箭頭左邊內(nèi)容送入箭頭右邊的單元內(nèi)。
1.立即數(shù)尋址方式 立即數(shù)(指令中的常數(shù))直接參與指令操作。立即數(shù)前必須加“#”標(biāo)記。指令中的立即數(shù)有8位立即數(shù)#data8和16位立即數(shù)#data16。例1MOV A,#3AH ;立即數(shù)3AH送累加器A圖4-1MOVA,#3AH執(zhí)行示意圖
2.直接尋址方式在這種尋址方式中,操作數(shù)項(xiàng)給出的是參加運(yùn)算的操作數(shù)的地址??蓪ぶ房臻g有特殊功能寄存器、內(nèi)部數(shù)據(jù)存儲(chǔ)器以及位地址。其中特殊功能寄存器和位地址空間只能用直接尋址方式來訪問。
例1MOV A,3AH ;把3AH單元的內(nèi)容送A。
例2MOV P1,#10H ;將立即數(shù)10H送P1口。
注意:例2中的目的操作數(shù)P1是直接尋址方式,這里用符號(hào)P1代替了直接地址90H。圖4-2MOVA,3AH執(zhí)行示意圖
3.寄存器尋址方式
寄存器尋址是對(duì)選定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR和進(jìn)位CY中的數(shù)進(jìn)行操作。 例1.MOVA,R2 ;將當(dāng)前工作寄存器的內(nèi)容 送累加器A。(指令代碼為1字節(jié)EA〕
注意R2在片內(nèi)RAM的位置,它由RS0、RS1決定。如PSW中RS1、RS0的值分別為1、0,則現(xiàn)在的R2屬于第二組工作寄存器,那么它的地址為12H。現(xiàn)已知12H中存放著數(shù)值4AH,則執(zhí)行該指令后,4AH就被送到A累加器中。
圖4-2MOVA,R2執(zhí)行示意圖4.寄存器間接尋址方式
在這種尋址方式中,操作數(shù)所指定的寄存器中存放的不是操作數(shù)本身,而是操作數(shù)的地址。這種尋址方式用于訪問片內(nèi)數(shù)據(jù)存儲(chǔ)器或片外數(shù)據(jù)存儲(chǔ)器。間接尋址寄存器:Ri(8位地址指針)和DPTR(16位地址指針),間接尋址寄存器前加@表示間址操作。例1MOV R0,#50H MOV A,@R0例2MOV DPTR,#2760H MOVX @DPTR,A圖4-3MOVA,@R0執(zhí)行示意圖5.變址尋址(基址寄存器+變址寄存器的間接尋址) 變址尋址方式中使用DPTR或PC作基址寄存器,累加器A作變址寄存器。 采用變址尋址的指令只有三條: MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR 前兩條用于程序存儲(chǔ)器的查表操作,后一條用于程序的分支散轉(zhuǎn)。
注:只用于對(duì)程序存儲(chǔ)器(ROM)的訪問,不能訪問RAM用于訪問ROM時(shí),常用于讀表格中的數(shù)據(jù),又稱查表指令A(yù),DPTR訪問前可以人為賦值,而PC不能人為改變,所以MOVC A,@A+DPTR可以訪問64KB,MOVC A,@A+PC只能訪問當(dāng)前起始地址的256個(gè)字節(jié)范圍。
例1現(xiàn)假設(shè)MOVCA,@A+DPTR指令存放在70H單元,ACC中原存放值為E0H,DPTR中值為2000H,則A+DPTR形成的地址為20E0H。20E0H單元中內(nèi)容為47H,則執(zhí)行該指令后,ACC中原E0H被47H代替。該指令執(zhí)行過程示于圖4-4。圖4-4MOVCA,@A+DPTR執(zhí)行示意圖6.相對(duì)尋址方式 相對(duì)尋址是將程序轉(zhuǎn)移到相對(duì)地址的轉(zhuǎn)移指令。 是將程序計(jì)數(shù)器PC中的當(dāng)前內(nèi)容(轉(zhuǎn)移指令的下一條指令地址)與轉(zhuǎn)移指令第二字節(jié)所給出的偏移量相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址。偏移量為帶符號(hào)的數(shù),其范圍為+127~-128。程序設(shè)計(jì)中,相對(duì)地址可以用指令標(biāo)號(hào)或直接地址偏移量數(shù)值,但要注意,相對(duì)轉(zhuǎn)移地址的偏移量不得超過+127~-128。例1JC03H ;若進(jìn)位C=0,則程序順序執(zhí)行, 即不跳轉(zhuǎn),PC=PC+2;若進(jìn)位C= 1,則以PC中的當(dāng)前內(nèi)容為基地址, 加上偏移量03H后所得到的結(jié)果為該 轉(zhuǎn)移指令的目的地址。
圖4-5JC03H指令執(zhí)行示意圖注:①rel偏移量是個(gè)8位有符號(hào)數(shù),-128~127
②通常我們并不直接寫偏移量,而是將其作為標(biāo)號(hào)③這類指令的跳轉(zhuǎn)范圍有限7.位尋址方式 位尋址空間:片內(nèi)RAM的位尋址區(qū)(20H~2FH單元的128位)和SFR中的可位尋址的位單元。 位累加器:在進(jìn)行位操作時(shí),借助于進(jìn)位位C作為操作累加器。
位地址與字節(jié)直接尋址中的字節(jié)地址形式完全一樣,主要由操作碼來區(qū)分,使用時(shí)需予以注意。例1SETB3DH ;將片內(nèi)RAM位地址3DH即27H 單元的第5位置“1”。例2ANLC,3DH;將3DH的位狀態(tài)與進(jìn)位位C 相與,結(jié)果保留在C中。尋址方式尋址空間寄存器尋址工作寄存器R0R7、A、B、CY、DPTR直接尋址片內(nèi)RAM和特殊功能寄存器SFR間接尋址片內(nèi)RAM,片外RAM位尋址片內(nèi)RAM的位尋址區(qū)和SFR中的可位尋址的位單元立即數(shù)尋址程序存儲(chǔ)器基址變址尋址
程序存儲(chǔ)器(@A+PC,@A+DPTR)相對(duì)尋址在程序存儲(chǔ)器256字節(jié)范圍內(nèi)轉(zhuǎn)移操作數(shù)尋址方式與尋址空間80C51指令按功能分類(5類)⑴數(shù)據(jù)傳送(29條)⑵算術(shù)運(yùn)算(24條)⑶邏輯運(yùn)算(24條)⑷控制轉(zhuǎn)移(17條)⑸位操作(17條)共111條指令4.3指令系統(tǒng)分類介紹4.3.1數(shù)據(jù)傳送類(29條)用到的指令助記符有5種:片內(nèi)傳送MOV片外傳送MOVX查表傳送MOVC累加器交換XCH、XCHD、SWAP堆棧操作PUSH、POP1、片內(nèi)RAM數(shù)據(jù)(MOV類)傳送指令格式:MOV〈目的操作數(shù)〉,〈源操作數(shù)〉功能:把源字節(jié)內(nèi)容送目的字節(jié),源字節(jié)內(nèi)容不變以累加器A為目的字節(jié)的傳送:⑴立即數(shù)送累加器MOVA,#data74H立即數(shù)機(jī)器碼;立即數(shù)#data送累加器A雙字節(jié)指令,機(jī)器碼的第一字節(jié)為74H,第二字節(jié)為立即數(shù)⑵寄存器內(nèi)容送累加器MOVA,Rn(n=0~7)單字節(jié)指令,機(jī)器碼相應(yīng)為E8H、E9H、…、EFH工作寄存器組的選擇由狀態(tài)字中的RS0、RS1確定⑶內(nèi)RAM或SFR內(nèi)容送累加器E8H~EFH機(jī)器碼MOVA,direct雙字節(jié)指令,機(jī)器碼的第一字節(jié)為E5H,第二字節(jié)為直接尋址字節(jié)的直接地址E5H直接地址機(jī)器碼;Rn的內(nèi)容送累加器A;以direct為地址的單元的內(nèi)容送累加器A⑷內(nèi)RAM內(nèi)容送累加器MOVA,@Ri(i=0、1)單字節(jié)指令,機(jī)器碼相應(yīng)為E6H、E7H;以Ri內(nèi)容為地址單元中的數(shù)送累加器AE6H~E7H機(jī)器碼以Rn為目的字節(jié)的傳送:⑸立即數(shù)送寄存器MOVRn,#data(n=0~7)78H~7FH立即數(shù)機(jī)器碼;立即數(shù)#data送累加器
Rn雙字節(jié)指令,機(jī)器碼的第一字節(jié)為78H~7FH,第二字節(jié)為立即數(shù)⑹累加器內(nèi)容送寄存器RnMOVRn,A(n=0~7);累加器A的內(nèi)容送Rn單字節(jié)指令,機(jī)器碼相應(yīng)為F8H~FFHF8H~FFH機(jī)器碼⑺內(nèi)RAM或SFR內(nèi)容送寄存器RnMOVRn,direct(n=0~7)雙字節(jié)指令A(yù)8H~AFH直接地址機(jī)器碼;以direct為地址的單元的內(nèi)容送寄存器Rn⑻立即數(shù)送內(nèi)RAM或SFRMOVdirect,#data;立即數(shù)#data送以direct為地址的單元三字節(jié)指令直接地址立即數(shù)75H機(jī)器碼⑼累加器內(nèi)容送內(nèi)RAM或SFRMOVdirect,A;累加器送以direct為地址的單元F5H直接地址機(jī)器碼二字節(jié)指令直接地址為目的字節(jié)的傳送:⑽寄存器內(nèi)容送內(nèi)RAM或SFRMOVdirect,Rn(n=0~7);寄存器Rn內(nèi)容送以direct為地址的單元二字節(jié)指令88H~8FH直接地址機(jī)器碼⑾內(nèi)RAM或SFR之間直接傳送MOVdirect1,direct2源地址目的地址85H機(jī)器碼;內(nèi)RAM或SFR任意兩個(gè)單元之間傳送數(shù)據(jù)三字節(jié)指令⑿內(nèi)RAM數(shù)據(jù)送內(nèi)RAM或SFRMOVdirect,@Ri(i=0、1)二字節(jié)指令86H~87H直接地址機(jī)器碼;以Ri內(nèi)容為地址單元中的數(shù)送內(nèi)RAM或SFR⒀立即數(shù)送內(nèi)RAMMOV@Ri,#data(i=0、1);立即數(shù)#data送以Ri內(nèi)容為地址的單元76H~77H立即數(shù)機(jī)器碼二字節(jié)指令直接地址為目的字節(jié)的傳送:⒁累加器內(nèi)容送內(nèi)RAMMOV@Ri,A(i=0、1);累加器內(nèi)容送以Ri內(nèi)容為地址的單元單字節(jié)指令F6H~F7H機(jī)器碼⒂內(nèi)RAM或SFR數(shù)據(jù)送內(nèi)RAMMOV@Ri,direct(i=0、1)二字節(jié)指令A(yù)6H~A7H直接地址機(jī)器碼;以direct為地址的單元內(nèi)容送Ri內(nèi)容為地址的單元⒃16位立即數(shù)傳送指令MOVDPTR,#data16;16位立即數(shù)送DPTR中,設(shè)置地址指針。三字節(jié)指令立即數(shù)高8位立即數(shù)低8位90H機(jī)器碼MOV類傳送指令小結(jié)MOVA,#data立即數(shù)送累加器MOVA,Rn寄存器內(nèi)容送累加器MOVA,direct直接地址內(nèi)容送累加器MOVA,@Ri內(nèi)RAM內(nèi)容送累加器MOVRn,#data立即數(shù)送寄存器MOVRn,A累加器內(nèi)容送寄存器RnMOVRn,direct直接地址內(nèi)容送寄存器Rn指令助記符說明字節(jié)2121212MOV片內(nèi)傳送指令
MOV類傳送指令小結(jié)MOVdirect1,direct2內(nèi)RAM或SFR之間直接傳送MOVdirect,@Ri內(nèi)RAM數(shù)據(jù)送內(nèi)RAM或SFRMOVdirect,#data立即數(shù)送內(nèi)RAM或SFRMOVdirect,A累加器內(nèi)容送內(nèi)RAM或SFRMOVdirect,Rn寄存器內(nèi)容送內(nèi)RAM或SFR指令助記符說明字節(jié)32232MOV@Ri,#data立即數(shù)送內(nèi)RAMMOV@Ri,A累加器內(nèi)容送內(nèi)RAMMOV@Ri,direct內(nèi)RAM數(shù)據(jù)送內(nèi)RAM或SFRMOVDPTR,#data1616位立即數(shù)傳送指令2123MOV片內(nèi)傳送指令2、片外數(shù)據(jù)(MOVX)類傳送指令累加器A與外部RAM傳送數(shù)據(jù)用MOVX⑴外部RAM送累加器AMOVXA,@Ri(i=0、1)單字節(jié)指令,機(jī)器碼相應(yīng)為E2H、E3H;以Ri內(nèi)容為外部RAM地址的單元中的數(shù)送AE2H~E3H機(jī)器碼⑵累加器內(nèi)容送外RAMMOVX@Ri,A(i=0、1);累加器內(nèi)容送以Ri內(nèi)容為地址的外部RAM單元單字節(jié)指令F2H~F3H機(jī)器碼RDWR⑶外部RAM送累加器AMOVXA,@DPTR單字節(jié)指令,機(jī)器碼相應(yīng)為E0H;以DPTR內(nèi)容為地址的外部RAM單元中的數(shù)送AE0H機(jī)器碼⑷累加器內(nèi)容送外RAMMOVX@DPTR,A;累加器內(nèi)容送以DPTR內(nèi)容為地址的外部RAM單元單字節(jié)指令,機(jī)器碼相應(yīng)為F0HF0H機(jī)器碼RDWRMOVX類傳送指令小結(jié)指令助記符說明字節(jié)1111MOVXA,@Ri外部RAM送累加器AMOVX@Ri,A累加器內(nèi)容送外RAMMOVXA,@DPTR外部RAM送累加器AMOVX@DPTR,A累加器內(nèi)容送外RAMMOVX片外傳送指令例:將片外RAM120H單元的內(nèi)容傳送到片外RAM
地址為78H的單元。MOVDPTR,#0120HMOVXA,@DPTRMOVR0,#78HMOVX@R0,A例:將片內(nèi)RAM12H單元的內(nèi)容傳送到片內(nèi)RAM
地址為78H的單元。MOV78H,12H;外部RAM送累加器A;累加器內(nèi)容送外RAM3、查表(MOVC)類傳送指令MOVC類傳送指令,均為基址加變址寄存器尋址:MOVCA,@A+DPTR;以DPTR作基址寄存器,A作變址寄存器,兩者;相加形成ROM地址,將該單元內(nèi)容讀入A單字節(jié)指令,機(jī)器碼相應(yīng)為93H93H機(jī)器碼⑴以DPTR作基址加變址尋址長(zhǎng)查表指令16位MOVCA,@A+PC單字節(jié)指令,機(jī)器碼相應(yīng)為83H83H機(jī)器碼⑵以PC作基址加變址尋址;取指后PC增“1”,以當(dāng)前PC作基址,A作變址,兩者;相加形成ROM地址,將該單元內(nèi)容讀入A短查表指令MOVC類傳送指令小結(jié)指令助記符說明字節(jié)11MOVCA,@A+DPTRMOVCA,@A+PC以DPTR作基址加變址尋址以PC作基址加變址尋址MOVDPTR,#2000HMOVCA,@A+DPTR2004H2003H2002H2001H2000H2008H2009H2005H2006H2007H存儲(chǔ)器00H01H04H09H10H19H24H31H40H51H例:在外部ROM中存放0~9的平方值。根據(jù)累加器
A中的數(shù)(0~9),查找對(duì)應(yīng)的平方值。用DPTR作基址寄存器指向表格的首地址用A作變址寄存器實(shí)際上A中的值是表格中的第幾項(xiàng)表格首址操作碼PCPCDPTR2000HA
03H09HMOVCA,@A+DPTR93HROM……00H2000H01H04H09H2001H2002H2003H…;設(shè)(A)=03H,查“3”的平方ALU用PC作基址寄存器,它并不指向表格首址;是PC當(dāng)前值與所查表格首址之間的距離;即(PC)+#dataTABBEL表格首址設(shè)(A)=03H,是表格中的第3項(xiàng);單字節(jié)指令,設(shè)指令在ROM中的地址為1FF0HADDA,#dataMOVCA,@A+PC2000H1FF1H-000FH;#data是變址調(diào)整值#dataPC當(dāng)前值表格首址TABBEL:DB00HDB01HDB04H…DB09H2000H12HA……PCPC2003HTABBELPCPC操作碼MOVCA,@A+PC93HROM……00H2000H01H04H09H2001H2002H2003H…1FF0H1FF1H(PC)=1FF1HA12H09H;查“3”的平方ALUTABBEL4、交換(XCH、XCHD、SWAP類)傳送指令⑴寄存器內(nèi)容與累加器內(nèi)容交換XCHA,Rn(n=0~7)C8H~CFH機(jī)器碼;(A)(Rn)單字節(jié)指令⑵內(nèi)RAM或SFR內(nèi)容與累加器內(nèi)容交換XCHA,direct(n=0~7);(A)(direct)雙字節(jié)指令C5H直接地址機(jī)器碼⑶內(nèi)RAM內(nèi)容與累加器內(nèi)容交換XCHA,@Ri(i=0,1);(A)((Ri))單字節(jié)指令C6H~C7H機(jī)器碼⑷內(nèi)RAM內(nèi)容低4位與累加器低4位內(nèi)容交換XCHDA,@Ri(i=0,1);(A3~0)((Ri)3~0)單字節(jié)指令D6H~D7H機(jī)器碼A(Ri)⑸累加器A高4位與低4位交換SWAPA;(A3~0)(A7~4)單字節(jié)指令C4H機(jī)器碼A交換類傳送指令小結(jié)指令助記符說明字節(jié)12111XCHA,RnXCHA,direct寄存器內(nèi)容與累加器內(nèi)容交換直接地址內(nèi)容與累加器內(nèi)容交換XCHA,@RiXCHDA,@Ri內(nèi)RAM內(nèi)容與累加器內(nèi)容交換內(nèi)RAM內(nèi)容低4位與累加器低4位交換SWAPA累加器A高4位與低4位交換5、堆棧操作指令⑴進(jìn)棧指令PUSHdirectC0H直接地址機(jī)器碼;SP自動(dòng)增“1”,(SP)(SP)
+1;direct地址單元的內(nèi)容壓入SP指向的單元雙字節(jié)指令⑵出棧指令POPdirectD0H直接地址機(jī)器碼;SP自動(dòng)減“1”,(SP)(SP)
-1;SP指向的單元內(nèi)容彈出到以direct為地址的單元雙字節(jié)指令SPSP例:堆棧操作設(shè)(A)=55H,(B)=3FH’建立堆?!瘔喝氩僮鳌瘡棾霾僮?/p>
60H61H62H63H64H55H3FHSPMOVSP,#60HPUSHAPUSHBPOPPSWSP結(jié)果:PSW的內(nèi)容3FH,SP的內(nèi)容為61HPSW3FH傳送指令應(yīng)用舉例例1A=5BH,R1=10H,R2=20H,R3=30H,(30H〕=4FH,執(zhí)行指令: MOVR1,A;A送R1 MOVR2,30H;(30H)送R2MOVR3,#83H;83H送R3 執(zhí)行后,R1=5BH,R2=4FH,R3=83H
例2已知片內(nèi)RAM50H單元中存放數(shù)值為AAH,設(shè)堆棧指針為30H,把此數(shù)值壓入堆棧,然后再彈出到40H單元中。MOVSP,#30H;30HSPPUSH50H;(SP)+1SP, (50H)31HPOP40H;(31H)40H, (SP)-1SP例3已知當(dāng)前PC值為2010H,請(qǐng)用兩種方法將程序存儲(chǔ)器20F0H中的常數(shù)送入累加器A中。
解:方法一、使用查表指令MOVCA,@A+PC MOV A,#0DFH MOVCA,@A+PC
方法二、使用查表指令MOVCA,@A+DPTR MOV DPTR,#20F0H CLR A MOVCA,@A+DPTR
4.3.2算術(shù)運(yùn)算類指令(共24條)
1..算術(shù)運(yùn)算類指令分類 算術(shù)運(yùn)算類指令主要是對(duì)8位無符號(hào)數(shù)據(jù)進(jìn)行算術(shù)操作,其中包括加(ADD)、帶進(jìn)位加(ADDC)、帶借位減法(SUBB)、乘(MUL)、除(DIV)、加1(INC)、減1(DEC)指令;借助溢出標(biāo)志,可對(duì)有符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算;借助進(jìn)位標(biāo)志,可進(jìn)行多精度加、減運(yùn)算;也可以對(duì)壓縮BCD數(shù)進(jìn)行加法運(yùn)算。
ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data8 MUL AB DIV ABINC A INC @Ri INC direct INC DPTRDA A算術(shù)運(yùn)算操作對(duì)PSW中標(biāo)志位的影響指令PSW中的標(biāo)志位COVACADD∨∨∨ADDC∨∨∨SUBB∨∨∨MUL0∨-DIV0∨-
2.算術(shù)運(yùn)算指令應(yīng)用舉例例1已知A=DBH,R4=73H,CY=1,執(zhí)行指令“SUBBA,R4”則結(jié)果如下:A=67H,CY=0,OV=1 4.3.3邏輯運(yùn)算類指令(共25條)
邏輯運(yùn)算類指令主要用于對(duì)兩個(gè)操作數(shù)按位進(jìn)行邏輯操作,操作結(jié)果送到A累加器或直接尋址單元,若直接地址為I/O端口,則為“讀-改-寫”操作。這類指令執(zhí)行的操作主要有“與”(ANL)、“或”(ORL)、“異或”(XRL)以及累加器自身的循環(huán)移位、取反(CPL)、清除(CLR)等。 這些指令執(zhí)行時(shí)一般不影響程序狀態(tài)字寄存器PSW,僅當(dāng)目的操作數(shù)為ACC時(shí)對(duì)奇偶標(biāo)志位有影響。1.邏輯“與”指令A(yù)NLA,RnANLA,#dataANL A,direct ANL A,@Ri ANL direct,AANLdirect,#dataCLR A CPL ARLC A ;帶進(jìn)位位的循環(huán)左移 RL A ;循環(huán)左移2.邏輯運(yùn)算指令舉例例1已知A=1AH,R0=45H,(45H)=39H,執(zhí)行指令ORLA,@R0,則操作如下:00011010(1AH)+)00ll1001(39H)00111011(3BH)
結(jié)果:A=3BH,R0=45H,(45H)=39H,P=14.3.4轉(zhuǎn)移操作類指令(共17條) 這類指令的功能主要是控制程序從原順序執(zhí)行地址轉(zhuǎn)移到其它指令地址上。包括跳轉(zhuǎn)、調(diào)用、散轉(zhuǎn)、返回及空操作等操作。1.轉(zhuǎn)移操作類指令分類
跳轉(zhuǎn):
LJMP addr16 ;addrl6PC AJMP addr11 ;PC+2PC,addr11PC.10PC.0 SJMP rel ;PC+2+relPC,rel是帶符號(hào)的8位偏 移量
調(diào)用和返回:
LCALL addr16 ;PC+3PC,SP+1SP, PC.7~PC.0(SP),SP+1SP, PC.15~PC.8(SP),addr16PC ACALLaddr11;PC+2PC,SP+1SP, PC.7~PC.0(SP),SP+1SP, PC.15~PC.8(SP), addr11PC.10~PC.0
RET ;(SP)PC.15~PC.8,SP-1SP,(SP)PC.7~PC.0,SP-1SP
RETI ;除具有RET指令的功能外,還能將優(yōu) 先級(jí)狀態(tài)觸發(fā)器清除。
散轉(zhuǎn):JMP@A+DPTR;A+DPTRPC,根據(jù)A中數(shù)值的不同,程序?qū)崿F(xiàn)不同的分支轉(zhuǎn)移空操作:NOP
條件轉(zhuǎn)移JZrel ;A=0:PC+2+relPC A≠0:PC+2PCJNZrel ;A≠0:PC+2+relPCA=0:PC+2PCDJNZRn,re1 ;Rn-1Rn,Rn≠0:PC+2+relPCRn=0:PC+2PCDJNZdirect,rel ;(direct)-1(direct),(direct)≠0:PC+3+relPC(direct)=0:PC+3PCCJNEA,direct,rel ;A=(direct):PC+3PC,0CA>(direct):PC+3+relPC,0CA<(direct):PC+3+re1PC,1CCJNEA,#data,rel ;A=data:PC+3PC,0CA>data:PC+3+relPC,0CA<data:PC+3+relPC,1CCJNERn,#data,rel;Rn=data:PC+3PC,0CRn>data:PC+3+relPC,0CRn<data:PC+3+relPC,1CCJNE@Ri,#data,rel;(Ri)=data:PC+3PC,0C(Ri)>data:PC+3+relPC,0C(Ri)<data:PC+3+relPC,1C2.轉(zhuǎn)移指令應(yīng)用舉例例1、根據(jù)R7的內(nèi)容,轉(zhuǎn)向各個(gè)操作程序。R7=0, 轉(zhuǎn)入OPR0R7=1, 轉(zhuǎn)入OPR1
…
…
R7=n, 轉(zhuǎn)入OPRn解:JUMP1:MOVDPTR,#JPTAB1;跳轉(zhuǎn)表首地址送數(shù)據(jù)指針MOVA,R7 ;R72A(修正變址值)ADDA,R7JNCNOAD ;判有否進(jìn)位INCDPH ;有進(jìn)位則加到高字節(jié)地址 NOAD:JMP@A+DPTR;轉(zhuǎn)向形成的散轉(zhuǎn)地址入口JPTAB1:AJMPOPR0;直接轉(zhuǎn)移地址表AJMPOPR1
…
AJMPOPRn例2某子程序SUB1入口地址是340BH,調(diào)用指令LCALLSUB1地址為2042H,該段程序調(diào)用過程中PC及SP的變化如下:地址指令注釋2040HMOVSP,#20H ;設(shè)置堆棧指針,20HSP2042HLCALLSUB1 ;調(diào)用子程序,2045HPC,21HSP,45H(21H), 22HSP,20H(22H),340BHPC340BHSUB1:MOVA,R03412HRET ;(22H)PCH,(21H)PCL,此時(shí)PC=2045H,SP=20H例3、根據(jù)A中數(shù)值,置相應(yīng)的標(biāo)志位。
當(dāng)#dataL≤A≤#dataH,標(biāo)志位F0清零;否則F0置1。
解: ORG 2000H ST: CLR F0 CJNE A,#dataH,HCNT RET HCNT:JC LC SF0: SETB F0 RET LC: CJNE A,#dataL,LCNT RET LCNT:JC SF0 RET
4.3.5位操作類指令(共17條) 包括位變量傳送、邏輯運(yùn)算、控制程序轉(zhuǎn)移等指令。在進(jìn)行位操作時(shí),位累加器C為進(jìn)位標(biāo)志CY。在匯編語言中位地址的表達(dá)方式有如下幾種:(l)直接(位)地址方式:如D4H;(2)點(diǎn)操作符號(hào)方式:如PSW.4,(D0H).4;(3)位名稱方式:如RS1;(4)用戶定義名方式:如用偽指令bit定義下式: SUB.REGbitRS1經(jīng)定義后,指令中可以用SUB.REG代替RS1。
上面4種方式都可表達(dá)PSW(D0H)中第4位,它的位地址是D4H,名稱為RS1,用戶定義為SUB.REG。
1.位操作指令分類位數(shù)據(jù)傳送指令:
MOVC,bit;bitCMOVbit,C;Cbit,對(duì)端口操作時(shí),是“讀-改-寫”指令。位邏輯運(yùn)算指令
ANLC,bit;CbitCANLC,/bit;C/bitC ORLC,bit;CbitCORLC,/bit;C/bitC位修正指令
CLR C ;0CCLR bit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度哺乳期離婚雙方子女保險(xiǎn)權(quán)益轉(zhuǎn)移協(xié)議2篇
- 2024證券公司與其合作方之間國際證券交易合同
- 二零二五版領(lǐng)養(yǎng)未成年人監(jiān)護(hù)責(zé)任協(xié)議參考4篇
- 二零二五版園林景觀木工施工合作協(xié)議4篇
- 二零二五版合伙房產(chǎn)買賣合同及配套裝修設(shè)計(jì)服務(wù)6篇
- 2025年度特種運(yùn)輸服務(wù)買賣合同安全與時(shí)效承諾
- 2025版彩禮退還與婚姻解除條件及財(cái)產(chǎn)分割協(xié)議書范本3篇
- 基于2025年度規(guī)劃的文化園區(qū)停車場(chǎng)建設(shè)與運(yùn)營(yíng)合同3篇
- 二零二五年豪華別墅買賣合同與預(yù)售協(xié)議3篇
- 二零二五年度影視角色選拔拍攝合同
- 職業(yè)衛(wèi)生培訓(xùn)課件
- 柴油墊資合同模板
- 湖北省五市州2023-2024學(xué)年高一下學(xué)期期末聯(lián)考數(shù)學(xué)試題
- 城市作戰(zhàn)案例研究報(bào)告
- 【正版授權(quán)】 ISO 12803:1997 EN Representative sampling of plutonium nitrate solutions for determination of plutonium concentration
- 道德經(jīng)全文及注釋
- 2024中考考前地理沖刺卷及答案(含答題卡)
- 多子女贍養(yǎng)老人協(xié)議書范文
- 彩票市場(chǎng)銷售計(jì)劃書
- 骨科抗菌藥物應(yīng)用分析報(bào)告
- 支付行業(yè)反洗錢與反恐怖融資
評(píng)論
0/150
提交評(píng)論