C51單片機(jī)教程第2章_第1頁(yè)
C51單片機(jī)教程第2章_第2頁(yè)
C51單片機(jī)教程第2章_第3頁(yè)
C51單片機(jī)教程第2章_第4頁(yè)
C51單片機(jī)教程第2章_第5頁(yè)
已閱讀5頁(yè),還剩130頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第2章章 單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)2.1 指令系統(tǒng)概述指令系統(tǒng)概述2.2 尋址方式尋址方式2.3 指令功能介紹指令功能介紹2.4 小結(jié)小結(jié)習(xí)題習(xí)題通過(guò)對(duì)本章的學(xué)習(xí),讀者應(yīng)具備以下能力:通過(guò)對(duì)本章的學(xué)習(xí),讀者應(yīng)具備以下能力:熟練掌握不同尋址方式以及匯編指令的用法熟練掌握不同尋址方式以及匯編指令的用法掌握偽指令的使用以及匯編語(yǔ)言程序的完整格式掌握偽指令的使用以及匯編語(yǔ)言程序的完整格式掌握算術(shù)運(yùn)算類(lèi)指令對(duì)掌握算術(shù)運(yùn)算類(lèi)指令對(duì)PSW各標(biāo)志位的影響各標(biāo)志位的影響理解匯編語(yǔ)言程序的執(zhí)行過(guò)程理解匯編語(yǔ)言程序的執(zhí)行過(guò)程本章學(xué)習(xí)目標(biāo)本章學(xué)習(xí)目標(biāo)一種計(jì)算機(jī)所有指令的集合,稱(chēng)為該計(jì)算機(jī)的指令一種計(jì)算機(jī)所有

2、指令的集合,稱(chēng)為該計(jì)算機(jī)的指令系統(tǒng)。它是表征計(jì)算機(jī)性能的重要標(biāo)志。各類(lèi)計(jì)算系統(tǒng)。它是表征計(jì)算機(jī)性能的重要標(biāo)志。各類(lèi)計(jì)算機(jī)都有專(zhuān)用的指令系統(tǒng)。機(jī)都有專(zhuān)用的指令系統(tǒng)。2.1 指令系統(tǒng)概述指令系統(tǒng)概述MCS-51單片機(jī)共有單片機(jī)共有111條指令,有幾種不同的分類(lèi)方條指令,有幾種不同的分類(lèi)方法。法。(1) 按指令功能分類(lèi),如圖按指令功能分類(lèi),如圖2-1所示。所示。2.1.1 指令分類(lèi)指令分類(lèi)圖圖2-1 按指令功能分類(lèi)圖按指令功能分類(lèi)圖(2) 按指令字長(zhǎng)分類(lèi),如圖按指令字長(zhǎng)分類(lèi),如圖2-2所示。所示。圖圖2-2按指令字長(zhǎng)分類(lèi)圖按指令字長(zhǎng)分類(lèi)圖(3) 按指令執(zhí)行時(shí)間分類(lèi),如圖按指令執(zhí)行時(shí)間分類(lèi),如圖2-3

3、所示。所示。圖圖2-3 按指令執(zhí)行時(shí)間分類(lèi)圖按指令執(zhí)行時(shí)間分類(lèi)圖用用MCS-51單片機(jī)匯編語(yǔ)言表示的指令格式如下:?jiǎn)纹瑱C(jī)匯編語(yǔ)言表示的指令格式如下:標(biāo)號(hào)標(biāo)號(hào): 操作碼操作碼目的操作數(shù)目的操作數(shù),源操作數(shù)源操作數(shù); 注釋注釋一條匯編語(yǔ)句是由標(biāo)號(hào)、操作碼、操作數(shù)和注釋部一條匯編語(yǔ)句是由標(biāo)號(hào)、操作碼、操作數(shù)和注釋部分組成的,其中方括號(hào)中的部分是可選項(xiàng)。分組成的,其中方括號(hào)中的部分是可選項(xiàng)。例如:例如: AA: ADD A, #10H;執(zhí)行加法執(zhí)行加法操作操作AA: 為標(biāo)號(hào),為標(biāo)號(hào),ADD為操作碼,為操作碼,A與與10H為操作數(shù),為操作數(shù),“;”后面為注釋部分。后面為注釋部分。2.1.2 指令格式指令

4、格式用匯編語(yǔ)言編寫(xiě)程序時(shí),應(yīng)注意以下幾個(gè)問(wèn)題:用匯編語(yǔ)言編寫(xiě)程序時(shí),應(yīng)注意以下幾個(gè)問(wèn)題: (1) 標(biāo)號(hào)標(biāo)號(hào)標(biāo)號(hào)是語(yǔ)句地址的標(biāo)志符號(hào)。有關(guān)標(biāo)號(hào)的規(guī)定如下:標(biāo)號(hào)是語(yǔ)句地址的標(biāo)志符號(hào)。有關(guān)標(biāo)號(hào)的規(guī)定如下: 標(biāo)號(hào)由標(biāo)號(hào)由18個(gè)字母或數(shù)字組成,可以使用一個(gè)下個(gè)字母或數(shù)字組成,可以使用一個(gè)下劃線符號(hào)劃線符號(hào)“_”。 第一個(gè)字符必須是字母。第一個(gè)字符必須是字母。 指令助記符或系統(tǒng)中保留使用的字符串不能作為指令助記符或系統(tǒng)中保留使用的字符串不能作為標(biāo)號(hào)。標(biāo)號(hào)。 標(biāo)號(hào)后面必須跟一個(gè)冒號(hào)。標(biāo)號(hào)后面必須跟一個(gè)冒號(hào)。 一條語(yǔ)句可以有標(biāo)號(hào),也可以沒(méi)有標(biāo)號(hào)。標(biāo)號(hào)的一條語(yǔ)句可以有標(biāo)號(hào),也可以沒(méi)有標(biāo)號(hào)。標(biāo)號(hào)的有無(wú)取決于本程序

5、中其他語(yǔ)句是否需要訪問(wèn)這條語(yǔ)有無(wú)取決于本程序中其他語(yǔ)句是否需要訪問(wèn)這條語(yǔ)句。句。以下是合法的標(biāo)號(hào)以下是合法的標(biāo)號(hào)以下是不合法的標(biāo)號(hào)以下是不合法的標(biāo)號(hào)LOOP1:5LOOP: (第一個(gè)字符是第一個(gè)字符是數(shù)字)數(shù)字)START: A*5: (“*”不能在標(biāo)號(hào)中出不能在標(biāo)號(hào)中出 現(xiàn))現(xiàn))Q4_:ADD: (指令助記符)指令助記符)SSS: START(無(wú)冒號(hào))無(wú)冒號(hào))L123: L12345678: (超過(guò)超過(guò)8個(gè)字符)個(gè)字符)(2) 操作碼操作碼規(guī)定語(yǔ)句執(zhí)行的操作。操作碼是以指令助記符或偽規(guī)定語(yǔ)句執(zhí)行的操作。操作碼是以指令助記符或偽指令助記符表示的。操作碼是匯編指令中惟一不能指令助記符表示的。操作

6、碼是匯編指令中惟一不能空缺的部分??杖钡牟糠?。(3) 操作數(shù)操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。在一條指令中,用于給指令的操作提供數(shù)據(jù)或地址。在一條指令中,操作數(shù)可以為操作數(shù)可以為1項(xiàng)、項(xiàng)、2項(xiàng)或項(xiàng)或3項(xiàng),各操作數(shù)之間用逗號(hào)項(xiàng),各操作數(shù)之間用逗號(hào)隔開(kāi),操作數(shù)也可能空缺。隔開(kāi),操作數(shù)也可能空缺。例如:例如: LOOP: INC A;1項(xiàng)操作數(shù)項(xiàng)操作數(shù)ADD A,#50H;2項(xiàng)操作數(shù)項(xiàng)操作數(shù)CJNE A,#5,LOOP;3項(xiàng)操作數(shù)項(xiàng)操作數(shù)RET;無(wú)操作數(shù)無(wú)操作數(shù)(4) 注釋注釋注釋不屬于語(yǔ)句的功能部分,它只對(duì)語(yǔ)句進(jìn)行解釋注釋不屬于語(yǔ)句的功能部分,它只對(duì)語(yǔ)句進(jìn)行解釋說(shuō)明。在程序匯編時(shí)注釋字段不被匯

7、編,可有可無(wú),說(shuō)明。在程序匯編時(shí)注釋字段不被匯編,可有可無(wú),只起說(shuō)明作用。注釋內(nèi)容以只起說(shuō)明作用。注釋內(nèi)容以“;”開(kāi)頭。開(kāi)頭。(5) 分隔符分隔符分隔符用于分割語(yǔ)句的各個(gè)部分,以便于區(qū)分。冒分隔符用于分割語(yǔ)句的各個(gè)部分,以便于區(qū)分。冒號(hào)號(hào)“: ”用于標(biāo)號(hào)之后;空格用于操作碼和操作數(shù)用于標(biāo)號(hào)之后;空格用于操作碼和操作數(shù)之間;逗號(hào)之間;逗號(hào)“,”用于操作數(shù)之間;分號(hào)用于操作數(shù)之間;分號(hào)“;”用用于注釋之前。于注釋之前。為節(jié)省存儲(chǔ)空間,為節(jié)省存儲(chǔ)空間,MCS-51單片機(jī)采用變字長(zhǎng)指令方單片機(jī)采用變字長(zhǎng)指令方式。按式。按8位二進(jìn)制數(shù)為一個(gè)字節(jié),指令字長(zhǎng)有單字節(jié)、位二進(jìn)制數(shù)為一個(gè)字節(jié),指令字長(zhǎng)有單字節(jié)、

8、雙字節(jié)和三字節(jié)雙字節(jié)和三字節(jié)3種,在存儲(chǔ)單元中分別占種,在存儲(chǔ)單元中分別占13個(gè)單個(gè)單元。元。指令周期是指執(zhí)行一條指令所需要的時(shí)間。指令字指令周期是指執(zhí)行一條指令所需要的時(shí)間。指令字節(jié)數(shù)越多,所占存儲(chǔ)單元?jiǎng)t越多,但指令周期并不節(jié)數(shù)越多,所占存儲(chǔ)單元?jiǎng)t越多,但指令周期并不與指令所占字節(jié)數(shù)成比例。與指令所占字節(jié)數(shù)成比例。2.1.3 指令字長(zhǎng)和指令周期指令字長(zhǎng)和指令周期尋址方式是指尋址方式是指CPU尋找操作數(shù)或操作數(shù)地址的方式。尋找操作數(shù)或操作數(shù)地址的方式。計(jì)算機(jī)執(zhí)行程序的過(guò)程是不斷地尋找操作數(shù)并進(jìn)行計(jì)算機(jī)執(zhí)行程序的過(guò)程是不斷地尋找操作數(shù)并進(jìn)行操作的過(guò)程。操作的過(guò)程。MCS-51單片機(jī)共有單片機(jī)共有

9、7種尋址方式,分種尋址方式,分述如下。述如下。2.2 尋址方式尋址方式1. 尋址范圍尋址范圍指令中直接給出操作數(shù)所在的單元地址,它的尋址指令中直接給出操作數(shù)所在的單元地址,它的尋址范圍為單片機(jī)內(nèi)部范圍為單片機(jī)內(nèi)部RAM。(1) 內(nèi)部?jī)?nèi)部RAM低低128單元。在指令中直接以單元地單元。在指令中直接以單元地址形式給出,地址范圍址形式給出,地址范圍00H7FH;(2) 特殊功能寄存器特殊功能寄存器SFR。直接尋址是直接尋址是SFR惟一的惟一的一種尋址方式。一種尋址方式。SFR可以以單元地址給出,也可以用可以以單元地址給出,也可以用寄存器符號(hào)形式給出(寄存器符號(hào)形式給出(A、AB、DPTR除外)。除外

10、)。2.2.1 直接尋址直接尋址2. 使用注意事項(xiàng)使用注意事項(xiàng)(1) 尋址特殊功能寄存器尋址特殊功能寄存器SFR時(shí),可以用直接地址,時(shí),可以用直接地址,也可以用寄存器名。也可以用寄存器名。例如:例如:MOV A, 0D0H;A(D0H)MOV A, PSW;A(PSW)這兩條指令匯編后機(jī)器碼完全一樣,均為這兩條指令匯編后機(jī)器碼完全一樣,均為E5D0H,其中其中D0H為程序狀態(tài)字為程序狀態(tài)字PSW寄存器的物理地址。物寄存器的物理地址。物理地址理地址D0前要加前要加0(凡以字母(凡以字母AF開(kāi)頭的十六進(jìn)制開(kāi)頭的十六進(jìn)制數(shù)均需加前導(dǎo)數(shù)均需加前導(dǎo)0)。)。(2) 在在MCS-51單片機(jī)指令系統(tǒng)中,累加

11、器單片機(jī)指令系統(tǒng)中,累加器A有三有三種不同的表達(dá)方式,即種不同的表達(dá)方式,即A、ACC和和E0H,分屬不同的分屬不同的尋址方式,但指令的執(zhí)行結(jié)果完全相同。尋址方式,但指令的執(zhí)行結(jié)果完全相同。例如:例如:INC A;寄存器尋址方式寄存器尋址方式INC ACC;直接尋址方式直接尋址方式INC 0E0H;直接尋址方式直接尋址方式操作數(shù)直接由指令給出,通常緊跟指令操作碼之后操作數(shù)直接由指令給出,通常緊跟指令操作碼之后的字節(jié)是操作數(shù),該操作數(shù)被稱(chēng)為立即數(shù)。一般立的字節(jié)是操作數(shù),該操作數(shù)被稱(chēng)為立即數(shù)。一般立即數(shù)可以是即數(shù)可以是8位二進(jìn)制數(shù),也可以是位二進(jìn)制數(shù),也可以是16位二進(jìn)制數(shù)。位二進(jìn)制數(shù)。2.2.2

12、 立即尋址立即尋址例如:例如: MOV A,#7AH MOV DPTR,#1234H注意:注意: 立即數(shù)前加立即數(shù)前加“#”號(hào),以區(qū)別直接地址。號(hào),以區(qū)別直接地址。例如:例如:MOV A, #30H; A 30HMOV A, 30H; A(30H)第一條指令是把立即數(shù)第一條指令是把立即數(shù)30H送累加器送累加器A,而第二條指而第二條指令把令把30H單元的內(nèi)容送累加器單元的內(nèi)容送累加器A。這種尋址方式中,操作數(shù)在寄存器中,確定了寄存這種尋址方式中,操作數(shù)在寄存器中,確定了寄存器,就得到了操作數(shù)??捎糜诩拇嫫鲗ぶ返募拇嫫髌?,就得到了操作數(shù)。可用于寄存器尋址的寄存器有:有: (1) 四組工作寄存器四組

13、工作寄存器R0R7共共32個(gè)工作寄存器。個(gè)工作寄存器。由程序狀態(tài)字由程序狀態(tài)字PSW中的中的RS1、RS0兩位的狀態(tài)進(jìn)行當(dāng)兩位的狀態(tài)進(jìn)行當(dāng)前工作寄存器組的選擇。前工作寄存器組的選擇。(2) 部分特殊功能寄存器有部分特殊功能寄存器有A、AB、DPTR和和Cy。例如:例如: MOV A, R3;當(dāng)前當(dāng)前R3中的內(nèi)容送累加中的內(nèi)容送累加器器A。2.2.3 寄存器尋址寄存器尋址作為被尋找的操作數(shù)。用來(lái)存放操作數(shù)地址的寄存作為被尋找的操作數(shù)。用來(lái)存放操作數(shù)地址的寄存器稱(chēng)為指針。這種尋址方式稱(chēng)為寄存器間接尋址方器稱(chēng)為指針。這種尋址方式稱(chēng)為寄存器間接尋址方式。式。MCS-51單片機(jī)用于間接尋址的寄存器有單片

14、機(jī)用于間接尋址的寄存器有R0、R1、堆棧指針堆棧指針SP以及數(shù)據(jù)指針以及數(shù)據(jù)指針DPTR。2.2.4 寄存器間接尋址寄存器間接尋址1. 尋址范圍尋址范圍(1) 內(nèi)部?jī)?nèi)部RAM低低128單元,地址范圍單元,地址范圍00H7FH,用用Ri(i = 0,1)作為間接尋址寄存器。作為間接尋址寄存器。(2) 片外片外RAM的的64KB,地址范圍地址范圍0000HFFFFH,用用DPTR作為間接尋址寄存器。也可用作為間接尋址寄存器。也可用Ri作為間接尋作為間接尋址寄存器,此時(shí)用址寄存器,此時(shí)用P2口指示高口指示高8位地址,位地址,Ri指示低指示低8位地址,可尋址片外位地址,可尋址片外RAM(I/O口)口)

15、64KB區(qū)域。區(qū)域。例如:例如: 設(shè)(設(shè)(R1)=60H,(,(60H)=50HMOV A, R1;執(zhí)行結(jié)果(執(zhí)行結(jié)果(A)=50H2. 使用注意事項(xiàng)使用注意事項(xiàng)(1) 為區(qū)別寄存器尋址方式,間接尋址寄存器前加為區(qū)別寄存器尋址方式,間接尋址寄存器前加。(2) 寄存器間接尋址方式不能用于對(duì)特殊功能寄存寄存器間接尋址方式不能用于對(duì)特殊功能寄存器器SFR的尋址。的尋址。例如:例如: MOV R0, #0F0HMOV A, R0以上指令不能執(zhí)行,因?yàn)橐陨现噶畈荒軋?zhí)行,因?yàn)?F0H為特殊功能寄存器為特殊功能寄存器B的物理地址,而對(duì)于特殊功能寄存器,不能對(duì)其進(jìn)的物理地址,而對(duì)于特殊功能寄存器,不能對(duì)其進(jìn)行

16、間接尋址,只能直接尋址。行間接尋址,只能直接尋址。(3) 棧操作指令也是間接尋址方式,它以堆棧指針棧操作指令也是間接尋址方式,它以堆棧指針SP作為間接尋址寄存器。作為間接尋址寄存器。MCS-51單片機(jī)的變址尋址是以數(shù)據(jù)指針單片機(jī)的變址尋址是以數(shù)據(jù)指針DPTR或程或程序計(jì)數(shù)器序計(jì)數(shù)器PC作為基址寄存器,以累加器作為基址寄存器,以累加器A作為變址作為變址寄存器,并以?xún)烧邇?nèi)容相加形成新的寄存器,并以?xún)烧邇?nèi)容相加形成新的16位地址作為位地址作為操作數(shù)地址,再尋址該地址,讀取數(shù)據(jù)。操作數(shù)地址,再尋址該地址,讀取數(shù)據(jù)。例如:例如: MOVC A, A+PC 設(shè)執(zhí)行指令之前(設(shè)執(zhí)行指令之前(A)= 50H,

17、要取的操作數(shù)為要取的操作數(shù)為37H,該指令所在地址為該指令所在地址為3F00H單元。單元。2.2.5 變址尋址變址尋址指令功能是把該指令當(dāng)前地址指令功能是把該指令當(dāng)前地址PC值與值與A累加器內(nèi)容累加器內(nèi)容相加形成操作碼地址相加形成操作碼地址3F51H,3F51H中的內(nèi)容中的內(nèi)容37H送送A累加器。(當(dāng)前地址為取指后的累加器。(當(dāng)前地址為取指后的PC值,本例值,本例PC當(dāng)當(dāng)前值為前值為3F01H。)。)指令執(zhí)行過(guò)程如圖指令執(zhí)行過(guò)程如圖2-4所示。所示。圖圖2-4 變址尋址示意圖變址尋址示意圖對(duì)對(duì)MCS-51單片機(jī)指令系統(tǒng)變址尋址方式的幾點(diǎn)說(shuō)明:?jiǎn)纹瑱C(jī)指令系統(tǒng)變址尋址方式的幾點(diǎn)說(shuō)明: (1) 變址

18、尋址方式只能對(duì)程序存儲(chǔ)器進(jìn)行尋址,因變址尋址方式只能對(duì)程序存儲(chǔ)器進(jìn)行尋址,因此只能用于讀取數(shù)據(jù),而不能用于存放數(shù)據(jù),它主此只能用于讀取數(shù)據(jù),而不能用于存放數(shù)據(jù),它主要用于查表性質(zhì)的訪問(wèn)。要用于查表性質(zhì)的訪問(wèn)。(2) 變址尋址指令只有變址尋址指令只有3條:條: MOVC A,A+PCMOVC A,A+DPTRJMP A+DPTR前兩條指令是在程序存儲(chǔ)器中尋找操作數(shù),指令執(zhí)前兩條指令是在程序存儲(chǔ)器中尋找操作數(shù),指令執(zhí)行完畢行完畢PC當(dāng)前值不變。后一條指令是要獲得程序的當(dāng)前值不變。后一條指令是要獲得程序的跳轉(zhuǎn)地址,指令執(zhí)行完畢跳轉(zhuǎn)地址,指令執(zhí)行完畢PC值改變。值改變。相對(duì)尋址用于訪問(wèn)程序存儲(chǔ)器,只出

19、現(xiàn)在轉(zhuǎn)移指令相對(duì)尋址用于訪問(wèn)程序存儲(chǔ)器,只出現(xiàn)在轉(zhuǎn)移指令中。中?!皩ぶ穼ぶ贰辈皇菍ふ也僮鲾?shù)的地址,而是尋找程不是尋找操作數(shù)的地址,而是尋找程序跳轉(zhuǎn)地址,它以序跳轉(zhuǎn)地址,它以PC的當(dāng)前值加上指令中給出的相的當(dāng)前值加上指令中給出的相對(duì)偏移量(對(duì)偏移量(rel)形成轉(zhuǎn)移地址。相對(duì)偏移量(形成轉(zhuǎn)移地址。相對(duì)偏移量(rel)是一個(gè)帶符號(hào)的是一個(gè)帶符號(hào)的8位二進(jìn)制數(shù),以補(bǔ)碼形式出現(xiàn)。所位二進(jìn)制數(shù),以補(bǔ)碼形式出現(xiàn)。所以程序的轉(zhuǎn)移范圍為以以程序的轉(zhuǎn)移范圍為以PC當(dāng)前值為中心,介于當(dāng)前值為中心,介于-128+127之間。之間。2.2.6 相對(duì)尋址相對(duì)尋址例如:例如: JC rel設(shè)設(shè)rel=85H,Cy=1,這

20、是一條以這是一條以Cy狀態(tài)為條件的轉(zhuǎn)狀態(tài)為條件的轉(zhuǎn)移指令,因?yàn)樵撝噶顬閮勺止?jié)指令,移指令,因?yàn)樵撝噶顬閮勺止?jié)指令,CPU取出指令取出指令的第二個(gè)字節(jié)時(shí),的第二個(gè)字節(jié)時(shí),PC當(dāng)前值為原當(dāng)前值為原PC值值+2。由于。由于Cy=1,因此程序轉(zhuǎn)向(因此程序轉(zhuǎn)向(PC)+2+rel單元去執(zhí)行。注單元去執(zhí)行。注意此時(shí)意此時(shí)rel=85H為負(fù)數(shù)。為負(fù)數(shù)。若轉(zhuǎn)移指令放在若轉(zhuǎn)移指令放在2002H單元,取出指令后單元,取出指令后PC指向指向2004H單元,新的轉(zhuǎn)移地址(單元,新的轉(zhuǎn)移地址(PC)+rel=2004H+85H=2004H+FF85H(16位二進(jìn)制補(bǔ)碼)位二進(jìn)制補(bǔ)碼)=1F89H,經(jīng)補(bǔ)碼運(yùn)算后,形成跳

21、轉(zhuǎn)地址經(jīng)補(bǔ)碼運(yùn)算后,形成跳轉(zhuǎn)地址1F89H。指指令執(zhí)行過(guò)程如圖令執(zhí)行過(guò)程如圖2-5所示。所示。圖圖2-5 相對(duì)尋址(相對(duì)尋址(JC 85H)示意圖示意圖MCS-51單片機(jī)設(shè)有獨(dú)立的位處理器,又稱(chēng)為布爾處單片機(jī)設(shè)有獨(dú)立的位處理器,又稱(chēng)為布爾處理器,可對(duì)位地址空間的理器,可對(duì)位地址空間的211個(gè)位地址進(jìn)行運(yùn)算和傳個(gè)位地址進(jìn)行運(yùn)算和傳送操作。送操作。2.2.7 位尋址位尋址位尋址范圍位尋址范圍(1) 內(nèi)部?jī)?nèi)部RAM的位尋址區(qū),共的位尋址區(qū),共16個(gè)單元的個(gè)單元的128位,位,單元地址為單元地址為20H2FH,位地址為位地址為00H7FH,位地位地址的表示方法可以用直接位地址或單元地址加位的址的表示方

22、法可以用直接位地址或單元地址加位的表示方法。表示方法。例如:例如: MOVC, 7AH或或MOVC, 2FH.2此例中,此例中,7AH與與2FH.2表示的是同一個(gè)位地址(見(jiàn)表表示的是同一個(gè)位地址(見(jiàn)表1-3,書(shū),書(shū)9頁(yè)頁(yè))。)。(2) 特殊功能寄存器特殊功能寄存器SFR中可供位尋址的專(zhuān)用寄存中可供位尋址的專(zhuān)用寄存器共器共11個(gè),其中有個(gè),其中有83位可供位尋址,這些位地址在指位可供位尋址,這些位地址在指令中有令中有4種表達(dá)方式。種表達(dá)方式。 直接使用位地址:直接使用位地址: MOV C,0D6H 位名稱(chēng)表示法:位名稱(chēng)表示法: MOV C,AC 單元地址加位的表示法:?jiǎn)卧刂芳游坏谋硎痉ǎ?MO

23、V C,0D0H.6 專(zhuān)用寄存器符號(hào)加位的表示法:專(zhuān)用寄存器符號(hào)加位的表示法: MOV C,PSW.6為了使讀者更好地理解尋址方式,為了使讀者更好地理解尋址方式,7種尋址方式作用種尋址方式作用范圍見(jiàn)表范圍見(jiàn)表2-1。(見(jiàn)書(shū)。(見(jiàn)書(shū)24頁(yè))頁(yè))以上對(duì)于尋址方式舉例中,多是針對(duì)源操作數(shù)的,以上對(duì)于尋址方式舉例中,多是針對(duì)源操作數(shù)的,實(shí)際上目的操作數(shù)也有尋址問(wèn)題。實(shí)際上目的操作數(shù)也有尋址問(wèn)題。源操作數(shù)為間接尋址方式,目的操作數(shù)為直接尋址源操作數(shù)為間接尋址方式,目的操作數(shù)為直接尋址方式。但總的來(lái)說(shuō)源操作數(shù)尋址方式多,目的操作方式。但總的來(lái)說(shuō)源操作數(shù)尋址方式多,目的操作數(shù)尋址方式較少。源操作數(shù)有立即尋址

24、、直接尋址、數(shù)尋址方式較少。源操作數(shù)有立即尋址、直接尋址、寄存器尋址、間接尋址、變址尋址和位尋址寄存器尋址、間接尋址、變址尋址和位尋址6種尋址種尋址方式。目的操作數(shù)有直接尋址、寄存器尋址、間接方式。目的操作數(shù)有直接尋址、寄存器尋址、間接尋址和位尋址尋址和位尋址4種尋址方式。種尋址方式。2.2.8 尋址方式小結(jié)尋址方式小結(jié)綜上所述,綜上所述,MCS-51單片機(jī)的編址方式有兩個(gè)突出的單片機(jī)的編址方式有兩個(gè)突出的特點(diǎn):特點(diǎn): 一是內(nèi)部數(shù)據(jù)存儲(chǔ)器與內(nèi)部一是內(nèi)部數(shù)據(jù)存儲(chǔ)器與內(nèi)部I/O口統(tǒng)一編址;口統(tǒng)一編址;二是外部數(shù)據(jù)存儲(chǔ)器與外部二是外部數(shù)據(jù)存儲(chǔ)器與外部I/O口也是統(tǒng)一編址。這口也是統(tǒng)一編址。這樣對(duì)樣對(duì)

25、I/O口的操作就和對(duì)數(shù)據(jù)存儲(chǔ)器的操作一樣,對(duì)口的操作就和對(duì)數(shù)據(jù)存儲(chǔ)器的操作一樣,對(duì)于內(nèi)部數(shù)據(jù)存儲(chǔ)器以直接尋址方式的一切操作,對(duì)于內(nèi)部數(shù)據(jù)存儲(chǔ)器以直接尋址方式的一切操作,對(duì)內(nèi)部?jī)?nèi)部I/O口同樣適用。口同樣適用。在介紹指令功能之前,先把指令中使用的一些符號(hào)在介紹指令功能之前,先把指令中使用的一些符號(hào)的意義做簡(jiǎn)要說(shuō)明,見(jiàn)表的意義做簡(jiǎn)要說(shuō)明,見(jiàn)表2-2。(見(jiàn)書(shū)。(見(jiàn)書(shū)24頁(yè))頁(yè))下面按指令功能分類(lèi)介紹下面按指令功能分類(lèi)介紹MCS-51單片機(jī)的指令。單片機(jī)的指令。2.3 指令功能介紹指令功能介紹數(shù)據(jù)傳送類(lèi)指令是指令系統(tǒng)中使用最頻繁的指令,數(shù)據(jù)傳送類(lèi)指令是指令系統(tǒng)中使用最頻繁的指令,主要用于數(shù)據(jù)的保存及交

26、換等場(chǎng)合。按其操作方式主要用于數(shù)據(jù)的保存及交換等場(chǎng)合。按其操作方式又可分為數(shù)據(jù)傳送、數(shù)據(jù)交換和棧操作。又可分為數(shù)據(jù)傳送、數(shù)據(jù)交換和棧操作。2.3.1 數(shù)據(jù)傳送類(lèi)指令數(shù)據(jù)傳送類(lèi)指令1. 內(nèi)部數(shù)據(jù)傳送指令內(nèi)部數(shù)據(jù)傳送指令MOV指令格式指令格式MOV,這類(lèi)指令的源操作數(shù)和目的操作數(shù)都在單片機(jī)內(nèi)部。這類(lèi)指令的源操作數(shù)和目的操作數(shù)都在單片機(jī)內(nèi)部。可以是片內(nèi)可以是片內(nèi)RAM地址,也可以是特殊功能寄存器地址,也可以是特殊功能寄存器SFR的地址(立即數(shù)除外)。的地址(立即數(shù)除外)。指令功能是把源操作數(shù)指定的字節(jié)變量復(fù)制到目的指令功能是把源操作數(shù)指定的字節(jié)變量復(fù)制到目的操作數(shù)所指定的單元或寄存器中,源字節(jié)不變。

27、操作數(shù)所指定的單元或寄存器中,源字節(jié)不變。(1) 立即數(shù)傳送指令指令功能是把源操作數(shù)送指定立即數(shù)傳送指令指令功能是把源操作數(shù)送指定單元或寄存器,源操作數(shù)為立即數(shù)。單元或寄存器,源操作數(shù)為立即數(shù)。MOV A,#data;A dataMOV Rn,#data;Rn data, n=07MOV Ri,#data ;(;(Ri) data,i=0,1MOV direct,#data ;direct dataMOV DPTR,#data16;DPTR data16 (2) 內(nèi)部數(shù)據(jù)存儲(chǔ)器(內(nèi)部數(shù)據(jù)存儲(chǔ)器(Rn、內(nèi)部?jī)?nèi)部RAM、SFR)與與累加器累加器A之間傳送數(shù)據(jù)。之間傳送數(shù)據(jù)。MOV A,Rn;A(R

28、n),), n=07MOV Rn,A;Rn(A)MOV A,Ri; A(Ri),), i=01MOV Ri,A; (Ri)(A)MOV A,direct ;A(direct)MOV direct,A;direct(A)(3) 內(nèi)部?jī)?nèi)部RAM中中Rn、SFR與片內(nèi)與片內(nèi)RAM之間的數(shù)據(jù)之間的數(shù)據(jù)傳送。傳送。MOV direct,Rn ;direct(Rn)MOV Rn, direct;Rn (direct )MOV direct, Ri ;direct(Ri) MOV Ri, direct ;(;(Ri)(direct)MOV direct2,direct1 ;direct2(direct1)例

29、例2-1 設(shè)內(nèi)部設(shè)內(nèi)部RAM中(中(30H)40H,(,(40H)10H,P1口作輸入口,(口作輸入口,(P1)0CAH,程序及執(zhí)行程序及執(zhí)行后的結(jié)果如下:后的結(jié)果如下: MOV R0,#30H;單元地址單元地址30H送送R0中中MOV A,R0 ;R0間接尋址,將間接尋址,將30H單單元內(nèi)容元內(nèi)容送送AMOV R1,A;A送送R1MOV B,R1 ;R1間接尋址,將間接尋址,將40H單單元內(nèi)容元內(nèi)容送送BMOV R1,P 1 ;將將P1內(nèi)容送內(nèi)容送40H單元單元MOV P2,P1;將將P1內(nèi)容送內(nèi)容送P2執(zhí)行結(jié)果:執(zhí)行結(jié)果: (R0)=30H,(,(R1)=40H,(,(A)=40H, (B

30、)=10H,(,(P1)=0CAH, (40H)=0CAH,(,(P2)=0CAH2. 外部數(shù)據(jù)存儲(chǔ)器(或外部數(shù)據(jù)存儲(chǔ)器(或I/O口)的讀寫(xiě)指令口)的讀寫(xiě)指令MOVX這類(lèi)指令用于訪問(wèn)片外這類(lèi)指令用于訪問(wèn)片外RAM或擴(kuò)展的或擴(kuò)展的I/O口。口。(1) 用用DPTR進(jìn)行間址尋址的指令進(jìn)行間址尋址的指令MOVX A,DPTR;A(DPTR) MOVX DPTR,A ;(;(DPTR)(A)DPTR為為16位數(shù)據(jù)指針,該指令可尋址外部位數(shù)據(jù)指針,該指令可尋址外部RAM 64KB范圍(范圍(0000H0FFFH)。)。地址低地址低8位由位由P0口輸口輸出,地址高出,地址高8位由位由P2口輸出,數(shù)據(jù)通過(guò)口

31、輸出,數(shù)據(jù)通過(guò)P0口讀口讀/寫(xiě)。寫(xiě)。(2) 用用Ri進(jìn)行間址尋址的指令進(jìn)行間址尋址的指令MOVX A,Ri ;A(Ri) MOVX Ri,A;(;(Ri)(A)指令可尋址范圍指令可尋址范圍 若外部擴(kuò)展若外部擴(kuò)展RAM小于等于小于等于256個(gè)單元,則用個(gè)單元,則用Ri間接尋址進(jìn)行數(shù)據(jù)傳送,間接尋址進(jìn)行數(shù)據(jù)傳送,8位地址線足夠使用。位地址線足夠使用。 若外部擴(kuò)展較大的若外部擴(kuò)展較大的RAM區(qū)域,需用區(qū)域,需用P2口輸出高口輸出高8位地址,則用位地址,則用Ri表示低表示低8位地址,位地址,P0口分時(shí)作低口分時(shí)作低8位地址線和數(shù)據(jù)線,位地址線和數(shù)據(jù)線,P2口應(yīng)事先預(yù)置。若設(shè)計(jì)循環(huán)口應(yīng)事先預(yù)置。若設(shè)計(jì)循

32、環(huán)程序,則程序,則Ri被加到被加到0或減到或減到0時(shí)必須考慮對(duì)時(shí)必須考慮對(duì)P2口高口高8位位地址進(jìn)位或借位的關(guān)系。地址進(jìn)位或借位的關(guān)系。例如,若外部例如,若外部RAM中,(中,(20FFH)=30H,(,(2100H)=15H執(zhí)行:執(zhí)行: MOV DPTR,#20FFHINCDPTRMOV A,DPTR結(jié)果:結(jié)果: 外部外部RAM中中2100H單元內(nèi)容送單元內(nèi)容送A,(,(A)=15H執(zhí)行:執(zhí)行: MOV P2,#20HMOV R0,#0FFHINCR0MOVX A, R0結(jié)果:結(jié)果: 外部外部RAM中中2000H單元內(nèi)容送單元內(nèi)容送A,而不是而不是2100H單元內(nèi)容送單元內(nèi)容送A。例例2-2

33、 把片外把片外RAM的的70H單元中的一個(gè)數(shù)單元中的一個(gè)數(shù)X,送到片送到片外外RAM的的1010H單元。單元。程序如下:程序如下: MOV P2,00HMOV R0,70HMOVX A,R0MOV DPTR,1010HMOVX DPTR,A注意:注意: 外部外部RAM之間不能直接傳送數(shù)據(jù),必須通過(guò)之間不能直接傳送數(shù)據(jù),必須通過(guò)累加器累加器A傳送。傳送。3. 程序存儲(chǔ)器讀指令程序存儲(chǔ)器讀指令MOVCMOVC A,A+DPTR;A(A)+(DPTR)MOVC A,A+PC ;A(A)+(PC)指令功能:指令功能: 把累加器把累加器A作為變址寄存器,將其中的作為變址寄存器,將其中的內(nèi)容與基址寄存器(

34、內(nèi)容與基址寄存器(DPTR、PC)的內(nèi)容相加,得的內(nèi)容相加,得到程序存儲(chǔ)器某單元的地址,再把該地址單元中的到程序存儲(chǔ)器某單元的地址,再把該地址單元中的內(nèi)容送累加器內(nèi)容送累加器A。指令執(zhí)行后,不改變基址寄存器內(nèi)指令執(zhí)行后,不改變基址寄存器內(nèi)容。容。這兩條指令主要用于查表,即完成從程序存儲(chǔ)器讀這兩條指令主要用于查表,即完成從程序存儲(chǔ)器讀取數(shù)據(jù)的功能。但由于兩者使用的基址寄存器不同,取數(shù)據(jù)的功能。但由于兩者使用的基址寄存器不同,因此適用范圍也不同。因此適用范圍也不同。 (1) 第一條指令以第一條指令以DPTR作為基址寄存器,查表時(shí)作為基址寄存器,查表時(shí)DPTR用于存放表格的起始地址。由于用戶(hù)可以很方

35、用于存放表格的起始地址。由于用戶(hù)可以很方便地通過(guò)便地通過(guò)16位數(shù)據(jù)傳送指令給位數(shù)據(jù)傳送指令給DPTR賦值,因此該指賦值,因此該指令適用范圍較為廣泛,表格常數(shù)可以設(shè)置在令適用范圍較為廣泛,表格常數(shù)可以設(shè)置在64KB程程序存儲(chǔ)器中的任何位置。序存儲(chǔ)器中的任何位置。(2) 第二條指令以第二條指令以PC作為基址寄存器,由于作為基址寄存器,由于A為為8位無(wú)符號(hào)數(shù),這就使得該指令查表范圍為以位無(wú)符號(hào)數(shù),這就使得該指令查表范圍為以PC當(dāng)前當(dāng)前值開(kāi)始后的值開(kāi)始后的256個(gè)地址范圍。個(gè)地址范圍。例例2-3 已知累加器已知累加器A中有一個(gè)中有一個(gè)09范圍內(nèi)的數(shù),用以范圍內(nèi)的數(shù),用以上查表指令編出能查出該數(shù)平方值的

36、程序。設(shè)平方上查表指令編出能查出該數(shù)平方值的程序。設(shè)平方表表頭地址為表表頭地址為2000H。(1) 采用采用DPTR作為基址寄存器作為基址寄存器MOVDPTR,#2000HMOVC A,A+DPTR2000H DB 0,1,4,9,16DB 25,36,49,64,81若原(若原(A)2,查表得查表得4并存于并存于A中。中。(2) 采用采用PC作為基址寄存器作為基址寄存器ORG 1FFBH1FFBHADD A, #data;加修正量加修正量1FFDHMOVC A,A+PC;查表查表1FFEHSJMP ;停機(jī)停機(jī)2000H DB 02001H DB 12002H DB 42009H DB 81E

37、ND查表指令所在單元為查表指令所在單元為1FFDH,取指令后的取指令后的PC當(dāng)前值當(dāng)前值為為1FFEH。若若A不加修正量調(diào)整,將出現(xiàn)查表錯(cuò)誤。不加修正量調(diào)整,將出現(xiàn)查表錯(cuò)誤。修正量修正量=表頭首地址表頭首地址PC當(dāng)前值當(dāng)前值=2000H1FFEH=02H。所以所以data=02H(SJMP指令指令2字節(jié))。字節(jié))。由于由于A為為8位無(wú)符號(hào)數(shù),因此查表指令和被查表格通位無(wú)符號(hào)數(shù),因此查表指令和被查表格通常在同一頁(yè)內(nèi)(頁(yè)內(nèi)地址常在同一頁(yè)內(nèi)(頁(yè)內(nèi)地址00HFFH)。)。4. 堆棧操作指令(堆棧操作指令(PUSH、POP)堆棧操作指令共堆棧操作指令共2條。壓棧指令用于保護(hù)片內(nèi)某個(gè)單條。壓棧指令用于保護(hù)

38、片內(nèi)某個(gè)單元的內(nèi)容,出棧指令用于恢復(fù)片內(nèi)某個(gè)單元的內(nèi)容。元的內(nèi)容,出棧指令用于恢復(fù)片內(nèi)某個(gè)單元的內(nèi)容。PUSHdirect;SP(SP)+1,(,(SP)(direct)POP direct;direct(SP),),SP(SP)1堆棧中的數(shù)據(jù)是堆棧中的數(shù)據(jù)是“后進(jìn)先出后進(jìn)先出”的方式,由堆棧指針的方式,由堆棧指針SP自動(dòng)跟蹤棧頂?shù)刂贰纹瑱C(jī)堆棧編址采用向上生自動(dòng)跟蹤棧頂?shù)刂?。單片機(jī)堆棧編址采用向上生成方式,即棧底占用較低地址,棧頂占用較高地址。成方式,即棧底占用較低地址,棧頂占用較高地址。第一條指令稱(chēng)為壓棧指令,壓棧過(guò)程是先執(zhí)行(第一條指令稱(chēng)為壓棧指令,壓棧過(guò)程是先執(zhí)行(SP)+1 SP,使

39、指針指向新的棧頂單元。然后把直接地使指針指向新的棧頂單元。然后把直接地址單元的內(nèi)容壓入址單元的內(nèi)容壓入SP所指示的單元中。壓棧指令將所指示的單元中。壓棧指令將改變堆棧區(qū)中的數(shù)據(jù)。第二條指令稱(chēng)為出棧指令,改變堆棧區(qū)中的數(shù)據(jù)。第二條指令稱(chēng)為出棧指令,出棧過(guò)程是先將棧頂內(nèi)容彈出到直接尋址單元,然出棧過(guò)程是先將棧頂內(nèi)容彈出到直接尋址單元,然后執(zhí)行后執(zhí)行(SP)1SP,形成新的棧頂?shù)刂贰3鰲V噶钚纬尚碌臈m數(shù)刂?。出棧指令不?huì)改變堆棧區(qū)中的數(shù)據(jù)。不會(huì)改變堆棧區(qū)中的數(shù)據(jù)。例例2-4 設(shè)(設(shè)(30H)=X,(,(40H)=Y,試用堆棧實(shí)現(xiàn)試用堆棧實(shí)現(xiàn)30H和和40H單元中的數(shù)據(jù)交換。單元中的數(shù)據(jù)交換。解:解:

40、 堆棧區(qū)是片內(nèi)堆棧區(qū)是片內(nèi)RAM的一個(gè)數(shù)據(jù)區(qū),進(jìn)棧和出棧的一個(gè)數(shù)據(jù)區(qū),進(jìn)棧和出棧的數(shù)據(jù)符合的數(shù)據(jù)符合“后進(jìn)先出后進(jìn)先出”的原則。的原則。MOV SP,#50H;設(shè)棧頂設(shè)棧頂PUSH 40H;51H(40H),),Y壓入壓入51H單元單元PUSH 30H;52H(30H),),X壓入壓入52H單元單元POP40H;40H(52H),),X彈到彈到40HPOP30H;30H(51H),),Y彈到彈到30H本例壓棧過(guò)程如圖本例壓棧過(guò)程如圖2-6(a)所示,出棧過(guò)程如圖所示,出棧過(guò)程如圖2-6(b)所所示。示。圖圖2-6 例例2-4堆棧變化示意圖堆棧變化示意圖5. 數(shù)據(jù)交換指令數(shù)據(jù)交換指令(1) 整字

41、節(jié)交換指令整字節(jié)交換指令XCH A,RnXCH A,RiXCH A,direct 以上以上3條指令把條指令把A累加器內(nèi)容與內(nèi)部累加器內(nèi)容與內(nèi)部RAM及及SFR中的中的內(nèi)容互相交換,影響內(nèi)容互相交換,影響P標(biāo)志。標(biāo)志。例如,若(例如,若(R0)=20H,(,(A)=3FH,(,(20H)=75H,執(zhí)行指令執(zhí)行指令XCH A, R0執(zhí)行結(jié)果(執(zhí)行結(jié)果(A)=75H,(,(20H)=3FH,(,(R0)=20H(2) 低半字節(jié)交換指令低半字節(jié)交換指令XCHD A, RiA累加器低累加器低4位與片內(nèi)位與片內(nèi)RAM某單元的低某單元的低4位交換,高位交換,高4位不變。位不變。(3) 累加器高低半字節(jié)交換指

42、令累加器高低半字節(jié)交換指令SWAP A將累加器將累加器A中的高中的高4位與低位與低4位內(nèi)容互換,不影響標(biāo)志位內(nèi)容互換,不影響標(biāo)志位。位。例例2-5 已知外部已知外部RAM 2020H單元中有一個(gè)數(shù)單元中有一個(gè)數(shù)X,內(nèi)部?jī)?nèi)部RAM 20H單元有一個(gè)數(shù)單元有一個(gè)數(shù)Y,試編寫(xiě)試編寫(xiě)X、Y交換存儲(chǔ)地交換存儲(chǔ)地址的程序。址的程序。程序如下:程序如下: MOV P2,#20H MOV R1,#20HMOVX A,R1XCH A,R1MOVX R1,A例例2-6 已知片內(nèi)已知片內(nèi)50H單元中有一個(gè)單元中有一個(gè)09的數(shù),試編程的數(shù),試編程把它變?yōu)橄鄳?yīng)的把它變?yōu)橄鄳?yīng)的ASCII碼。因?yàn)榇a。因?yàn)?9的的ASCII

43、碼為碼為3039H,因此程序編寫(xiě)如下:因此程序編寫(xiě)如下: MOV R0,#50HMOV A,#30HXCHDA,R0MOV R0,A算術(shù)運(yùn)算類(lèi)指令可以完成加、減、乘、除四則運(yùn)算算術(shù)運(yùn)算類(lèi)指令可以完成加、減、乘、除四則運(yùn)算以及增量、減量和二以及增量、減量和二十進(jìn)制調(diào)整操作。這類(lèi)指令十進(jìn)制調(diào)整操作。這類(lèi)指令直接支持直接支持8位無(wú)符號(hào)數(shù)操作,借助溢出標(biāo)志可對(duì)帶符位無(wú)符號(hào)數(shù)操作,借助溢出標(biāo)志可對(duì)帶符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算。算術(shù)運(yùn)算指令執(zhí)行結(jié)果將影響號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算。算術(shù)運(yùn)算指令執(zhí)行結(jié)果將影響程序狀態(tài)字程序狀態(tài)字PSW,具體影響見(jiàn)表具體影響見(jiàn)表2-3。(見(jiàn)書(shū)。(見(jiàn)書(shū)30頁(yè))頁(yè))2.3.2 算術(shù)運(yùn)算類(lèi)指令算術(shù)運(yùn)

44、算類(lèi)指令1. 加法指令加法指令(1) 不帶進(jìn)位的加法指令不帶進(jìn)位的加法指令A(yù)DD A, Rn;A(A)+(Rn)ADD A, direct;A(A)+(direct) ADD A,Ri;A(A)+(Ri)ADD A,#data;A(A)+data上述指令,把源字節(jié)變量與累加器上述指令,把源字節(jié)變量與累加器A的內(nèi)容相加,結(jié)的內(nèi)容相加,結(jié)果保存在累加器果保存在累加器A中。使用中應(yīng)注意以下問(wèn)題:中。使用中應(yīng)注意以下問(wèn)題: 參加運(yùn)算的兩個(gè)操作數(shù)是參加運(yùn)算的兩個(gè)操作數(shù)是8位二進(jìn)制數(shù),操作結(jié)果位二進(jìn)制數(shù),操作結(jié)果也是也是8位二進(jìn)制數(shù),且運(yùn)算對(duì)位二進(jìn)制數(shù),且運(yùn)算對(duì)PSW中所有標(biāo)志位都產(chǎn)中所有標(biāo)志位都產(chǎn)生影響

45、。生影響。 用戶(hù)可以根據(jù)需要把參加運(yùn)算的兩個(gè)操作數(shù)看成用戶(hù)可以根據(jù)需要把參加運(yùn)算的兩個(gè)操作數(shù)看成無(wú)符號(hào)數(shù)(無(wú)符號(hào)數(shù)(0255),也可以把它們看作是帶符號(hào)),也可以把它們看作是帶符號(hào)數(shù)。若看作帶符號(hào)數(shù),則通常采用補(bǔ)碼形式(數(shù)。若看作帶符號(hào)數(shù),則通常采用補(bǔ)碼形式(-128+127)。例如,若把二進(jìn)制數(shù))。例如,若把二進(jìn)制數(shù)10011010B看作無(wú)符號(hào)看作無(wú)符號(hào)數(shù),則該數(shù)的十進(jìn)制值為數(shù),則該數(shù)的十進(jìn)制值為154;若把它看作帶符號(hào)數(shù),;若把它看作帶符號(hào)數(shù),則它的十進(jìn)制值為則它的十進(jìn)制值為-102。 無(wú)符號(hào)數(shù)運(yùn)算時(shí),要判斷運(yùn)算結(jié)果是否超出范圍無(wú)符號(hào)數(shù)運(yùn)算時(shí),要判斷運(yùn)算結(jié)果是否超出范圍(0255),可以看

46、進(jìn)位標(biāo)志位),可以看進(jìn)位標(biāo)志位CY。若若CY=1則表示則表示運(yùn)算結(jié)果大于運(yùn)算結(jié)果大于255,若,若CY=0則表示運(yùn)算結(jié)果小于等則表示運(yùn)算結(jié)果小于等于于255。帶符號(hào)數(shù)運(yùn)算時(shí),要判斷運(yùn)算結(jié)果是否超出。帶符號(hào)數(shù)運(yùn)算時(shí),要判斷運(yùn)算結(jié)果是否超出范圍(范圍(-128+127),可以看溢出標(biāo)志位),可以看溢出標(biāo)志位OV。若若OV=1表示溢出,表示溢出,OV=0則表示無(wú)溢出。則表示無(wú)溢出。OV=C7 C6,其中其中C7為最高位進(jìn)位位,為最高位進(jìn)位位,C6為次高位進(jìn)位位。注意為次高位進(jìn)位位。注意: 只有帶符號(hào)數(shù)運(yùn)算才有溢出問(wèn)題。只有帶符號(hào)數(shù)運(yùn)算才有溢出問(wèn)題。例例2-7 試分析試分析8051執(zhí)行如下指令后,累加

47、器執(zhí)行如下指令后,累加器A和和PSW各標(biāo)志位的變化狀況。各標(biāo)志位的變化狀況。MOV A,#0CFHADDA,#0A5H解答見(jiàn)書(shū)解答見(jiàn)書(shū)31頁(yè)。頁(yè)。執(zhí)行結(jié)果:執(zhí)行結(jié)果: (A)=74H,(,(PSW)=0C4H若為無(wú)符號(hào)數(shù)運(yùn)算,則若為無(wú)符號(hào)數(shù)運(yùn)算,則Cy=1表示結(jié)果超出(表示結(jié)果超出(0255)。若為帶符號(hào)數(shù)運(yùn)算,則()。若為帶符號(hào)數(shù)運(yùn)算,則(-49)+(-91)=-140超出(超出(-128+127),),OV=1溢出。溢出。(2) 帶進(jìn)位加法指令帶進(jìn)位加法運(yùn)算指令常用于多帶進(jìn)位加法指令帶進(jìn)位加法運(yùn)算指令常用于多字節(jié)加法運(yùn)算。字節(jié)加法運(yùn)算。ADDC A,Rn ;A(A)+(Rn)+ CyADD

48、C A,direct;A(A)+(direct)+ CyADDC A, Ri ;A(A)+(Ri)+ CyADDC A, #data ;A(A)+data+Cy這這4條帶進(jìn)位的加法指令將累加器條帶進(jìn)位的加法指令將累加器A的內(nèi)容加當(dāng)前的內(nèi)容加當(dāng)前Cy標(biāo)志位內(nèi)容,再加源操作數(shù),將和存于累加器標(biāo)志位內(nèi)容,再加源操作數(shù),將和存于累加器A中。中。運(yùn)算結(jié)果將影響標(biāo)志運(yùn)算結(jié)果將影響標(biāo)志Cy、AC、OV、P。例例2-8 設(shè)(設(shè)(A)=0AAH,(,(R0)=55H,Cy=1執(zhí)行指令執(zhí)行指令 ADDC A,R0則使(則使(A)=00H(PSW)=0C0H。2. 帶借位減法指令帶借位減法指令SUBB A, Rn

49、; A(A)(Rn)CySUBB A, direct ; A(A)(direct)CySUBB A, Ri ; A(A)(Ri)CySUBB A, #data ; A(A)dataCy以上以上4條減法指令執(zhí)行過(guò)程與帶進(jìn)位加法指令相似,條減法指令執(zhí)行過(guò)程與帶進(jìn)位加法指令相似,只是把加操作改為減操作即可。只是把加操作改為減操作即可。例例2-9 (A)=76H,立即數(shù)為立即數(shù)為C5H,(,(Cy)=0,求求二者相減結(jié)果。二者相減結(jié)果。 程序?yàn)椋撼绦驗(yàn)椋?SUBB A,#0C5HOV=C7 C6=1 0=1,有溢出,運(yùn)算結(jié)果為有溢出,運(yùn)算結(jié)果為177 +127,(,(A)=0B1H,(,(PSW)=8

50、4H3. 加加1和減和減1指令指令(1) 加加1指令加指令加1指令又稱(chēng)增量指令。指令又稱(chēng)增量指令。INC A ;A(A)+1INC Rn ;Rn(Rn)+1INC direct ;direct(direct)+1INC Ri ;(;(Ri)(Ri)+1INC DPTR;DPTR(DPTR)+1(2) 減減1指令指令DEC A ;A(A)1DEC Rn ;Rn(Rn)1DEC Ri ;(;(Ri)(Ri)1DEC direct ;direct(direct)1 除了除了INC A和和DEC A指令影響指令影響PSW的的P標(biāo)志位外,標(biāo)志位外,其他幾條指令不影響任何標(biāo)志位。其他幾條指令不影響任何標(biāo)志

51、位。4. 乘法指令乘法指令MUL AB指令功能是把累加器指令功能是把累加器A和寄存器和寄存器B中兩個(gè)中兩個(gè)8位無(wú)符號(hào)二位無(wú)符號(hào)二進(jìn)制數(shù)相乘,積的高進(jìn)制數(shù)相乘,積的高8位存在位存在B寄存器中,積的低寄存器中,積的低8位位存在累加器存在累加器A中。運(yùn)算結(jié)果將對(duì)中。運(yùn)算結(jié)果將對(duì)Cy、OV、P標(biāo)志位標(biāo)志位產(chǎn)生如下影響:產(chǎn)生如下影響: (1) 進(jìn)位標(biāo)志位進(jìn)位標(biāo)志位Cy總是清總是清“0”。(2) P標(biāo)志仍為標(biāo)志仍為A累加器的奇偶校驗(yàn)位。累加器的奇偶校驗(yàn)位。(3) 當(dāng)積大于當(dāng)積大于255(B中的內(nèi)容不為中的內(nèi)容不為0)時(shí),)時(shí),OV=1,否則否則OV=0。5. 除法指令除法指令DIV AB該指令把累加器該指

52、令把累加器A中的中的8位無(wú)符號(hào)整數(shù)除以寄存器位無(wú)符號(hào)整數(shù)除以寄存器B中中的的8位無(wú)符號(hào)整數(shù),所得商存在位無(wú)符號(hào)整數(shù),所得商存在A中,余數(shù)存在中,余數(shù)存在B中。中。對(duì)標(biāo)志位的影響如下:對(duì)標(biāo)志位的影響如下: (1) 對(duì)對(duì)Cy和和P標(biāo)志的影響與乘法時(shí)相同。標(biāo)志的影響與乘法時(shí)相同。(2) 當(dāng)除數(shù)為當(dāng)除數(shù)為0時(shí),除法沒(méi)有意義,時(shí),除法沒(méi)有意義,0V=1,否則否則OV=0。6. 二二-十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令DAA ;若若AC=1或或A309,則則A(A)+06H ;若若Cy =1或或A749,則則A(A)+60H該指令用于壓縮該指令用于壓縮BCD碼加法運(yùn)算的十進(jìn)制調(diào)整。使用碼加法運(yùn)算的十進(jìn)制調(diào)整。使

53、用該指令時(shí)應(yīng)注意以下幾點(diǎn):該指令時(shí)應(yīng)注意以下幾點(diǎn): (1) 本指令使用時(shí)跟在本指令使用時(shí)跟在ADD或或ADDC指令之后。指令之后。(2) 不能用不能用DA指令對(duì)指令對(duì)BCD碼減法操作進(jìn)行直接調(diào)整。碼減法操作進(jìn)行直接調(diào)整。(3) 本指令不影響溢出標(biāo)志位本指令不影響溢出標(biāo)志位OV。(4) 借助標(biāo)志位可實(shí)現(xiàn)多位借助標(biāo)志位可實(shí)現(xiàn)多位BCD數(shù)加法結(jié)果的調(diào)整。數(shù)加法結(jié)果的調(diào)整。例例2-10 編寫(xiě)完成編寫(xiě)完成78+93的的BCD加法的程序,并對(duì)調(diào)加法的程序,并對(duì)調(diào)整過(guò)程進(jìn)行分析。整過(guò)程進(jìn)行分析。解:解: 二進(jìn)制加法和十進(jìn)制調(diào)整過(guò)程見(jiàn)書(shū)二進(jìn)制加法和十進(jìn)制調(diào)整過(guò)程見(jiàn)書(shū)33頁(yè)。頁(yè)。相應(yīng)相應(yīng)BCD加法程序?yàn)椋杭臃ǔ?/p>

54、序?yàn)椋?ORG 3000HMOV A,#78H ;A 78HADDA,#93H ;A 78H+93H=0BHDAASJMP END得出結(jié)果(得出結(jié)果(A)=71H,考慮進(jìn)位標(biāo)志(考慮進(jìn)位標(biāo)志(Cy)=1,操操作結(jié)果為作結(jié)果為171。例例2-11 利用利用DA指令作十進(jìn)制減法調(diào)整。將兩個(gè)用壓指令作十進(jìn)制減法調(diào)整。將兩個(gè)用壓縮縮BCD碼表示的十進(jìn)制數(shù)相減,借位標(biāo)志存入碼表示的十進(jìn)制數(shù)相減,借位標(biāo)志存入C累加累加器。設(shè)器。設(shè)20H、21H、22H分別存放被減數(shù)、減數(shù)和差。分別存放被減數(shù)、減數(shù)和差。解:解: 由于由于DA指令不能直接用于減法操作的調(diào)整,因指令不能直接用于減法操作的調(diào)整,因此采用對(duì)減數(shù)求

55、補(bǔ)后再與被減數(shù)相加,然后再進(jìn)行此采用對(duì)減數(shù)求補(bǔ)后再與被減數(shù)相加,然后再進(jìn)行DA調(diào)整的方法實(shí)現(xiàn)。兩位調(diào)整的方法實(shí)現(xiàn)。兩位BCD碼的模為碼的模為102 ,其機(jī),其機(jī)器數(shù)表示為器數(shù)表示為9AH。ORG 2000HN1DATA 20HCLRC ;(;(Cy) 0MOV A,#9AH;(;(A)兩位兩位BCD的模的模102SUBB A,N1+1;(;(A)減數(shù)的補(bǔ)數(shù)減數(shù)的補(bǔ)數(shù)ADDA,N1;(;(A)被減數(shù)被減數(shù)+減數(shù)的減數(shù)的補(bǔ)數(shù)補(bǔ)數(shù)DA;進(jìn)行調(diào)整進(jìn)行調(diào)整CPLC;取借位標(biāo)志取借位標(biāo)志JNCL1;借位標(biāo)志為借位標(biāo)志為0則轉(zhuǎn)移則轉(zhuǎn)移MOV N1+2, A;存差的補(bǔ)數(shù)存差的補(bǔ)數(shù)MOV A,#9AHSUBB

56、A, N1+2;求差的絕對(duì)值求差的絕對(duì)值L1:MOVN1+2,A;存結(jié)果存結(jié)果SJMP ;停機(jī)停機(jī)若被減數(shù)若被減數(shù) 減數(shù),則差為正,借位標(biāo)志為減數(shù),則差為正,借位標(biāo)志為0;若被減;若被減數(shù)數(shù) 減數(shù),則差為負(fù),借位標(biāo)志為減數(shù),則差為負(fù),借位標(biāo)志為1。邏輯運(yùn)算類(lèi)指令包括邏輯運(yùn)算類(lèi)指令包括“與與”、“或或”、“異或異或”、清除、求反和左右移位等邏輯操作,這類(lèi)指令除以清除、求反和左右移位等邏輯操作,這類(lèi)指令除以累加器累加器A為目的寄存器指令外,均不影響為目的寄存器指令外,均不影響PSW中的標(biāo)中的標(biāo)志位。志位。2.3.3 邏輯運(yùn)算指令邏輯運(yùn)算指令1. 邏輯邏輯“與與”、“或或”、“異或異或”指令指令邏輯

57、邏輯“與與”、“或或”、“異或異或”3種操作各有種操作各有6條指條指令,分別用助記符令,分別用助記符ANL、ORL、XRL代表代表“與與”、“或或”、“異或異或”。ANL(ORL、XRL) A,Rn ANL(ORL、XRL) A,Ri ANL(ORL、XRL) A,direct ANL(ORL、XRL) A,#data ANL(ORL、XRL) direct,A ANL(ORL、XRL) direct,#data 以上以上18條指令的功能是,把源操作數(shù)與目的操作數(shù)條指令的功能是,把源操作數(shù)與目的操作數(shù)按位進(jìn)行按位進(jìn)行“與與”(“或或”、“異或異或”)操作,結(jié)果)操作,結(jié)果存于目的操作數(shù)單元或寄

58、存器。存于目的操作數(shù)單元或寄存器。2. 移位指令移位指令RLA ;累加器左環(huán)移累加器左環(huán)移RLC A ;累加器通過(guò)累加器通過(guò)Cy左環(huán)移左環(huán)移RRA ;累加器右環(huán)移累加器右環(huán)移RRC A ;累加器通過(guò)累加器通過(guò)Cy右環(huán)移右環(huán)移每條指令操作過(guò)程如圖每條指令操作過(guò)程如圖2-7所示。所示。累加器每左移一位相當(dāng)于乘以累加器每左移一位相當(dāng)于乘以2。同理,累加器右移。同理,累加器右移一位相當(dāng)于除以一位相當(dāng)于除以2,讀者可以舉例驗(yàn)證。,讀者可以舉例驗(yàn)證。圖圖2-7 累加器移位指令示意圖累加器移位指令示意圖3. 清零、取反指令清零、取反指令CLR A;A0,累加器累加器A清清0,不影,不影響標(biāo)響標(biāo)志位志位CPL

59、 A ;A(A),),累加器累加器A的內(nèi)的內(nèi)容按容按位取反,不影響標(biāo)志位位取反,不影響標(biāo)志位控制轉(zhuǎn)移指令用于改變程序計(jì)數(shù)器控制轉(zhuǎn)移指令用于改變程序計(jì)數(shù)器PC值,以控制程值,以控制程序走向,作用區(qū)間為程序存儲(chǔ)器空間。序走向,作用區(qū)間為程序存儲(chǔ)器空間。2.3.4 控制轉(zhuǎn)移類(lèi)指令控制轉(zhuǎn)移類(lèi)指令1. 無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令(1) 長(zhǎng)轉(zhuǎn)移指令長(zhǎng)轉(zhuǎn)移指令LJMPaddr16;PCaddr16長(zhǎng)轉(zhuǎn)移指令是把指令中長(zhǎng)轉(zhuǎn)移指令是把指令中16位目標(biāo)地址裝入位目標(biāo)地址裝入PC,使程使程序執(zhí)行下條指令時(shí)無(wú)條件轉(zhuǎn)移到序執(zhí)行下條指令時(shí)無(wú)條件轉(zhuǎn)移到addr16處執(zhí)行。因處執(zhí)行。因此,該指令是一條可以在此,該指令是一條

60、可以在64KB范圍內(nèi)轉(zhuǎn)移的指令。范圍內(nèi)轉(zhuǎn)移的指令。(2) 絕對(duì)轉(zhuǎn)移指令絕對(duì)轉(zhuǎn)移指令A(yù)JMP addr11指令中提供指令中提供11位地址,與位地址,與PC當(dāng)前值的高當(dāng)前值的高5位共同組成位共同組成16位目標(biāo)地址,程序無(wú)條件轉(zhuǎn)向目標(biāo)地址。位目標(biāo)地址,程序無(wú)條件轉(zhuǎn)向目標(biāo)地址。11位地址位地址表示的存儲(chǔ)空間為表示的存儲(chǔ)空間為2KB,所以轉(zhuǎn)移目標(biāo)地址必須設(shè)所以轉(zhuǎn)移目標(biāo)地址必須設(shè)置在包含置在包含AJMP指令后第一條指令的第一個(gè)字節(jié)的同指令后第一條指令的第一個(gè)字節(jié)的同一一2KB范圍內(nèi)。范圍內(nèi)。(3) 短轉(zhuǎn)移指令短轉(zhuǎn)移指令SJMP rel;PC(PC)+ 2;PC(PC)+ relrel為地址偏移量,帶符號(hào)為

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論