單片機 指令系統(tǒng)與程序設計_第1頁
單片機 指令系統(tǒng)與程序設計_第2頁
單片機 指令系統(tǒng)與程序設計_第3頁
單片機 指令系統(tǒng)與程序設計_第4頁
單片機 指令系統(tǒng)與程序設計_第5頁
已閱讀5頁,還剩118頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、本章重點:本章重點:指令的尋址方式、功能、使用方法指令的尋址方式、功能、使用方法 程序設計的一般方法和技巧程序設計的一般方法和技巧講授內容:MCS-51MCS-51單片機的尋址方式單片機的尋址方式 MCS-51MCS-51單片機指令分類單片機指令分類程序設計方法和算法分析程序設計方法和算法分析 應用程序設計舉例應用程序設計舉例第三章第三章 MCS-51 MCS-51單片機的指令系統(tǒng)與程序設計單片機的指令系統(tǒng)與程序設計高級語言高級語言:復習復習:一、匯編語言程序設計的意義一、匯編語言程序設計的意義什么是程序?什么是程序?為完成某項特定任務的一組指令的集合。為完成某項特定任務的一組指令的集合。計算

2、機按程序一條一條地依次執(zhí)行指令,從而完成指定任務。計算機按程序一條一條地依次執(zhí)行指令,從而完成指定任務。要讓計算機完成各項任務,用戶要設計各種程序。要讓計算機完成各項任務,用戶要設計各種程序。匯編語言匯編語言: 機器語言:用二進制代碼表示指令和數(shù)據(jù),機器語言:用二進制代碼表示指令和數(shù)據(jù),CPU可直接識別??芍苯幼R別。二、程序設計語言:二、程序設計語言:用助記符表示指令操作功能,用標號表示操作對象,與機用助記符表示指令操作功能,用標號表示操作對象,與機器語言一一對應。器語言一一對應。獨立于機器獨立于機器,面向過程面向過程,接近自然語言和數(shù)學表達式接近自然語言和數(shù)學表達式.第三章 3 - 2第一節(jié)

3、第一節(jié) MCS51MCS51單片機的尋址方式單片機的尋址方式 MCS-51單片機的指令系統(tǒng)共有單片機的指令系統(tǒng)共有111條指令,條指令,7種尋址種尋址方式方式, ,共分為五大類:共分為五大類:數(shù)據(jù)傳送類指令,算術運算類指令,數(shù)據(jù)傳送類指令,算術運算類指令,邏輯運算類指令,控制轉移類指令,位操作類指令邏輯運算類指令,控制轉移類指令,位操作類指令n指令格式指令格式n1 1、指令所包含的內容、指令所包含的內容n 操作碼:規(guī)定指令的操作功能操作碼:規(guī)定指令的操作功能n 操作數(shù):指令操作的具體對象(地址、數(shù)據(jù))操作數(shù):指令操作的具體對象(地址、數(shù)據(jù))n2 2、指令格式、指令格式n 單字節(jié)指令:單字節(jié)指令

4、:n 雙字節(jié)指令:雙字節(jié)指令:n 三字節(jié)指令三字節(jié)指令MCS-51指令格式:指令格式:標號:標號: 操作碼助記符操作碼助記符 第一操作數(shù)第一操作數(shù) ,第二操作數(shù),第二操作數(shù) ;注釋;注釋第三章 3 - 3在在MCS-51系列單片機的指令中,常用的符號系列單片機的指令中,常用的符號#data8#data8、#data16#data16:分別表示:分別表示8 8位、位、1616位立即數(shù)。位立即數(shù)。 directdirect:片內:片內RAMRAM單元地址(單元地址(8 8位),也可以指特殊功能寄存器的地址或位),也可以指特殊功能寄存器的地址或符號名稱。符號名稱。addr11addr11、addr1

5、6addr16:分別表示:分別表示1111位、位、1616位地址碼。位地址碼。relrel:相對轉移指令中的偏移量,為:相對轉移指令中的偏移量,為8 8位帶符號數(shù)(補碼形式)。位帶符號數(shù)(補碼形式)。bitbit:片內:片內RAMRAM中(可位尋址)的位地址。中(可位尋址)的位地址。A A:累加器:累加器A A;ACCACC則表示累加器則表示累加器A A的地址。的地址。RnRn:當前寄存器組的:當前寄存器組的8 8個工作寄存器個工作寄存器R0R7R0R7。RiRi:可用作間接尋址的工作寄存器,只能是:可用作間接尋址的工作寄存器,只能是R0R0、R1R1。:間接尋址的前綴標志。:間接尋址的前綴標

6、志。 當前指令存放的地址當前指令存放的地址(x) x中的內容中的內容第一節(jié)第一節(jié) MCS51MCS51單片機的尋址方式單片機的尋址方式第三章 3 - 4一、立即尋址一、立即尋址立即尋址是指在指令中直接給出其操作數(shù),該操作數(shù)稱為立即數(shù)。為了立即尋址是指在指令中直接給出其操作數(shù),該操作數(shù)稱為立即數(shù)。為了與直接尋址指令中的直接地址相區(qū)別,在立即數(shù)前面必需加上前綴與直接尋址指令中的直接地址相區(qū)別,在立即數(shù)前面必需加上前綴“# #”。例如:例如:MOVA,#30H二、直接尋址二、直接尋址直接尋址是指在指令中直接給出存放數(shù)據(jù)的地址(注意:不是立即數(shù)直接尋址是指在指令中直接給出存放數(shù)據(jù)的地址(注意:不是立即

7、數(shù),并且只限于并且只限于片內片內RAM范圍范圍)。直接尋址只能訪問特殊功能寄存器、內)。直接尋址只能訪問特殊功能寄存器、內部數(shù)據(jù)存儲器和位地址空間。部數(shù)據(jù)存儲器和位地址空間。例如:例如:MOV A,30H 比較以上兩指令的區(qū)別比較以上兩指令的區(qū)別第一節(jié)第一節(jié) MCS51MCS51單片機的尋址方式單片機的尋址方式A30HA30H 5555H第三章 3 - 5 三、寄存器尋址三、寄存器尋址寄存器尋址是指指令中的操作數(shù)為寄存器中的內容。寄存器尋址是指指令中的操作數(shù)為寄存器中的內容。例如:例如:MOV MOV A A,R1R1四、寄存器間接尋址四、寄存器間接尋址寄存器間接尋址是指指令中的操作數(shù)在寄存器

8、的內容所指的地址單元中。寄存器間接尋址是指指令中的操作數(shù)在寄存器的內容所指的地址單元中。例如:例如:MOVR1,#30H;把立即數(shù);把立即數(shù)30H送送R1寄存器寄存器MOVA,R1;把;把30H單元中的數(shù)送到單元中的數(shù)送到A中中比較以上兩指令的區(qū)別比較以上兩指令的區(qū)別AR1A30H 11(R1)11H第三章 3 - 6五、變址尋址五、變址尋址變址尋址用于訪問程序存儲器中的一個字節(jié),該字節(jié)的地址是:基址寄存變址尋址用于訪問程序存儲器中的一個字節(jié),該字節(jié)的地址是:基址寄存器(器(DPTR或或PC)的內容與變址寄存器)的內容與變址寄存器A中的內容之和。中的內容之和。例如:例如: MOV DPTR,#

9、3000H ;立即數(shù);立即數(shù)3000H送送DPTR MOV A,#02H ;立即數(shù);立即數(shù)02H送送A MOVC A,A+DPTR ;取;取ROM中中3002H單元中的數(shù)送單元中的數(shù)送A A(前)(前)3002H 55DPTR+A(后)(后)第三章 3 - 7六、相對尋址六、相對尋址 以當前值為基準,加上相對偏移量以當前值為基準,加上相對偏移量relrel形成轉移地址形成轉移地址轉移范圍:轉移范圍:以當前值起始地址,相對偏移在字以當前值起始地址,相對偏移在字節(jié)單元之間。節(jié)單元之間。相對尋址方式為相對轉移指令所采用,轉移的目的地址相對尋址方式為相對轉移指令所采用,轉移的目的地址為:為:目的地址目

10、的地址=轉移指令所在地址轉移指令所在地址+轉移指令字節(jié)數(shù)轉移指令字節(jié)數(shù)+rel計算方法計算方法PC目標目標=PC當前當前+rel=(PC指指+指令字節(jié)數(shù)指令字節(jié)數(shù))+relrel=PC目標目標-(PC指指+指令字節(jié)數(shù)指令字節(jié)數(shù)) 例:例: 2000H 80 54 SIMP 54H 2000H 80 54 SIMP 54H 2000H 80542056HPC=2002HREL=54H+第三章 3 - 8七、位尋址七、位尋址位尋址是指對片內位尋址是指對片內RAMRAM的位尋址區(qū)(的位尋址區(qū)(20H2FH20H2FH)、可以位尋址的專用寄)、可以位尋址的專用寄存器的各位,并進行位操作的尋址方式。存器

11、的各位,并進行位操作的尋址方式。例如:例如:MOVMOVC C,00H00H;把;把20H20H單元中單元中D0D0位的值送位的值送C C位位 MOVMOVP1.0P1.0,C C;把;把C C位中的值送位中的值送P1P1口的口的D0D0位位 SETBSETB20H. 020H. 0;把;把00H00H位置位置1 1位地址的表示方法位地址的表示方法位名稱位名稱 例:例:CY、RS0寄存器名加序號寄存器名加序號 例:例:ACC.1、P0.1字節(jié)地址加序號字節(jié)地址加序號 例:例:20H.3直接位地址直接位地址 例:例:00H、 07H第三章 3 - 9操作數(shù)的操作數(shù)的7 7種尋址方式和尋址的空間種

12、尋址方式和尋址的空間尋址方式尋址方式相關寄存器相關寄存器尋址的空間尋址的空間立即尋址立即尋址程序存儲器程序存儲器ROM 直接尋址直接尋址片內片內RAM和和SFR寄存器尋址寄存器尋址R0R7,A,B,DPTRR0R7,A,B,DPTR寄存器間接寄存器間接尋址尋址R0,R1片內片內RAMR0,R1,DPTR片外片外RAM變址尋址變址尋址A+PC,A+DPTRROM區(qū)區(qū)相對尋址相對尋址PCROM區(qū)區(qū)位尋址位尋址可位尋址的可位尋址的SFR片內片內RAM20H2FHSFR中中可尋址位可尋址位第三章 3 - 10MCSMCS5151匯編語言指令格式如下:匯編語言指令格式如下:標號:操作碼標號:操作碼 操作

13、數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2,操作數(shù),操作數(shù)3 3 ;注釋;注釋 其中標號實際上為符號地址,表示這條指令在程序存其中標號實際上為符號地址,表示這條指令在程序存儲器中的存放首地址,以字母開始,后可跟儲器中的存放首地址,以字母開始,后可跟1818個字母或個字母或數(shù)字,但標號不能用操作碼或專用符號。數(shù)字,但標號不能用操作碼或專用符號。操作碼規(guī)定了指令的具體操作。操作碼規(guī)定了指令的具體操作。指令中的操作數(shù)為指令的具體操作對象指令中的操作數(shù)為指令的具體操作對象有些指令中有有些指令中有3 3個操作數(shù),有些只有一個,有些無操作數(shù),個操作數(shù),有些只有一個,有些無操作數(shù),僅有操作碼。僅有操作碼。第二節(jié)第

14、二節(jié) MCS51MCS51單片機的指令分類單片機的指令分類第三章 3 - 12一、數(shù)據(jù)傳送與交換類指令一、數(shù)據(jù)傳送與交換類指令特點:特點:除第一操作數(shù)為除第一操作數(shù)為A的指令影響的指令影響P位外,其它并不影響標志位位外,其它并不影響標志位有三種傳送指令有三種傳送指令:MOV片內片內RAM和特殊功能寄存器之間的傳送和特殊功能寄存器之間的傳送MOVX片外片外RAM與與ACC之間的傳送之間的傳送MOVC程序存儲器的數(shù)據(jù)送程序存儲器的數(shù)據(jù)送ACC 1用于片內用于片內RAM傳送的指令(傳送的指令(16條)條) 1 1)以累加器)以累加器CC CC 為目的操作數(shù)為目的操作數(shù) ,n n ; , direct

15、direct; , Ri Ri (R1R1,R0R0) , #data#data第二節(jié)第二節(jié) MCS51MCS51單片機的指令分類單片機的指令分類第三章 3 - 132 2)以)以 RnRn 為目的操作數(shù)為目的操作數(shù) n, An, A n, directn, direct n, #datan, #data 3 3)以直接地址為目的操作數(shù))以直接地址為目的操作數(shù) directdirect, directdirect, RnRn directdirect, #data#data directdirect, Ri Ri (R1R1,R0R0) directdirect, direct direct

16、; 4 4)以)以 寄存器間址寄存器間址 為目的操作數(shù)為目的操作數(shù) RiRi, directdirect; RiRi, A A; RiRi, #data#data5 5)1616位數(shù)據(jù)送數(shù)據(jù)指針位數(shù)據(jù)送數(shù)據(jù)指針 DPTRDPTR DPTRDPTR,#Ddata16#Ddata16例如例如:MOV 30H,#7AH ;將立即數(shù);將立即數(shù)7AH送片內送片內RAM 30H單元中單元中 MOV R0,#30H ;將立即數(shù);將立即數(shù)30H送送R0寄存器寄存器 MOV A,R0 ;將;將R0指定的指定的30H中的數(shù)中的數(shù)7AH送送A中中MOV DPTR,#1000H;將;將1000H送送DPTR寄存器寄存

17、器練習:將練習:將R1R1中的內容送中的內容送R2R2第三章 3 - 14第三章 1-142用于片外用于片外RAM傳送的指令(共傳送的指令(共4條)條)執(zhí)行過程中會使執(zhí)行過程中會使/WR、/RD有效。有效。 片外片外RAM單元的地址為單元的地址為16位,一般用位,一般用DPTR間接尋址;也可使用間接尋址;也可使用Ri來來間接尋址(低間接尋址(低8 8位編址時)。位編址時)。1)外部外部RAMRAM低低256256字節(jié)單元與之間的傳送字節(jié)單元與之間的傳送 , i i i i, 例例: : 0 0, , 0 0;將外部;將外部RAMRAM單元內容單元內容)外部外部RAMRAM單元與之間的傳送單元與

18、之間的傳送 ,DPTR DPTR DPTR, DPTR, 例例: : DPTR, #2000HDPTR, #2000H ,DPTRDPTR;將外部;將外部RAMRAM中中2000H2000H單元內容單元內容AA思考:將片內思考:將片內RAM 50HRAM 50H單元內容單元內容 片外片外RAM 5000HRAM 5000H單元單元3用于用于ROM傳送的指令(共傳送的指令(共2條)條)MOVC A,A+DPTR;(A)(A)+DPTR)(A)(A)+DPTR))MOVC A,A+PC ;(A)(A)+(PC)(A)(A)+(PC) 以以PC的當前值為基址,的當前值為基址,A為變址為變址 例例3-

19、1:在:在ROM 1000H開始存有開始存有5個字節(jié)數(shù),編程將第二個字節(jié)數(shù)取出個字節(jié)數(shù),編程將第二個字節(jié)數(shù)取出送片內送片內RAM 30H單元中。程序段如下:單元中。程序段如下:MOV DPTR,#1000H ;置;置ROM地址指針(基址)地址指針(基址)DPTRMOV A,#01H ;表內序號送;表內序號送A(變址)(變址) MOVC A,A+DPTR ;從;從ROM 1000H單元中取數(shù)送到單元中取數(shù)送到AMOV 30H,A ;再存入內;再存入內RAM 30H中中ORG1000H ;偽指令,定義數(shù)表起始地址;偽指令,定義數(shù)表起始地址TAB: DB 55H,67H,9AH,;在;在ROM 10

20、00H開始的空間中開始的空間中 定義定義5單字節(jié)單字節(jié) 第三章 3 - 16例例3-2:設某數(shù):設某數(shù)N已存于已存于20H單元(單元(N10),查表求),查表求N平方值,存入平方值,存入21H單元。單元。 程序段如下:程序段如下: MOV A,20H;取數(shù);取數(shù)N ADD A,#01;加查表偏移量;加查表偏移量 MOVC A,A+PC;查表;查表 NOP TAB:DB 00H,01H,04H,09 ;定義數(shù)表;定義數(shù)表 由于由于PC為程序計數(shù)器,總是指向下一條指令的地址在執(zhí)行第三條指令為程序計數(shù)器,總是指向下一條指令的地址在執(zhí)行第三條指令“MOVC A,A+PC”時,在查表前應在時,在查表前應

21、在A累加器中加上查表偏移量。累加器中加上查表偏移量。 用用DPTRDPTR查表時,表格可以放在查表時,表格可以放在ROM的的64K范圍,用范圍,用MOVCA,A+PC指令時則必須把表格就放在該條指令下面開始的指令時則必須把表格就放在該條指令下面開始的255個字節(jié)的空間中。個字節(jié)的空間中。第三章 3 - 184交換指令(共交換指令(共5條)條)1 1)字節(jié)交換)字節(jié)交換 XCH A, Rn ; (A)(Rn)XCH A, Rn ; (A)(Rn) XCH A, direct XCH A, directXCHA,Ri思考:用不同的方法實現(xiàn)片內思考:用不同的方法實現(xiàn)片內RAM(20H)R1R1 有有

22、3條為整個字節(jié)相互交換,條為整個字節(jié)相互交換,XCHD指令為低指令為低4位相互交位相互交換,換,SWAP為為ACC中的高、低中的高、低4位互換。位互換。A30H 1155H55H11Ha7a4a3a02)半字節(jié)交換)半字節(jié)交換 XCHD A, Ri ; SWAP A例如:已知(例如:已知(A)=34H,(,(R6=29H 執(zhí)行以下指令后,(執(zhí)行以下指令后,(A)=? XCH A,R6; SWAP A第三章 3 - 19堆棧是在內堆棧是在內RAM開辟的一個數(shù)據(jù)的暫存空間,遵守開辟的一個數(shù)據(jù)的暫存空間,遵守“后進先出后進先出”原則操原則操作,其地址指針為作,其地址指針為SP,它指出棧頂?shù)奈恢?,復?/p>

23、時,它指出棧頂?shù)奈恢?,復位時SP=07H。入棧:入棧:PUSH direct ;SP先加先加1,再將數(shù)據(jù)壓棧。,再將數(shù)據(jù)壓棧。出棧;出棧;POP direct ;數(shù)據(jù)先出棧,再;數(shù)據(jù)先出棧,再SP減減1。5堆棧操作指令(共堆棧操作指令(共2條)條)A88H例如,已知(例如,已知(A)=44H,(,(30H)=55H,執(zhí)行以下程序段,執(zhí)行以下程序段MOV SP,#5FH ;棧起點設置為;棧起點設置為5FHPUSH ACC ;A中的中的44H壓到壓到60H中保存中保存PUSH 30H ;30H中的中的55H壓到壓到61H中保存中保存POP 30H ;把;把61H中的中的55H彈出到彈出到30HPO

24、P ACC ;把;把60H中的中的44H彈出到彈出到A中中 PUSH ACCSPXX88H第三章 3 - 20指令運用舉例指令運用舉例: 例:將片內例:將片內RAM 30H單元與單元與40H單元中的內容互換。單元中的內容互換。方法方法1(直接地址傳送法):(直接地址傳送法): MOV31H,30H MOV30H,40H MOV40H,31H SJMP$方法方法2(間接地址傳送法):(間接地址傳送法): MOVR0,#40H MOVR1,#30H MOVA,R0 MOVB,R1 MOVR1,A MOVR0,B SJMP$第三章 3 - 22方法方法3(字節(jié)交換傳送法):(字節(jié)交換傳送法): MO

25、VA,30H XCHA,40H MOV30H,A SJMP$方法方法4(堆棧傳送法):(堆棧傳送法): PUSH30H PUSH40H POP30H POP40H SJMP$第三章 3 - 23傳送類指令小結傳送類指令小結片外片外程序程序存儲器存儲器ROMEPROM特殊功能特殊功能寄存器寄存器SFR片內片內RAM128字節(jié)字節(jié)片外片外數(shù)據(jù)數(shù)據(jù)存儲器存儲器RAMMOVC MOVXMOVPUSHPOPXCHXCHD(A)判斷對錯:判斷對錯:MOVRn,RnMOVRi,RiMOVRn,RiMOV#data,A。注意!注意!好容易好容易出錯?。〕鲥e?。〉谌?3 - 25例例:設設A中有中有 一個一個

26、BCD碼常數(shù),試用查表法獲得其相應的碼常數(shù),試用查表法獲得其相應的ASCII碼碼v解法解法I: MOV DPTR,#TABv MOVC A,.A+DPTRv v TAB:DB 30Hv DB 31Hv DB 32H,33H,34H,35H v 解法解法II: MOVC A,A+PC TAB:DB 30H,31H,32H,33H DB 34H,35H,36H,37H 第三章 3 - 27二、算術運算類指令二、算術運算類指令算術運算類指令有加、減、乘、除法指令,增算術運算類指令有加、減、乘、除法指令,增1和減和減1指令,十進制調整指指令,十進制調整指令,共令,共24條,使用時應注意判斷各種結果對哪

27、些標志位(條,使用時應注意判斷各種結果對哪些標志位(CY、OV、AC、P)產(chǎn)生影響。)產(chǎn)生影響。1.不帶進位的加法指令不帶進位的加法指令(4條)條)指令助記符為指令助記符為ADD,4條指令的第一操作數(shù)都是條指令的第一操作數(shù)都是A,第二操作數(shù)有,第二操作數(shù)有4種種尋址方式尋址方式 。1 1)不帶進位加)不帶進位加 ADDADD A,Rn A,Rn ;AA(A A)+ + (RnRn) ADDADD A,direct A,direct;AA(A A)+ +(directdirect) ADDADD A,Ri A,Ri ;AA(A A)+ + (RiRi) ADDADD A,#data A,#dat

28、a ;AA(A A)+data+data 練習練習3-3 98H+75H分析各標志位的置位情況分析各標志位的置位情況第三章 3 - 282 2)帶進位加)帶進位加 ADDCADDC A,Rn A,Rn ;AA(A A)+ +(RnRn)+(CY) +(CY) ADDC ADDC A,direct A,direct;AA(A A)+ +(directdirect)+(CY) +(CY) ADDC ADDC A,Ri A,Ri ;AA(A A)+(+((RiRi))+(CY) )+(CY) ADDC ADDC A,#data A,#data ;AA(A A)+data+data +(CY)+(CY

29、) 2.帶進位的加法指令帶進位的加法指令(4條)條)指令助記符為指令助記符為ADDC,比比ADD多了加多了加CY位的值(之前指令留下的位的值(之前指令留下的CY值),主要用于多字節(jié)的加法運算,結果也送值),主要用于多字節(jié)的加法運算,結果也送A,影響,影響AC、CY、OV、P位。位。 例如求例如求 5688H+2396H低字節(jié)用低字節(jié)用ADD指令,高字節(jié)用指令,高字節(jié)用ADDC指令指令第三章 3 - 29例例3-4:在內在內RAM 31HRAM 31H、30H30H中存有雙字節(jié)數(shù)(高在中存有雙字節(jié)數(shù)(高在31H31H、低在、低在30H30H中),中),編程把該雙字節(jié)數(shù)與編程把該雙字節(jié)數(shù)與R2R2

30、中單字節(jié)數(shù)相加,和存在內中單字節(jié)數(shù)相加,和存在內RAM 40HRAM 40H單元開始的單元開始的空間中(低在先)空間中(低在先)。 R031H30HCYCYR242H41H40HR1圖 3-2 雙 字 節(jié) 數(shù) 與 單 字 節(jié) 數(shù) 相 加 算 法+第三章 3 - 30MOV R0,#30H ;置被加數(shù)地址指針首址;置被加數(shù)地址指針首址MOVR1,#40H ;置和地址指針首址;置和地址指針首址MOVA, R0 ;取被加數(shù)低字節(jié);取被加數(shù)低字節(jié)ADDA,R2 ;低字節(jié)相加,并產(chǎn)生進位;低字節(jié)相加,并產(chǎn)生進位CYMOVR1,A ;存和的低字節(jié);存和的低字節(jié)INCR0 ;地址指針增;地址指針增1,指向,

31、指向31HINCR1 ;地址指針增;地址指針增1,指向,指向41HMOVA,R0 ;取被加數(shù)的高字節(jié);取被加數(shù)的高字節(jié)ADDCA,#0 ;高字節(jié)與進位;高字節(jié)與進位CY相加,產(chǎn)生新的進位相加,產(chǎn)生新的進位 MOVR1,A ;存和中字節(jié);存和中字節(jié) INCR1 ;地址指針增;地址指針增1,指向,指向42HMOVA,#0 ;ADDC A,#0 ;把高位的進位;把高位的進位CY轉到轉到A中中 MOV R1,A ;存和的高字節(jié),和可能為三字節(jié)數(shù);存和的高字節(jié),和可能為三字節(jié)數(shù) 3. 帶借位減法指令(帶借位減法指令(4條)條)指令助記符為指令助記符為SUBBSUBB。指令的功能都是第一操作數(shù)指令的功能都

32、是第一操作數(shù)A A的內容減去第二操作的的內容減去第二操作的內容,再減去上次的內容,再減去上次的CYCY值,然后把差存入值,然后把差存入A A中,同時產(chǎn)生新的中,同時產(chǎn)生新的ACAC、CYCY、OVOV、P P位的值。位的值。SUBB A,Rn SUBB A,Rn ;AA(A A)- -(RnRn)- -(CYCY)SUBB A,direct SUBB A,direct ;AA(A A)- -(directdirect)-(CY)-(CY) SUBB A,Ri SUBB A,Ri ;AA(A A)-(-((RiRi))-(CY)-(CY) SUBBA,#data;AA(A A)-data-(CY

33、)-data-(CY)注意:沒有不帶借位的減注意:沒有不帶借位的減單字節(jié)減法如何實現(xiàn)?單字節(jié)減法如何實現(xiàn)?CLRC;將前次CY清零 SUBB A,30H 10011000- -) 10000101 00010011結果:結果:(A)=13H,(CY)=0,(AC)=0,(OV)=04.乘法指令(乘法指令(1條)條) MULAB;BA(A)(B) 說明:當積大于說明:當積大于255(0FFH)時,即積的高字節(jié))時,即積的高字節(jié)B不為不為0時,置時,置OV=1,否則,否則OV=0;CY位總是位總是0。5.除法指令(除法指令(1條)條) DIVAB;AA/B(商)(商)B余數(shù)余數(shù)說明:無符號數(shù)相除,

34、當除數(shù)(說明:無符號數(shù)相除,當除數(shù)(B)=0時,時,結果為無意義,并置結果為無意義,并置OV=1;CY位總是位總是0。6.加加1指令(指令(5條)條)助記符為助記符為INC,指令的功能是將操作數(shù)中的內容加指令的功能是將操作數(shù)中的內容加1。除對。除對A操作影響操作影響P外不影響任何標志。外不影響任何標志。INCA;(A)(A)+1INCRnINCdirectINCRiINCDPTR7.減減1指令(指令(4條)條) 注意:沒有對注意:沒有對DPTR的減的減1操作指令操作指令 DEC ADEC A ; (A)(A)1以下類同以下類同DEC RnDEC RnDEC directDEC directDE

35、C RiDEC Ri第二節(jié)第二節(jié) MCS51MCS51單片機的指令分類單片機的指令分類 8.十進制調整指令(十進制調整指令(1條)條) ADD、ADDC指令都是對指令都是對8位二進制數(shù)進行加法運算,當兩個位二進制數(shù)進行加法運算,當兩個BCD碼碼數(shù)進行數(shù)進行加法時,必須增加一條加法時,必須增加一條DA A指令(對其結果進行調整),否則結果就會指令(對其結果進行調整),否則結果就會出錯。出錯。指令的調整原則是:若(指令的調整原則是:若(A0A3)9或(或(AC)=1,則低則低4位位(A0A3)+6調整;若(調整;若(A4A7)9或(或(CY)=1,則高則高4位(位(A4 A7)+6調整。調整。 問

36、題:問題:BCD碼的減法如何實現(xiàn)調整?碼的減法如何實現(xiàn)調整?注意:注意:1)DA指令只能跟在加法指令后面使用;指令只能跟在加法指令后面使用; 2)調整前參與運算的兩數(shù)是)調整前參與運算的兩數(shù)是BCD碼數(shù);碼數(shù); 3)DA指令不能與減法指令配對使用,但可以實現(xiàn)對指令不能與減法指令配對使用,但可以實現(xiàn)對A中壓縮中壓縮BCD數(shù)進行減一操作。數(shù)進行減一操作。例如:設(例如:設(A)=30H(壓縮(壓縮BCD碼數(shù)),執(zhí)行如下指令:碼數(shù)),執(zhí)行如下指令: ADD A,#99H ;實現(xiàn)了;實現(xiàn)了30 1 = 29的操作的操作 DA A 作業(yè):作業(yè):- - - - - 三三.邏輯運算與循環(huán)類指令邏輯運算與循環(huán)

37、類指令“與與”操作指令操作指令 、“或或”操作指令、操作指令、“異或異或”操作指令操作指令求反與清除指令、循環(huán)移位指令求反與清除指令、循環(huán)移位指令 特點特點是當是當A A作目的操作數(shù)(第一操作數(shù))時,影響作目的操作數(shù)(第一操作數(shù))時,影響P P位;帶位;帶進位的移位指令影響進位的移位指令影響CyCy位,其余都不影響位,其余都不影響PSWPSW。 邏輯邏輯“或或”運算指令(運算指令(6 6條)條)此類指令都是按位相此類指令都是按位相“或或”,其中有其中有4條指令的第一操作條指令的第一操作數(shù)都為數(shù)都為A,另外兩條指令的,另外兩條指令的第一操作數(shù)為第一操作數(shù)為direct。 邏輯或指令格式:邏輯或指

38、令格式: ,n n;(A) (A) (Rn) ,directdirect ,i i ,datadata direct,direct, direct, direct, datadata 用法:使某數(shù)位置位或拼接兩數(shù)。用法:使某數(shù)位置位或拼接兩數(shù)。 思考:將思考:將A A中中D5D5置置1 1,其余保持不變?,其余保持不變?若直接尋址是若直接尋址是I/O端口時,則進行讀端口時,則進行讀修修改改寫的邏輯操作,具體是:從該端口鎖存寫的邏輯操作,具體是:從該端口鎖存器讀入原始口數(shù)據(jù)的值(而不是讀引腳狀態(tài)),器讀入原始口數(shù)據(jù)的值(而不是讀引腳狀態(tài)),經(jīng)修改后寫到該輸出口去經(jīng)修改后寫到該輸出口去 。 邏輯邏

39、輯“與與”運算指令(運算指令(6 6條)條) 與與“ORL”O(jiān)RL”指令指令類似,都是按位類似,都是按位“與與”,其中,其中4 4條指令的第條指令的第一一操作數(shù)為操作數(shù)為A A,兩條指令的第一操作數(shù)為,兩條指令的第一操作數(shù)為directdirect。 邏輯邏輯“與與”指令格式指令格式 ,n n;(A) (A)(Rn) ,directdirect ,i i ,datadata direct, direct, direct,data例:將例:將A A中高位清低位不變中高位清低位不變 ,用法:屏蔽某些數(shù)位用法:屏蔽某些數(shù)位思考:屏蔽某數(shù)符號位?思考:屏蔽某數(shù)符號位?練習:將的低位位送到口的低位,高位

40、不變。練習:將的低位位送到口的低位,高位不變。 0 0, ,0 0 ,0 0 , ,0 0 邏輯邏輯“異或異或”運算指令(運算指令(6 6條)條) 指令格式:指令格式: ,i i; (A) (A) (Rn) ,directdirect ,i i ,datadata direct,direct, direct,direct,datadata異或操作的用法:異或操作的用法:某位用某位用“0”異或不變;異或不變;用用“1”異或該位取反。異或該位取反。也稱為也稱為“指定位取反指定位取反”。例如:使例如:使P1口的低口的低2位為位為0,高,高2位取反,其余位不變。位取反,其余位不變。ANLP1,#111

41、11100B ;先對二位清;先對二位清0XRLP1,#11000000B ;再對二位取反;再對二位取反 求反指令(求反指令(1條)條) CPL A;對累加器;對累加器A的內容各位求反,結的內容各位求反,結果送回果送回A中,影響中,影響P位。位。 清清0指令(指令(1條)條) CLR A ;將累加器將累加器A的內容清的內容清0。注意:兩條指令僅對A有效判斷指令的對錯: CLR R1 CLR R2 循環(huán)移位指令(循環(huán)移位指令(4條,條,僅對僅對A有效有效) 其中有兩條不帶其中有兩條不帶CY位的逐位循環(huán)移位一次指令,不影響位的逐位循環(huán)移位一次指令,不影響PSW。兩條帶。兩條帶CY位的逐位循環(huán)移位一次

42、指令,僅影響位的逐位循環(huán)移位一次指令,僅影響CY位。位。三三. . 邏輯運算與循環(huán)類指令邏輯運算與循環(huán)類指令 RL A RL A;左移;左移 RR ARR A;右移;右移 RLC ARLC A;帶進位帶進位CY的左移的左移 RRC ARRC A;帶進位帶進位CY的右移的右移 1 0 1 0 1 1 0 11第三章 3 - 44例:將雙字節(jié)數(shù)(例:將雙字節(jié)數(shù)(R2R2)()(R3R3)右移一位)右移一位 三三. . 邏輯運算與循環(huán)類指令邏輯運算與循環(huán)類指令 1 0 1 0 1 1 0 10RRC ACLR CMOV A,R2RRC AMOV R2,AMOV A,R3RRC A MOV R3,A0

43、 1Cy第三章 3 - 45四、控制程序轉移類指令四、控制程序轉移類指令 控制程序轉移類指令控制程序轉移類指令主要功能是控制程序轉移到新的主要功能是控制程序轉移到新的PC地址去執(zhí)行。地址去執(zhí)行。 指令的實質:找一個新的值指令的實質:找一個新的值PCPC ,從而改變程序執(zhí)行從而改變程序執(zhí)行方向。方向。分為四大類:分為四大類:無條件轉移指令;無條件轉移指令;條件轉移指令;調用指令;返回指令條件轉移指令;調用指令;返回指令。1.1.無條件轉移指令(無條件轉移指令(4 4條)條)(1 1)長轉移指令長轉移指令LJMP addr16 LJMP addr16 ;PC addr16PC addr16范圍范圍

44、 64K64K(2)絕對轉移指令絕對轉移指令AJMP addr11 ;PC100addr11指令中包含有指令中包含有11位的目的地址(位的目的地址(a10 a9 a8 a7 a6 a5 a4 a3 a2 a1)四、控制程序轉移類指令四、控制程序轉移類指令a 1 0a 9a 800001a 7a 6a 5a 4a 3a 2a 1a 0R O MP CA J M P a d d r 1 1程 序 :圖 3 - 4 A J M P a d d r 1 1 的 目 標 地 址 形 成 示 意 圖1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 01 1 1 1 0 0 0 0 0 0 0 0

45、 0 0 1 11 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0高 5 位H轉移范圍轉移范圍2K2K字節(jié)字節(jié) PC PC 高高5 5位不變位不變 機器碼為兩字節(jié)機器碼為兩字節(jié) a10 a9 a8 0 0 0 0 1a10 a9 a8 0 0 0 0 1 a7-a0 a7-a0 四、控制程序轉移類指令四、控制程序轉移類指令(3)短(相對)轉移指令短(相對)轉移指令SJMPrel;PCPC+2+rel其目的地址是由其目的地址是由PC中的當前值和指令的第二字節(jié)中帶符號的相對地址中的當前值和指令的第二字節(jié)中帶符號的相對地址相加而成的。因此本指令轉移的范圍為:下一條指令的前相加而成的。因此

46、本指令轉移的范圍為:下一條指令的前128或本指令后或本指令后127字節(jié)的范圍內(字節(jié)的范圍內(范圍范圍 -126+129-126+129) 實際應用時,實際應用時,addr16、addr11、rel一般用符號地址形式。一般用符號地址形式。(4)間接轉移指令(又稱散轉指令)間接轉移指令(又稱散轉指令)JMPA+DPTR;PC(A)+(DPTR目的地址由指針目的地址由指針DPTR和變址和變址A的內容之和形成,的內容之和形成,范圍達范圍達64K 。四、控制程序轉移類指令四、控制程序轉移類指令2條件轉移指令(條件轉移指令(8條)條)條件轉移指令都是依據(jù)某種條件成立才轉移(不成立則繼續(xù)條件轉移指令都是依

47、據(jù)某種條件成立才轉移(不成立則繼續(xù)順序下去)的指令。此類指令順序下去)的指令。此類指令均為相對尋址均為相對尋址指令。指令。范圍:以下一條指令的首地址為中心的范圍:以下一條指令的首地址為中心的128+127字節(jié)內。字節(jié)內。(1 1)累加器判零轉)累加器判零轉 JZ relJZ rel;A=0 A=0 轉,轉,PC=PC+2+relPC=PC+2+rel JNZ rel JNZ rel;A0A0轉轉(2 2)CYCY位條件判轉位條件判轉 JC relJC rel;CY=1 CY=1 轉轉PC=PC+2+relPC=PC+2+rel JNC rel JNC rel;CY=0 CY=0 轉轉四、控制程

48、序轉移類指令四、控制程序轉移類指令(3 3)數(shù)值比較轉)數(shù)值比較轉 均為三字節(jié)均為三字節(jié) CJNE ACJNE A,#data#data,relrel CJNE A CJNE A,directdirect,relrel CJNE Rn CJNE Rn,#data #data ,relrel CJNE Ri,.#daata,rel CJNE Ri,.#daata,rel 指令功能為兩數(shù)比較不相等指令功能為兩數(shù)比較不相等 轉移轉移, ,操作過程為操作過程為第一數(shù)減第二數(shù)第一數(shù)減第二數(shù) 狀態(tài)標志送狀態(tài)標志送PSWPSW,但不改變原來的操作數(shù),但不改變原來的操作數(shù)注意:參與比較的數(shù)為無符號數(shù)注意:參與

49、比較的數(shù)為無符號數(shù)四、控制程序轉移類指令四、控制程序轉移類指令(4 4)可尋址位條件判轉)可尋址位條件判轉 (三字節(jié))(三字節(jié))JB bitJB bit,relrel; (bitbit)=1 =1 轉轉JNB bitJNB bit,rel rel ;(;(bitbit)=0 =0 轉轉JBC bitJBC bit,rel rel ;(;(bitbit)=1 =1 轉,轉, 并將該位清零并將該位清零(5)循環(huán)控制指令)循環(huán)控制指令DJNZ DJNZ Rn,relDJNZ Rn,rel DJNZ direct,rel DJNZ direct,rel; 指令功能是把源操作數(shù)減指令功能是把源操作數(shù)減1

50、,結果送回原操作數(shù)中,再判,結果送回原操作數(shù)中,再判結果不為結果不為0就轉到目的地去,否則繼續(xù)下面一條指令執(zhí)行。就轉到目的地去,否則繼續(xù)下面一條指令執(zhí)行。 主要應用在循環(huán)結構的編程中,作循環(huán)結束控制用。主要應用在循環(huán)結構的編程中,作循環(huán)結束控制用。 四、控制程序轉移類指令四、控制程序轉移類指令條件轉移指令的應用條件轉移指令的應用例例1:根據(jù):根據(jù)A中的數(shù)是大于中的數(shù)是大于/等于等于/小于小于64H這三種情況去執(zhí)行這三種情況去執(zhí)行三種不同的處理程序。三種不同的處理程序。CJNE A,#64H,NEQ ;不等則轉到;不等則轉到NEQEQ: ;執(zhí)行相等的處理程序;執(zhí)行相等的處理程序NEQ:JNC B

51、IG;大于則轉到;大于則轉到BIG去執(zhí)行程序去執(zhí)行程序LOW: ;否則執(zhí)行小于的處理程序;否則執(zhí)行小于的處理程序 LMP NEXTBIG: ;執(zhí)行大于的處理程序;執(zhí)行大于的處理程序四、控制程序轉移類指令四、控制程序轉移類指令例例2 2:比較兩無符號數(shù)的大?。罕容^兩無符號數(shù)的大小 求求R1R1、R2R2中較大的數(shù),結果中較大的數(shù),結果存存R3 R3 中。中。解:解: ORG 0000HORG 0000H AJMP MAIN AJMP MAIN ORG 0030H ORG 0030HMAINMAIN: MOV AMOV A,R1R1 CJNE A CJNE A,02H02H,NEXTNEXTNEX

52、TNEXT: JC/JNC DONE (?)JC/JNC DONE (?) MOV A MOV A,R2R2DONEDONE: MOV R3MOV R3,A A LP LP: SJMP JPSJMP JP END END 注意問題:注意問題: 四、控制程序轉移類指令四、控制程序轉移類指令例例3:判正負數(shù):判正負數(shù)要求從要求從P1口輸入一個數(shù),若為正數(shù)將其存入口輸入一個數(shù),若為正數(shù)將其存入20H單元,為負數(shù)則取反后存單元,為負數(shù)則取反后存20H單元。單元。解:分析怎樣判斷數(shù)的正負?解:分析怎樣判斷數(shù)的正負?D7=1負數(shù),負數(shù),D7=0正數(shù)正數(shù)程序如下:程序如下:ORG0030HMAIN:MOVP

53、1,#0FFH;MOVA,P1JNBACC.7,STOR;正數(shù);正數(shù)CPLASTOR:MOV20H,A;SJMP$判斷數(shù)的正負的其他方法:判斷數(shù)的正負的其他方法:a)RLCAJNCSTORb)ANLA,#80H;JZSTOR;四、控制程序轉移類指令四、控制程序轉移類指令3.子程序調用及返回指令(子程序調用及返回指令(4條)條)(1)長調用指令)長調用指令 LCALL addr16 ;PCPC+3,SPSP+1,(SP)PC710SPSP+1,(,(SP)PC158PCaddr16(2)絕對調用指令)絕對調用指令 ACALL addr11;PCPC+2,SPSP+1(SP)PC70SPSP+1,

54、(,(SP)PC158,PC100addr11 例:(例:(SPSP)=30H=30H 6100H ACALL 480H 6100H ACALL 480H 1) 1) (PCPC): 6100+2=6102H-: 6100+2=6102H-斷點斷點 2) 2) (PCPC)=6480H=6480H (SPSP)=32H =32H (SPSP)=61H=61H (SP)-1)=02H四、控制程序轉移類指令四、控制程序轉移類指令30h31h32h0261SP四、控制程序轉移類指令四、控制程序轉移類指令(3)子程序返回指令)子程序返回指令RET;PC158(SP),),SPSP-1;PC70(SP)

55、,),SPSP-1從堆棧中彈出(斷點)地址值給從堆棧中彈出(斷點)地址值給PC(先高后低,棧指針減(先高后低,棧指針減2),使程),使程序從該序從該PC值處開始執(zhí)行程序。不影響值處開始執(zhí)行程序。不影響PSW。(4)中斷返回)中斷返回 RETI ;PC158(SP),),SPSP-1;PC70(SP),),SPSP-1 除具有除具有RET指令的所有功能外,還將指令的所有功能外,還將自動清除優(yōu)先級狀態(tài)觸發(fā)器自動清除優(yōu)先級狀態(tài)觸發(fā)器。RETI指令用在中斷服務子程序中,作最后一條返回指令。指令用在中斷服務子程序中,作最后一條返回指令。 注意:不能用注意:不能用RETRET指令代替指令代替RETI。 4

56、空操作指令(空操作指令(1條)條)NOP;指令的執(zhí)行時間為一個機器周期,占一個字節(jié)。指令的執(zhí)行時間為一個機器周期,占一個字節(jié)。例如在延時子程序中微調延時時間;調試程序時用一些例如在延時子程序中微調延時時間;調試程序時用一些NOP來過渡;有些單片機應用系統(tǒng)中還應用它來實現(xiàn)軟件來過渡;有些單片機應用系統(tǒng)中還應用它來實現(xiàn)軟件抗干擾等??垢蓴_等。四、控制程序轉移類指令四、控制程序轉移類指令1.位傳送指令(位傳送指令(2條)條)MOV CMOV C,bitbit; C(bit)MOV bitMOV bit,C C; bitC指令中必須有一個位操作數(shù)是布爾累加器指令中必須有一個位操作數(shù)是布爾累加器C,另一

57、個才可以是直接,另一個才可以是直接可尋址的位。可尋址的位。例:例:MOV P1.5,C;把;把C中的值送到中的值送到P1.5口線輸出口線輸出2.位修改指令(位修改指令(6條)條)CLR C CLR C ; C0CLR bit CLR bit ;(bit)0SETB C SETB C ;C1SETB bit SETB bit ;(bit)1CPL C CPL C ;C/CCPL bit CPL bit ; (bit)/(bit)五、位操作類指令五、位操作類指令這組指令用來實現(xiàn)對位清這組指令用來實現(xiàn)對位清0,取反,置取反,置1,不影響其它標志,不影響其它標志位。位。五、位操作類指令五、位操作類指令

58、3.位邏輯運算指令(位邏輯運算指令(4條)條)這組指令的第一操作數(shù)必須是這組指令的第一操作數(shù)必須是C,兩位邏輯運算的結果送,兩位邏輯運算的結果送C中,式中的斜杠是位取反,但并不影響操作數(shù)本身的值。中,式中的斜杠是位取反,但并不影響操作數(shù)本身的值。 ANL CANL C,bitbit; CC(bit)ANL CANL C,/bit/bit;CC/(bit)ORL CORL C,bitbit;CC(bit)ORL CORL C,/bit/bit; CC/(bit) LJMPLJMPPC64K AJMPAJMPPC+2 SJMPSJMPPC+2-128+127 JMPJMP A+DPTRPCPC+2

59、DPTR256小結小結:練習練習1、設(、設(SP)=0BH,(,(0AH)=23H,(,(0BH)=01H執(zhí)行執(zhí)行RET后后,分析執(zhí)行過程與堆棧操作分析執(zhí)行過程與堆棧操作. MOV (PC)=0123H(返回主程序)(返回主程序)結果結果: :(SP)=09H01 23HSP0BHSPSP0AH09H3456H外ROM內RAMPCPC 23H01H23H01H(PC)=LCALL 34H 56H MOV 執(zhí)行結果:(執(zhí)行結果:(SP)=09H,(,(09H)=21H,(,(08H)=03H, (PC)=3456H SP07HSPSP08H09H2100H3456H外ROM內RAMPC+3PC

60、2103HPC03H21H練習練習2、設(、設(SP)=07H,(,(PC)=2100H,子程序首地址為,子程序首地址為3456H,執(zhí)行下列指令,執(zhí)行下列指令,分析執(zhí)行過程與堆棧操作分析執(zhí)行過程與堆棧操作.LCALL3456HMOVA,20H用匯編語言編寫程序用匯編語言編寫程序,一般可分為以下幾個步驟:一般可分為以下幾個步驟:1)分析題意分析題意,確定算法確定算法;2)設計程序流程圖設計程序流程圖;3)確定數(shù)據(jù)結構:合理地選擇和分配內存單元以及工作寄存確定數(shù)據(jù)結構:合理地選擇和分配內存單元以及工作寄存器器;4)編寫源程序:編寫源程序:5)上機調試程序。上機調試程序。第三節(jié)第三節(jié) 程序設計方法程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論