![C51單片機教程第2章_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/146bdc2f-b5f7-4603-961c-2442a2adfb66/146bdc2f-b5f7-4603-961c-2442a2adfb661.gif)
![C51單片機教程第2章_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/146bdc2f-b5f7-4603-961c-2442a2adfb66/146bdc2f-b5f7-4603-961c-2442a2adfb662.gif)
![C51單片機教程第2章_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/146bdc2f-b5f7-4603-961c-2442a2adfb66/146bdc2f-b5f7-4603-961c-2442a2adfb663.gif)
![C51單片機教程第2章_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/146bdc2f-b5f7-4603-961c-2442a2adfb66/146bdc2f-b5f7-4603-961c-2442a2adfb664.gif)
![C51單片機教程第2章_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/23/146bdc2f-b5f7-4603-961c-2442a2adfb66/146bdc2f-b5f7-4603-961c-2442a2adfb665.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第第2章章 單片機的指令系統(tǒng)單片機的指令系統(tǒng)2.1 指令系統(tǒng)概述指令系統(tǒng)概述2.2 尋址方式尋址方式2.3 指令功能介紹指令功能介紹2.4 小結(jié)小結(jié)習題習題通過對本章的學習,讀者應具備以下能力:通過對本章的學習,讀者應具備以下能力:熟練掌握不同尋址方式以及匯編指令的用法熟練掌握不同尋址方式以及匯編指令的用法掌握偽指令的使用以及匯編語言程序的完整格式掌握偽指令的使用以及匯編語言程序的完整格式掌握算術(shù)運算類指令對掌握算術(shù)運算類指令對PSW各標志位的影響各標志位的影響理解匯編語言程序的執(zhí)行過程理解匯編語言程序的執(zhí)行過程本章學習目標本章學習目標一種計算機所有指令的集合,稱為該計算機的指令一種計算機所有
2、指令的集合,稱為該計算機的指令系統(tǒng)。它是表征計算機性能的重要標志。各類計算系統(tǒng)。它是表征計算機性能的重要標志。各類計算機都有專用的指令系統(tǒng)。機都有專用的指令系統(tǒng)。2.1 指令系統(tǒng)概述指令系統(tǒng)概述MCS-51單片機共有單片機共有111條指令,有幾種不同的分類方條指令,有幾種不同的分類方法。法。(1) 按指令功能分類,如圖按指令功能分類,如圖2-1所示。所示。2.1.1 指令分類指令分類圖圖2-1 按指令功能分類圖按指令功能分類圖(2) 按指令字長分類,如圖按指令字長分類,如圖2-2所示。所示。圖圖2-2按指令字長分類圖按指令字長分類圖(3) 按指令執(zhí)行時間分類,如圖按指令執(zhí)行時間分類,如圖2-3
3、所示。所示。圖圖2-3 按指令執(zhí)行時間分類圖按指令執(zhí)行時間分類圖用用MCS-51單片機匯編語言表示的指令格式如下:單片機匯編語言表示的指令格式如下:標號標號: 操作碼操作碼目的操作數(shù)目的操作數(shù),源操作數(shù)源操作數(shù); 注釋注釋一條匯編語句是由標號、操作碼、操作數(shù)和注釋部一條匯編語句是由標號、操作碼、操作數(shù)和注釋部分組成的,其中方括號中的部分是可選項。分組成的,其中方括號中的部分是可選項。例如:例如: AA: ADD A, #10H;執(zhí)行加法執(zhí)行加法操作操作AA: 為標號,為標號,ADD為操作碼,為操作碼,A與與10H為操作數(shù),為操作數(shù),“;”后面為注釋部分。后面為注釋部分。2.1.2 指令格式指令
4、格式用匯編語言編寫程序時,應注意以下幾個問題:用匯編語言編寫程序時,應注意以下幾個問題: (1) 標號標號標號是語句地址的標志符號。有關標號的規(guī)定如下:標號是語句地址的標志符號。有關標號的規(guī)定如下: 標號由標號由18個字母或數(shù)字組成,可以使用一個下個字母或數(shù)字組成,可以使用一個下劃線符號劃線符號“_”。 第一個字符必須是字母。第一個字符必須是字母。 指令助記符或系統(tǒng)中保留使用的字符串不能作為指令助記符或系統(tǒng)中保留使用的字符串不能作為標號。標號。 標號后面必須跟一個冒號。標號后面必須跟一個冒號。 一條語句可以有標號,也可以沒有標號。標號的一條語句可以有標號,也可以沒有標號。標號的有無取決于本程序
5、中其他語句是否需要訪問這條語有無取決于本程序中其他語句是否需要訪問這條語句。句。以下是合法的標號以下是合法的標號以下是不合法的標號以下是不合法的標號LOOP1:5LOOP: (第一個字符是第一個字符是數(shù)字)數(shù)字)START: A*5: (“*”不能在標號中出不能在標號中出 現(xiàn))現(xiàn))Q4_:ADD: (指令助記符)指令助記符)SSS: START(無冒號)無冒號)L123: L12345678: (超過超過8個字符)個字符)(2) 操作碼操作碼規(guī)定語句執(zhí)行的操作。操作碼是以指令助記符或偽規(guī)定語句執(zhí)行的操作。操作碼是以指令助記符或偽指令助記符表示的。操作碼是匯編指令中惟一不能指令助記符表示的。操作
6、碼是匯編指令中惟一不能空缺的部分。空缺的部分。(3) 操作數(shù)操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。在一條指令中,用于給指令的操作提供數(shù)據(jù)或地址。在一條指令中,操作數(shù)可以為操作數(shù)可以為1項、項、2項或項或3項,各操作數(shù)之間用逗號項,各操作數(shù)之間用逗號隔開,操作數(shù)也可能空缺。隔開,操作數(shù)也可能空缺。例如:例如: LOOP: INC A;1項操作數(shù)項操作數(shù)ADD A,#50H;2項操作數(shù)項操作數(shù)CJNE A,#5,LOOP;3項操作數(shù)項操作數(shù)RET;無操作數(shù)無操作數(shù)(4) 注釋注釋注釋不屬于語句的功能部分,它只對語句進行解釋注釋不屬于語句的功能部分,它只對語句進行解釋說明。在程序匯編時注釋字段不被匯
7、編,可有可無,說明。在程序匯編時注釋字段不被匯編,可有可無,只起說明作用。注釋內(nèi)容以只起說明作用。注釋內(nèi)容以“;”開頭。開頭。(5) 分隔符分隔符分隔符用于分割語句的各個部分,以便于區(qū)分。冒分隔符用于分割語句的各個部分,以便于區(qū)分。冒號號“: ”用于標號之后;空格用于操作碼和操作數(shù)用于標號之后;空格用于操作碼和操作數(shù)之間;逗號之間;逗號“,”用于操作數(shù)之間;分號用于操作數(shù)之間;分號“;”用用于注釋之前。于注釋之前。為節(jié)省存儲空間,為節(jié)省存儲空間,MCS-51單片機采用變字長指令方單片機采用變字長指令方式。按式。按8位二進制數(shù)為一個字節(jié),指令字長有單字節(jié)、位二進制數(shù)為一個字節(jié),指令字長有單字節(jié)、
8、雙字節(jié)和三字節(jié)雙字節(jié)和三字節(jié)3種,在存儲單元中分別占種,在存儲單元中分別占13個單個單元。元。指令周期是指執(zhí)行一條指令所需要的時間。指令字指令周期是指執(zhí)行一條指令所需要的時間。指令字節(jié)數(shù)越多,所占存儲單元則越多,但指令周期并不節(jié)數(shù)越多,所占存儲單元則越多,但指令周期并不與指令所占字節(jié)數(shù)成比例。與指令所占字節(jié)數(shù)成比例。2.1.3 指令字長和指令周期指令字長和指令周期尋址方式是指尋址方式是指CPU尋找操作數(shù)或操作數(shù)地址的方式。尋找操作數(shù)或操作數(shù)地址的方式。計算機執(zhí)行程序的過程是不斷地尋找操作數(shù)并進行計算機執(zhí)行程序的過程是不斷地尋找操作數(shù)并進行操作的過程。操作的過程。MCS-51單片機共有單片機共有
9、7種尋址方式,分種尋址方式,分述如下。述如下。2.2 尋址方式尋址方式1. 尋址范圍尋址范圍指令中直接給出操作數(shù)所在的單元地址,它的尋址指令中直接給出操作數(shù)所在的單元地址,它的尋址范圍為單片機內(nèi)部范圍為單片機內(nèi)部RAM。(1) 內(nèi)部內(nèi)部RAM低低128單元。在指令中直接以單元地單元。在指令中直接以單元地址形式給出,地址范圍址形式給出,地址范圍00H7FH;(2) 特殊功能寄存器特殊功能寄存器SFR。直接尋址是直接尋址是SFR惟一的惟一的一種尋址方式。一種尋址方式。SFR可以以單元地址給出,也可以用可以以單元地址給出,也可以用寄存器符號形式給出(寄存器符號形式給出(A、AB、DPTR除外)。除外
10、)。2.2.1 直接尋址直接尋址2. 使用注意事項使用注意事項(1) 尋址特殊功能寄存器尋址特殊功能寄存器SFR時,可以用直接地址,時,可以用直接地址,也可以用寄存器名。也可以用寄存器名。例如:例如:MOV A, 0D0H;A(D0H)MOV A, PSW;A(PSW)這兩條指令匯編后機器碼完全一樣,均為這兩條指令匯編后機器碼完全一樣,均為E5D0H,其中其中D0H為程序狀態(tài)字為程序狀態(tài)字PSW寄存器的物理地址。物寄存器的物理地址。物理地址理地址D0前要加前要加0(凡以字母(凡以字母AF開頭的十六進制開頭的十六進制數(shù)均需加前導數(shù)均需加前導0)。)。(2) 在在MCS-51單片機指令系統(tǒng)中,累加
11、器單片機指令系統(tǒng)中,累加器A有三有三種不同的表達方式,即種不同的表達方式,即A、ACC和和E0H,分屬不同的分屬不同的尋址方式,但指令的執(zhí)行結(jié)果完全相同。尋址方式,但指令的執(zhí)行結(jié)果完全相同。例如:例如:INC A;寄存器尋址方式寄存器尋址方式INC ACC;直接尋址方式直接尋址方式INC 0E0H;直接尋址方式直接尋址方式操作數(shù)直接由指令給出,通常緊跟指令操作碼之后操作數(shù)直接由指令給出,通常緊跟指令操作碼之后的字節(jié)是操作數(shù),該操作數(shù)被稱為立即數(shù)。一般立的字節(jié)是操作數(shù),該操作數(shù)被稱為立即數(shù)。一般立即數(shù)可以是即數(shù)可以是8位二進制數(shù),也可以是位二進制數(shù),也可以是16位二進制數(shù)。位二進制數(shù)。2.2.2
12、 立即尋址立即尋址例如:例如: MOV A,#7AH MOV DPTR,#1234H注意:注意: 立即數(shù)前加立即數(shù)前加“#”號,以區(qū)別直接地址。號,以區(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個工作寄存器。個工作寄存器。由程序狀態(tài)字由程序狀態(tài)字PSW中的中的RS1、RS0兩位的狀態(tài)進行當兩位的狀態(tài)進行當前工作寄存器組的選擇。前工作寄存器組的選擇。(2) 部分特殊功能寄存器有部分特殊功能寄存器有A、AB、DPTR和和Cy。例如:例如: MOV A, R3;當前當前R3中的內(nèi)容送累加中的內(nèi)容送累加器器A。2.2.3 寄存器尋址寄存器尋址作為被尋找的操作數(shù)。用來存放操作數(shù)地址的寄存作為被尋找的操作數(shù)。用來存放操作數(shù)地址的寄存器稱為指針。這種尋址方式稱為寄存器間接尋址方器稱為指針。這種尋址方式稱為寄存器間接尋址方式。式。MCS-51單片機用于間接尋址的寄存器有單片
14、機用于間接尋址的寄存器有R0、R1、堆棧指針堆棧指針SP以及數(shù)據(jù)指針以及數(shù)據(jù)指針DPTR。2.2.4 寄存器間接尋址寄存器間接尋址1. 尋址范圍尋址范圍(1) 內(nèi)部內(nèi)部RAM低低128單元,地址范圍單元,地址范圍00H7FH,用用Ri(i = 0,1)作為間接尋址寄存器。作為間接尋址寄存器。(2) 片外片外RAM的的64KB,地址范圍地址范圍0000HFFFFH,用用DPTR作為間接尋址寄存器。也可用作為間接尋址寄存器。也可用Ri作為間接尋作為間接尋址寄存器,此時用址寄存器,此時用P2口指示高口指示高8位地址,位地址,Ri指示低指示低8位地址,可尋址片外位地址,可尋址片外RAM(I/O口)口)
15、64KB區(qū)域。區(qū)域。例如:例如: 設(設(R1)=60H,(,(60H)=50HMOV A, R1;執(zhí)行結(jié)果(執(zhí)行結(jié)果(A)=50H2. 使用注意事項使用注意事項(1) 為區(qū)別寄存器尋址方式,間接尋址寄存器前加為區(qū)別寄存器尋址方式,間接尋址寄存器前加。(2) 寄存器間接尋址方式不能用于對特殊功能寄存寄存器間接尋址方式不能用于對特殊功能寄存器器SFR的尋址。的尋址。例如:例如: MOV R0, #0F0HMOV A, R0以上指令不能執(zhí)行,因為以上指令不能執(zhí)行,因為0F0H為特殊功能寄存器為特殊功能寄存器B的物理地址,而對于特殊功能寄存器,不能對其進的物理地址,而對于特殊功能寄存器,不能對其進行
16、間接尋址,只能直接尋址。行間接尋址,只能直接尋址。(3) 棧操作指令也是間接尋址方式,它以堆棧指針棧操作指令也是間接尋址方式,它以堆棧指針SP作為間接尋址寄存器。作為間接尋址寄存器。MCS-51單片機的變址尋址是以數(shù)據(jù)指針單片機的變址尋址是以數(shù)據(jù)指針DPTR或程或程序計數(shù)器序計數(shù)器PC作為基址寄存器,以累加器作為基址寄存器,以累加器A作為變址作為變址寄存器,并以兩者內(nèi)容相加形成新的寄存器,并以兩者內(nèi)容相加形成新的16位地址作為位地址作為操作數(shù)地址,再尋址該地址,讀取數(shù)據(jù)。操作數(shù)地址,再尋址該地址,讀取數(shù)據(jù)。例如:例如: MOVC A, A+PC 設執(zhí)行指令之前(設執(zhí)行指令之前(A)= 50H,
17、要取的操作數(shù)為要取的操作數(shù)為37H,該指令所在地址為該指令所在地址為3F00H單元。單元。2.2.5 變址尋址變址尋址指令功能是把該指令當前地址指令功能是把該指令當前地址PC值與值與A累加器內(nèi)容累加器內(nèi)容相加形成操作碼地址相加形成操作碼地址3F51H,3F51H中的內(nèi)容中的內(nèi)容37H送送A累加器。(當前地址為取指后的累加器。(當前地址為取指后的PC值,本例值,本例PC當當前值為前值為3F01H。)。)指令執(zhí)行過程如圖指令執(zhí)行過程如圖2-4所示。所示。圖圖2-4 變址尋址示意圖變址尋址示意圖對對MCS-51單片機指令系統(tǒng)變址尋址方式的幾點說明:單片機指令系統(tǒng)變址尋址方式的幾點說明: (1) 變址
18、尋址方式只能對程序存儲器進行尋址,因變址尋址方式只能對程序存儲器進行尋址,因此只能用于讀取數(shù)據(jù),而不能用于存放數(shù)據(jù),它主此只能用于讀取數(shù)據(jù),而不能用于存放數(shù)據(jù),它主要用于查表性質(zhì)的訪問。要用于查表性質(zhì)的訪問。(2) 變址尋址指令只有變址尋址指令只有3條:條: MOVC A,A+PCMOVC A,A+DPTRJMP A+DPTR前兩條指令是在程序存儲器中尋找操作數(shù),指令執(zhí)前兩條指令是在程序存儲器中尋找操作數(shù),指令執(zhí)行完畢行完畢PC當前值不變。后一條指令是要獲得程序的當前值不變。后一條指令是要獲得程序的跳轉(zhuǎn)地址,指令執(zhí)行完畢跳轉(zhuǎn)地址,指令執(zhí)行完畢PC值改變。值改變。相對尋址用于訪問程序存儲器,只出
19、現(xiàn)在轉(zhuǎn)移指令相對尋址用于訪問程序存儲器,只出現(xiàn)在轉(zhuǎn)移指令中。中?!皩ぶ穼ぶ贰辈皇菍ふ也僮鲾?shù)的地址,而是尋找程不是尋找操作數(shù)的地址,而是尋找程序跳轉(zhuǎn)地址,它以序跳轉(zhuǎn)地址,它以PC的當前值加上指令中給出的相的當前值加上指令中給出的相對偏移量(對偏移量(rel)形成轉(zhuǎn)移地址。相對偏移量(形成轉(zhuǎn)移地址。相對偏移量(rel)是一個帶符號的是一個帶符號的8位二進制數(shù),以補碼形式出現(xiàn)。所位二進制數(shù),以補碼形式出現(xiàn)。所以程序的轉(zhuǎn)移范圍為以以程序的轉(zhuǎn)移范圍為以PC當前值為中心,介于當前值為中心,介于-128+127之間。之間。2.2.6 相對尋址相對尋址例如:例如: JC rel設設rel=85H,Cy=1,這
20、是一條以這是一條以Cy狀態(tài)為條件的轉(zhuǎn)狀態(tài)為條件的轉(zhuǎn)移指令,因為該指令為兩字節(jié)指令,移指令,因為該指令為兩字節(jié)指令,CPU取出指令取出指令的第二個字節(jié)時,的第二個字節(jié)時,PC當前值為原當前值為原PC值值+2。由于。由于Cy=1,因此程序轉(zhuǎn)向(因此程序轉(zhuǎn)向(PC)+2+rel單元去執(zhí)行。注單元去執(zhí)行。注意此時意此時rel=85H為負數(shù)。為負數(shù)。若轉(zhuǎn)移指令放在若轉(zhuǎn)移指令放在2002H單元,取出指令后單元,取出指令后PC指向指向2004H單元,新的轉(zhuǎn)移地址(單元,新的轉(zhuǎn)移地址(PC)+rel=2004H+85H=2004H+FF85H(16位二進制補碼)位二進制補碼)=1F89H,經(jīng)補碼運算后,形成跳
21、轉(zhuǎn)地址經(jīng)補碼運算后,形成跳轉(zhuǎn)地址1F89H。指指令執(zhí)行過程如圖令執(zhí)行過程如圖2-5所示。所示。圖圖2-5 相對尋址(相對尋址(JC 85H)示意圖示意圖MCS-51單片機設有獨立的位處理器,又稱為布爾處單片機設有獨立的位處理器,又稱為布爾處理器,可對位地址空間的理器,可對位地址空間的211個位地址進行運算和傳個位地址進行運算和傳送操作。送操作。2.2.7 位尋址位尋址位尋址范圍位尋址范圍(1) 內(nèi)部內(nèi)部RAM的位尋址區(qū),共的位尋址區(qū),共16個單元的個單元的128位,位,單元地址為單元地址為20H2FH,位地址為位地址為00H7FH,位地位地址的表示方法可以用直接位地址或單元地址加位的址的表示方
22、法可以用直接位地址或單元地址加位的表示方法。表示方法。例如:例如: MOVC, 7AH或或MOVC, 2FH.2此例中,此例中,7AH與與2FH.2表示的是同一個位地址(見表表示的是同一個位地址(見表1-3,書,書9頁頁)。)。(2) 特殊功能寄存器特殊功能寄存器SFR中可供位尋址的專用寄存中可供位尋址的專用寄存器共器共11個,其中有個,其中有83位可供位尋址,這些位地址在指位可供位尋址,這些位地址在指令中有令中有4種表達方式。種表達方式。 直接使用位地址:直接使用位地址: MOV C,0D6H 位名稱表示法:位名稱表示法: MOV C,AC 單元地址加位的表示法:單元地址加位的表示法: MO
23、V C,0D0H.6 專用寄存器符號加位的表示法:專用寄存器符號加位的表示法: MOV C,PSW.6為了使讀者更好地理解尋址方式,為了使讀者更好地理解尋址方式,7種尋址方式作用種尋址方式作用范圍見表范圍見表2-1。(見書。(見書24頁)頁)以上對于尋址方式舉例中,多是針對源操作數(shù)的,以上對于尋址方式舉例中,多是針對源操作數(shù)的,實際上目的操作數(shù)也有尋址問題。實際上目的操作數(shù)也有尋址問題。源操作數(shù)為間接尋址方式,目的操作數(shù)為直接尋址源操作數(shù)為間接尋址方式,目的操作數(shù)為直接尋址方式。但總的來說源操作數(shù)尋址方式多,目的操作方式。但總的來說源操作數(shù)尋址方式多,目的操作數(shù)尋址方式較少。源操作數(shù)有立即尋址
24、、直接尋址、數(shù)尋址方式較少。源操作數(shù)有立即尋址、直接尋址、寄存器尋址、間接尋址、變址尋址和位尋址寄存器尋址、間接尋址、變址尋址和位尋址6種尋址種尋址方式。目的操作數(shù)有直接尋址、寄存器尋址、間接方式。目的操作數(shù)有直接尋址、寄存器尋址、間接尋址和位尋址尋址和位尋址4種尋址方式。種尋址方式。2.2.8 尋址方式小結(jié)尋址方式小結(jié)綜上所述,綜上所述,MCS-51單片機的編址方式有兩個突出的單片機的編址方式有兩個突出的特點:特點: 一是內(nèi)部數(shù)據(jù)存儲器與內(nèi)部一是內(nèi)部數(shù)據(jù)存儲器與內(nèi)部I/O口統(tǒng)一編址;口統(tǒng)一編址;二是外部數(shù)據(jù)存儲器與外部二是外部數(shù)據(jù)存儲器與外部I/O口也是統(tǒng)一編址。這口也是統(tǒng)一編址。這樣對樣對
25、I/O口的操作就和對數(shù)據(jù)存儲器的操作一樣,對口的操作就和對數(shù)據(jù)存儲器的操作一樣,對于內(nèi)部數(shù)據(jù)存儲器以直接尋址方式的一切操作,對于內(nèi)部數(shù)據(jù)存儲器以直接尋址方式的一切操作,對內(nèi)部內(nèi)部I/O口同樣適用??谕瑯舆m用。在介紹指令功能之前,先把指令中使用的一些符號在介紹指令功能之前,先把指令中使用的一些符號的意義做簡要說明,見表的意義做簡要說明,見表2-2。(見書。(見書24頁)頁)下面按指令功能分類介紹下面按指令功能分類介紹MCS-51單片機的指令。單片機的指令。2.3 指令功能介紹指令功能介紹數(shù)據(jù)傳送類指令是指令系統(tǒng)中使用最頻繁的指令,數(shù)據(jù)傳送類指令是指令系統(tǒng)中使用最頻繁的指令,主要用于數(shù)據(jù)的保存及交
26、換等場合。按其操作方式主要用于數(shù)據(jù)的保存及交換等場合。按其操作方式又可分為數(shù)據(jù)傳送、數(shù)據(jù)交換和棧操作。又可分為數(shù)據(jù)傳送、數(shù)據(jù)交換和棧操作。2.3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令1. 內(nèi)部數(shù)據(jù)傳送指令內(nèi)部數(shù)據(jù)傳送指令MOV指令格式指令格式MOV,這類指令的源操作數(shù)和目的操作數(shù)都在單片機內(nèi)部。這類指令的源操作數(shù)和目的操作數(shù)都在單片機內(nèi)部??梢允瞧瑑?nèi)可以是片內(nèi)RAM地址,也可以是特殊功能寄存器地址,也可以是特殊功能寄存器SFR的地址(立即數(shù)除外)。的地址(立即數(shù)除外)。指令功能是把源操作數(shù)指定的字節(jié)變量復制到目的指令功能是把源操作數(shù)指定的字節(jié)變量復制到目的操作數(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ù)存儲器(內(nèi)部數(shù)據(jù)存儲器(Rn、內(nèi)部內(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)部內(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 設內(nèi)部設內(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ù)存儲器(或外部數(shù)據(jù)存儲器(或I/O口)的讀寫指令口)的讀寫指令MOVX這類指令用于訪問片外這類指令用于訪問片外RAM或擴展的或擴展的I/O口???。(1) 用用DPTR進行間址尋址的指令進行間址尋址的指令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ù)通過口
31、輸出,數(shù)據(jù)通過P0口讀口讀/寫。寫。(2) 用用Ri進行間址尋址的指令進行間址尋址的指令MOVX A,Ri ;A(Ri) MOVX Ri,A;(;(Ri)(A)指令可尋址范圍指令可尋址范圍 若外部擴展若外部擴展RAM小于等于小于等于256個單元,則用個單元,則用Ri間接尋址進行數(shù)據(jù)傳送,間接尋址進行數(shù)據(jù)傳送,8位地址線足夠使用。位地址線足夠使用。 若外部擴展較大的若外部擴展較大的RAM區(qū)域,需用區(qū)域,需用P2口輸出高口輸出高8位地址,則用位地址,則用Ri表示低表示低8位地址,位地址,P0口分時作低口分時作低8位地址線和數(shù)據(jù)線,位地址線和數(shù)據(jù)線,P2口應事先預置。若設計循環(huán)口應事先預置。若設計循
32、環(huán)程序,則程序,則Ri被加到被加到0或減到或減到0時必須考慮對時必須考慮對P2口高口高8位位地址進位或借位的關系。地址進位或借位的關系。例如,若外部例如,若外部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單元中的一個數(shù)單元中的一個數(shù)X,送到片送到片外外RAM的的1010H單元。單元。程序如下:程序如下: MOV P2,00HMOV R0,70HMOVX A,R0MOV DPTR,1010HMOVX DPTR,A注意:注意: 外部外部RAM之間不能直接傳送數(shù)據(jù),必須通過之間不能直接傳送數(shù)據(jù),必須通過累加器累加器A傳送。傳送。3. 程序存儲器讀指令程序存儲器讀指令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)容相加,得到程序存儲器某單元的地址,再把該地址單元中的到程序存儲器某單元的地址,再把該地址單元中的內(nèi)容送累加器內(nèi)容送累加器A。指令執(zhí)行后,不改變基址寄存器內(nèi)指令執(zhí)行后,不改變基址寄存器內(nèi)容。容。這兩條指令主要用于查表,即完成從程序存儲器讀這兩條指令主要用于查表,即完成從程序存儲器讀取數(shù)據(jù)的功能。但由于兩者使用的基址寄存器不同,取數(shù)據(jù)的功能。但由于兩者使用的基址寄存器不同,因此適用范圍也不同。因此適用范圍也不同。 (1) 第一條指令以第一條指令以DPTR作為基址寄存器,查表時作為基址寄存器,查表時DPTR用于存放表格的起始地址。由于用戶可以很方
35、用于存放表格的起始地址。由于用戶可以很方便地通過便地通過16位數(shù)據(jù)傳送指令給位數(shù)據(jù)傳送指令給DPTR賦值,因此該指賦值,因此該指令適用范圍較為廣泛,表格常數(shù)可以設置在令適用范圍較為廣泛,表格常數(shù)可以設置在64KB程程序存儲器中的任何位置。序存儲器中的任何位置。(2) 第二條指令以第二條指令以PC作為基址寄存器,由于作為基址寄存器,由于A為為8位無符號數(shù),這就使得該指令查表范圍為以位無符號數(shù),這就使得該指令查表范圍為以PC當前當前值開始后的值開始后的256個地址范圍。個地址范圍。例例2-3 已知累加器已知累加器A中有一個中有一個09范圍內(nèi)的數(shù),用以范圍內(nèi)的數(shù),用以上查表指令編出能查出該數(shù)平方值的
36、程序。設平方上查表指令編出能查出該數(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 ;停機停機2000H DB 02001H DB 12002H DB 42009H DB 81E
37、ND查表指令所在單元為查表指令所在單元為1FFDH,取指令后的取指令后的PC當前值當前值為為1FFEH。若若A不加修正量調(diào)整,將出現(xiàn)查表錯誤。不加修正量調(diào)整,將出現(xiàn)查表錯誤。修正量修正量=表頭首地址表頭首地址PC當前值當前值=2000H1FFEH=02H。所以所以data=02H(SJMP指令指令2字節(jié))。字節(jié))。由于由于A為為8位無符號數(shù),因此查表指令和被查表格通位無符號數(shù),因此查表指令和被查表格通常在同一頁內(nèi)(頁內(nèi)地址常在同一頁內(nèi)(頁內(nèi)地址00HFFH)。)。4. 堆棧操作指令(堆棧操作指令(PUSH、POP)堆棧操作指令共堆棧操作指令共2條。壓棧指令用于保護片內(nèi)某個單條。壓棧指令用于保護
38、片內(nèi)某個單元的內(nèi)容,出棧指令用于恢復片內(nèi)某個單元的內(nèi)容。元的內(nèi)容,出棧指令用于恢復片內(nèi)某個單元的內(nèi)容。PUSHdirect;SP(SP)+1,(,(SP)(direct)POP direct;direct(SP),),SP(SP)1堆棧中的數(shù)據(jù)是堆棧中的數(shù)據(jù)是“后進先出后進先出”的方式,由堆棧指針的方式,由堆棧指針SP自動跟蹤棧頂?shù)刂?。單片機堆棧編址采用向上生自動跟蹤棧頂?shù)刂贰纹瑱C堆棧編址采用向上生成方式,即棧底占用較低地址,棧頂占用較高地址。成方式,即棧底占用較低地址,棧頂占用較高地址。第一條指令稱為壓棧指令,壓棧過程是先執(zhí)行(第一條指令稱為壓棧指令,壓棧過程是先執(zhí)行(SP)+1 SP,使
39、指針指向新的棧頂單元。然后把直接地使指針指向新的棧頂單元。然后把直接地址單元的內(nèi)容壓入址單元的內(nèi)容壓入SP所指示的單元中。壓棧指令將所指示的單元中。壓棧指令將改變堆棧區(qū)中的數(shù)據(jù)。第二條指令稱為出棧指令,改變堆棧區(qū)中的數(shù)據(jù)。第二條指令稱為出棧指令,出棧過程是先將棧頂內(nèi)容彈出到直接尋址單元,然出棧過程是先將棧頂內(nèi)容彈出到直接尋址單元,然后執(zhí)行后執(zhí)行(SP)1SP,形成新的棧頂?shù)刂?。出棧指令形成新的棧頂?shù)刂贰3鰲V噶畈粫淖兌褩^(qū)中的數(shù)據(jù)。不會改變堆棧區(qū)中的數(shù)據(jù)。例例2-4 設(設(30H)=X,(,(40H)=Y,試用堆棧實現(xiàn)試用堆棧實現(xiàn)30H和和40H單元中的數(shù)據(jù)交換。單元中的數(shù)據(jù)交換。解:解:
40、 堆棧區(qū)是片內(nèi)堆棧區(qū)是片內(nèi)RAM的一個數(shù)據(jù)區(qū),進棧和出棧的一個數(shù)據(jù)區(qū),進棧和出棧的數(shù)據(jù)符合的數(shù)據(jù)符合“后進先出后進先出”的原則。的原則。MOV SP,#50H;設棧頂設棧頂PUSH 40H;51H(40H),),Y壓入壓入51H單元單元PUSH 30H;52H(30H),),X壓入壓入52H單元單元POP40H;40H(52H),),X彈到彈到40HPOP30H;30H(51H),),Y彈到彈到30H本例壓棧過程如圖本例壓棧過程如圖2-6(a)所示,出棧過程如圖所示,出棧過程如圖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標志。標志。例如,若(例如,若(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)容互換,不影響標志位內(nèi)容互換,不影響標志位。位。例例2-5 已知外部已知外部RAM 2020H單元中有一個數(shù)單元中有一個數(shù)X,內(nèi)部內(nèi)部RAM 20H單元有一個數(shù)單元有一個數(shù)Y,試編寫試編寫X、Y交換存儲地交換存儲地址的程序。址的程序。程序如下:程序如下: MOV P2,#20H MOV R1,#20HMOVX A,R1XCH A,R1MOVX R1,A例例2-6 已知片內(nèi)已知片內(nèi)50H單元中有一個單元中有一個09的數(shù),試編程的數(shù),試編程把它變?yōu)橄鄳陌阉優(yōu)橄鄳腁SCII碼。因為碼。因為09的的ASCII
43、碼為碼為3039H,因此程序編寫如下:因此程序編寫如下: MOV R0,#50HMOV A,#30HXCHDA,R0MOV R0,A算術(shù)運算類指令可以完成加、減、乘、除四則運算算術(shù)運算類指令可以完成加、減、乘、除四則運算以及增量、減量和二以及增量、減量和二十進制調(diào)整操作。這類指令十進制調(diào)整操作。這類指令直接支持直接支持8位無符號數(shù)操作,借助溢出標志可對帶符位無符號數(shù)操作,借助溢出標志可對帶符號數(shù)進行補碼運算。算術(shù)運算指令執(zhí)行結(jié)果將影響號數(shù)進行補碼運算。算術(shù)運算指令執(zhí)行結(jié)果將影響程序狀態(tài)字程序狀態(tài)字PSW,具體影響見表具體影響見表2-3。(見書。(見書30頁)頁)2.3.2 算術(shù)運算類指令算術(shù)運
44、算類指令1. 加法指令加法指令(1) 不帶進位的加法指令不帶進位的加法指令ADD 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中。使用中應注意以下問題:中。使用中應注意以下問題: 參加運算的兩個操作數(shù)是參加運算的兩個操作數(shù)是8位二進制數(shù),操作結(jié)果位二進制數(shù),操作結(jié)果也是也是8位二進制數(shù),且運算對位二進制數(shù),且運算對PSW中所有標志位都產(chǎn)中所有標志位都產(chǎn)生影響
45、。生影響。 用戶可以根據(jù)需要把參加運算的兩個操作數(shù)看成用戶可以根據(jù)需要把參加運算的兩個操作數(shù)看成無符號數(shù)(無符號數(shù)(0255),也可以把它們看作是帶符號),也可以把它們看作是帶符號數(shù)。若看作帶符號數(shù),則通常采用補碼形式(數(shù)。若看作帶符號數(shù),則通常采用補碼形式(-128+127)。例如,若把二進制數(shù))。例如,若把二進制數(shù)10011010B看作無符號看作無符號數(shù),則該數(shù)的十進制值為數(shù),則該數(shù)的十進制值為154;若把它看作帶符號數(shù),;若把它看作帶符號數(shù),則它的十進制值為則它的十進制值為-102。 無符號數(shù)運算時,要判斷運算結(jié)果是否超出范圍無符號數(shù)運算時,要判斷運算結(jié)果是否超出范圍(0255),可以看
46、進位標志位),可以看進位標志位CY。若若CY=1則表示則表示運算結(jié)果大于運算結(jié)果大于255,若,若CY=0則表示運算結(jié)果小于等則表示運算結(jié)果小于等于于255。帶符號數(shù)運算時,要判斷運算結(jié)果是否超出。帶符號數(shù)運算時,要判斷運算結(jié)果是否超出范圍(范圍(-128+127),可以看溢出標志位),可以看溢出標志位OV。若若OV=1表示溢出,表示溢出,OV=0則表示無溢出。則表示無溢出。OV=C7 C6,其中其中C7為最高位進位位,為最高位進位位,C6為次高位進位位。注意為次高位進位位。注意: 只有帶符號數(shù)運算才有溢出問題。只有帶符號數(shù)運算才有溢出問題。例例2-7 試分析試分析8051執(zhí)行如下指令后,累加
47、器執(zhí)行如下指令后,累加器A和和PSW各標志位的變化狀況。各標志位的變化狀況。MOV A,#0CFHADDA,#0A5H解答見書解答見書31頁。頁。執(zhí)行結(jié)果:執(zhí)行結(jié)果: (A)=74H,(,(PSW)=0C4H若為無符號數(shù)運算,則若為無符號數(shù)運算,則Cy=1表示結(jié)果超出(表示結(jié)果超出(0255)。若為帶符號數(shù)運算,則()。若為帶符號數(shù)運算,則(-49)+(-91)=-140超出(超出(-128+127),),OV=1溢出。溢出。(2) 帶進位加法指令帶進位加法運算指令常用于多帶進位加法指令帶進位加法運算指令常用于多字節(jié)加法運算。字節(jié)加法運算。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條帶進位的加法指令將累加器條帶進位的加法指令將累加器A的內(nèi)容加當前的內(nèi)容加當前Cy標志位內(nèi)容,再加源操作數(shù),將和存于累加器標志位內(nèi)容,再加源操作數(shù),將和存于累加器A中。中。運算結(jié)果將影響標志運算結(jié)果將影響標志Cy、AC、OV、P。例例2-8 設(設(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í)行過程與帶進位加法指令相似,條減法指令執(zhí)行過程與帶進位加法指令相似,只是把加操作改為減操作即可。只是把加操作改為減操作即可。例例2-9 (A)=76H,立即數(shù)為立即數(shù)為C5H,(,(Cy)=0,求求二者相減結(jié)果。二者相減結(jié)果。 程序為:程序為: SUBB A,#0C5HOV=C7 C6=1 0=1,有溢出,運算結(jié)果為有溢出,運算結(jié)果為177 +127,(,(A)=0B1H,(,(PSW)=8
50、4H3. 加加1和減和減1指令指令(1) 加加1指令加指令加1指令又稱增量指令。指令又稱增量指令。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標志位外,標志位外,其他幾條指令不影響任何標志位。其他幾條指令不影響任何標志
51、位。4. 乘法指令乘法指令MUL AB指令功能是把累加器指令功能是把累加器A和寄存器和寄存器B中兩個中兩個8位無符號二位無符號二進制數(shù)相乘,積的高進制數(shù)相乘,積的高8位存在位存在B寄存器中,積的低寄存器中,積的低8位位存在累加器存在累加器A中。運算結(jié)果將對中。運算結(jié)果將對Cy、OV、P標志位標志位產(chǎn)生如下影響:產(chǎn)生如下影響: (1) 進位標志位進位標志位Cy總是清總是清“0”。(2) P標志仍為標志仍為A累加器的奇偶校驗位。累加器的奇偶校驗位。(3) 當積大于當積大于255(B中的內(nèi)容不為中的內(nèi)容不為0)時,)時,OV=1,否則否則OV=0。5. 除法指令除法指令DIV AB該指令把累加器該指
52、令把累加器A中的中的8位無符號整數(shù)除以寄存器位無符號整數(shù)除以寄存器B中中的的8位無符號整數(shù),所得商存在位無符號整數(shù),所得商存在A中,余數(shù)存在中,余數(shù)存在B中。中。對標志位的影響如下:對標志位的影響如下: (1) 對對Cy和和P標志的影響與乘法時相同。標志的影響與乘法時相同。(2) 當除數(shù)為當除數(shù)為0時,除法沒有意義,時,除法沒有意義,0V=1,否則否則OV=0。6. 二二-十進制調(diào)整指令十進制調(diào)整指令DAA ;若若AC=1或或A309,則則A(A)+06H ;若若Cy =1或或A749,則則A(A)+60H該指令用于壓縮該指令用于壓縮BCD碼加法運算的十進制調(diào)整。使用碼加法運算的十進制調(diào)整。使
53、用該指令時應注意以下幾點:該指令時應注意以下幾點: (1) 本指令使用時跟在本指令使用時跟在ADD或或ADDC指令之后。指令之后。(2) 不能用不能用DA指令對指令對BCD碼減法操作進行直接調(diào)整。碼減法操作進行直接調(diào)整。(3) 本指令不影響溢出標志位本指令不影響溢出標志位OV。(4) 借助標志位可實現(xiàn)多位借助標志位可實現(xiàn)多位BCD數(shù)加法結(jié)果的調(diào)整。數(shù)加法結(jié)果的調(diào)整。例例2-10 編寫完成編寫完成78+93的的BCD加法的程序,并對調(diào)加法的程序,并對調(diào)整過程進行分析。整過程進行分析。解:解: 二進制加法和十進制調(diào)整過程見書二進制加法和十進制調(diào)整過程見書33頁。頁。相應相應BCD加法程序為:加法程
54、序為: ORG 3000HMOV A,#78H ;A 78HADDA,#93H ;A 78H+93H=0BHDAASJMP END得出結(jié)果(得出結(jié)果(A)=71H,考慮進位標志(考慮進位標志(Cy)=1,操操作結(jié)果為作結(jié)果為171。例例2-11 利用利用DA指令作十進制減法調(diào)整。將兩個用壓指令作十進制減法調(diào)整。將兩個用壓縮縮BCD碼表示的十進制數(shù)相減,借位標志存入碼表示的十進制數(shù)相減,借位標志存入C累加累加器。設器。設20H、21H、22H分別存放被減數(shù)、減數(shù)和差。分別存放被減數(shù)、減數(shù)和差。解:解: 由于由于DA指令不能直接用于減法操作的調(diào)整,因指令不能直接用于減法操作的調(diào)整,因此采用對減數(shù)求
55、補后再與被減數(shù)相加,然后再進行此采用對減數(shù)求補后再與被減數(shù)相加,然后再進行DA調(diào)整的方法實現(xiàn)。兩位調(diào)整的方法實現(xiàn)。兩位BCD碼的模為碼的模為102 ,其機,其機器數(shù)表示為器數(shù)表示為9AH。ORG 2000HN1DATA 20HCLRC ;(;(Cy) 0MOV A,#9AH;(;(A)兩位兩位BCD的模的模102SUBB A,N1+1;(;(A)減數(shù)的補數(shù)減數(shù)的補數(shù)ADDA,N1;(;(A)被減數(shù)被減數(shù)+減數(shù)的減數(shù)的補數(shù)補數(shù)DA;進行調(diào)整進行調(diào)整CPLC;取借位標志取借位標志JNCL1;借位標志為借位標志為0則轉(zhuǎn)移則轉(zhuǎn)移MOV N1+2, A;存差的補數(shù)存差的補數(shù)MOV A,#9AHSUBB
56、A, N1+2;求差的絕對值求差的絕對值L1:MOVN1+2,A;存結(jié)果存結(jié)果SJMP ;停機停機若被減數(shù)若被減數(shù) 減數(shù),則差為正,借位標志為減數(shù),則差為正,借位標志為0;若被減;若被減數(shù)數(shù) 減數(shù),則差為負,借位標志為減數(shù),則差為負,借位標志為1。邏輯運算類指令包括邏輯運算類指令包括“與與”、“或或”、“異或異或”、清除、求反和左右移位等邏輯操作,這類指令除以清除、求反和左右移位等邏輯操作,這類指令除以累加器累加器A為目的寄存器指令外,均不影響為目的寄存器指令外,均不影響PSW中的標中的標志位。志位。2.3.3 邏輯運算指令邏輯運算指令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ù)按位進行按位進行“與與”(“或或”、“異或異或”)操作,結(jié)果)操作,結(jié)果存于目的操作數(shù)單元或寄
58、存器。存于目的操作數(shù)單元或寄存器。2. 移位指令移位指令RLA ;累加器左環(huán)移累加器左環(huán)移RLC A ;累加器通過累加器通過Cy左環(huán)移左環(huán)移RRA ;累加器右環(huán)移累加器右環(huán)移RRC A ;累加器通過累加器通過Cy右環(huán)移右環(huán)移每條指令操作過程如圖每條指令操作過程如圖2-7所示。所示。累加器每左移一位相當于乘以累加器每左移一位相當于乘以2。同理,累加器右移。同理,累加器右移一位相當于除以一位相當于除以2,讀者可以舉例驗證。,讀者可以舉例驗證。圖圖2-7 累加器移位指令示意圖累加器移位指令示意圖3. 清零、取反指令清零、取反指令CLR A;A0,累加器累加器A清清0,不影,不影響標響標志位志位CPL
59、 A ;A(A),),累加器累加器A的內(nèi)的內(nèi)容按容按位取反,不影響標志位位取反,不影響標志位控制轉(zhuǎn)移指令用于改變程序計數(shù)器控制轉(zhuǎn)移指令用于改變程序計數(shù)器PC值,以控制程值,以控制程序走向,作用區(qū)間為程序存儲器空間。序走向,作用區(qū)間為程序存儲器空間。2.3.4 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令1. 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令(1) 長轉(zhuǎn)移指令長轉(zhuǎn)移指令LJMPaddr16;PCaddr16長轉(zhuǎn)移指令是把指令中長轉(zhuǎn)移指令是把指令中16位目標地址裝入位目標地址裝入PC,使程使程序執(zhí)行下條指令時無條件轉(zhuǎn)移到序執(zhí)行下條指令時無條件轉(zhuǎn)移到addr16處執(zhí)行。因處執(zhí)行。因此,該指令是一條可以在此,該指令是一條
60、可以在64KB范圍內(nèi)轉(zhuǎn)移的指令。范圍內(nèi)轉(zhuǎn)移的指令。(2) 絕對轉(zhuǎn)移指令絕對轉(zhuǎn)移指令AJMP addr11指令中提供指令中提供11位地址,與位地址,與PC當前值的高當前值的高5位共同組成位共同組成16位目標地址,程序無條件轉(zhuǎn)向目標地址。位目標地址,程序無條件轉(zhuǎn)向目標地址。11位地址位地址表示的存儲空間為表示的存儲空間為2KB,所以轉(zhuǎn)移目標地址必須設所以轉(zhuǎn)移目標地址必須設置在包含置在包含AJMP指令后第一條指令的第一個字節(jié)的同指令后第一條指令的第一個字節(jié)的同一一2KB范圍內(nèi)。范圍內(nèi)。(3) 短轉(zhuǎn)移指令短轉(zhuǎn)移指令SJMP rel;PC(PC)+ 2;PC(PC)+ relrel為地址偏移量,帶符號為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學生創(chuàng)業(yè)都有哪些項目
- 多媒體視域下小學美術(shù)高效課堂構(gòu)建的作用和策略
- 團隊建設小活動方案
- 小學四年級數(shù)學三位數(shù)乘兩位數(shù)單元測驗題帶答案
- 小學二年級數(shù)學三位數(shù)加減三位數(shù)計算競賽自測試題
- 人員現(xiàn)場安全施工方案
- 哲學歷程及新領域
- 藝術(shù)作品的解讀
- 幼兒園變更法人申請書
- 低溫巴氏乳項目績效評估報告
- 攝影測量學實習指導書
- 安全生產(chǎn)事故調(diào)查與案例分析(第3版)課件 呂淑然 第5章 事故案例評析
- 學生綜合素質(zhì)評定與職業(yè)規(guī)劃的關聯(lián)性分析
- 2025云南省貴金屬新材料控股集團限公司面向高校畢業(yè)生專項招聘144人高頻重點提升(共500題)附帶答案詳解
- 勞動法培訓課件
- 香港及內(nèi)地傳真號碼
- 湖北中煙工業(yè)限責任公司2025年招聘(技術(shù)類和業(yè)務類崗位)【43人】高頻重點提升(共500題)附帶答案詳解
- 2024-2025學年成都市成華區(qū)七年級上英語期末考試題(含答案)
- 石家莊市長安區(qū)學年三年級數(shù)學第一學期期末檢測試題含解析
- 2025年中國一汽招聘筆試參考題庫含答案解析
- 特殊家長課后溝通技巧培訓
評論
0/150
提交評論