




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、MCS-51 單片機應用技術教程單片機應用技術教程 青島理工大學青島理工大學 費縣校區(qū)費縣校區(qū) 劉鳴濤劉鳴濤第第3章章 MCS-51單片機的指令系統(tǒng)單片機的指令系統(tǒng)u 匯編語言的指令格式及符號簡介 u 尋址方式u 數(shù)據(jù)傳送類指令u 算術運算類指令u 邏輯運算類指令u 位操作類指令u 控制轉(zhuǎn)移類指令 3.1 匯編語言的指令格式及符號簡介匯編語言的指令格式及符號簡介匯編語言匯編語言(Assembly Language)是面向機器的程序設計語言。在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變
2、成了匯編語言。于是匯編語言亦稱為符號語言。使用匯編語言編寫的程序,機器不能直接識別,要由一種程序?qū)R編語言翻譯成機器語言 3.1 匯編語言的指令格式及符號簡介匯編語言的指令格式及符號簡介匯編語言直接同計算機的底層軟件甚至硬件進行交互,它具有如下一些優(yōu)點優(yōu)點: (1)能夠直接訪問與硬件相關的存儲器或I/O端口;(2)能夠不受編譯器的限制,對生成的二進制代碼進行完全的控制;(3)能夠根據(jù)特定的應用對代碼做最佳的優(yōu)化,提高運行速度;(4)能夠最大限度地發(fā)揮硬件的功能。同時還應該認識到,匯編語言是一種層次非常低的語言,它僅僅高于直接手工編寫二進制的機器指令碼,因此不可避免地存在一些缺點缺點:(1)編寫
3、的代碼非常難懂,不好維護;(2)很容易產(chǎn)生bug,難于調(diào)試;(3)開發(fā)效率很低,時間長且單調(diào)。 3.1 匯編語言的指令格式及符號簡介匯編語言的指令格式及符號簡介3.1.1 3.1.1 指令格式指令格式指令:即命令, 人們給計算機的命令指令有兩種表示方式:機器碼機器碼機器語言(機器能直接識別)助記符助記符匯編語言(供設計人員使用) 機器碼和助記符一一對應,匯編語言可匯編為機器語言,機器語言可反匯編為匯編語言。 3.1 匯編語言的指令格式及符號簡介匯編語言的指令格式及符號簡介3.1.1 3.1.1 指令格式指令格式標號: 操作碼助記符 第一操作數(shù) ,第二操作數(shù) ,第三操作數(shù) ;注釋例如:LOOP:
4、MOV A, #50H;(A)50H DECR0;(R0)(R0)-1 DJNZ R0, LOOP ;(R0)-10,則程序轉(zhuǎn)移到LOOP地址;否則順序執(zhí)行 END;結束3.1 匯編語言的指令格式及符號簡介匯編語言的指令格式及符號簡介3.1.1 3.1.1 指令格式指令格式匯編語言指令的幾種形式匯編語言指令的幾種形式 (1)沒有操作數(shù): RET;NOP;(2)有1個操作數(shù):INC A;SJMP NEXT;(3)有2個操作數(shù):MOV R7, #0FFH;ADD A, R0;DJNZ R2, LOOP;(4)有3個操作數(shù):CJNE A, #20H, NEQ3.1 匯編語言的指令格式及符號簡介匯編語
5、言的指令格式及符號簡介3.1.1 3.1.1 指令格式指令格式機器語言的幾種形式:機器語言的幾種形式:(1)單字節(jié)指令 :INC DPTR 指令機器代碼:A3 ADD A, R7 指令機器代碼:2F (2) 雙字節(jié)指令 :SUBB A, 2BH 指令機器代碼:95 2B(3)三字節(jié)指令:MOV 20H, #00H 指令機器代碼: 75 20 00 LJMP 2000H 指令機器代碼: 02 20 003.2 尋尋 址址 方方 式式 MCS-51單片機有7種尋址方式,見表3.1。 表3.1 7種尋址方式的比較序號尋址方式利用的寄存器和存儲空間1立即尋址程序存儲器ROM2直接尋址內(nèi)部RAM、特殊功
6、能寄存器SFR3寄存器尋址寄存器R0R7、A、B、DPTR和C(布爾累加器)4寄存器間接尋址內(nèi)部RAM(R0、R1、SP)、外部RAM(R0、R1、DPTR)5變址尋址程序存儲器ROM(A+DPTR、A+PC)6相對尋址程序存儲器ROM(PC+偏移量)7位尋址內(nèi)部RAM的20H2FH單元和部分SFR3.2.1 3.2.1 立即尋址立即尋址例如:MOV A, #23H ; (A)23H,即累加器A的內(nèi)容被替換為立即數(shù)23H。0111010000100011PC操作碼立即數(shù)ACCE0H圖3.1 MOV A,#23H的執(zhí)行示意圖該指令的功能是將8位的立即數(shù)23H傳送到累加器A中。如圖3.1所示。其中
7、,目的操作數(shù)采用寄存器尋址,源操作數(shù)采用立即尋址。3.2 尋尋 址址 方方 式式 在指令中直接給出了參與運算的操作數(shù)。3.2.2 3.2.2 直接尋址直接尋址直接尋址是指在指令中包含了操作數(shù)的地址,該地址直接給出了參加運算或傳送的單元或位。直接尋址方式可訪問三種地址空間:特殊功能寄存器SFR(該空間只能采用直接尋址)。內(nèi)部數(shù)據(jù)RAM的低128個字節(jié)單元(該空間還可以采用寄存器間接尋址)。221個位地址空間。例如例如:MOV A, 40H ;把40H單元的內(nèi)容送到累加器中,即(A)(40H)。 1110010101000000PC操作碼直接地址ACCE0H40HROM內(nèi)部RAM圖3.2 MOV
8、A,40H的執(zhí)行示意圖 3.2 尋尋 址址 方方 式式 3.2.3 3.2.3 寄存器尋址寄存器尋址 寄存器尋址是指定某一可尋址的寄存器的內(nèi)容為操作數(shù)。 例如:MOV A, R0 ;(A)(R0)該指令的功能是將R0中的數(shù)據(jù)傳送到累加器A中。源操作數(shù)與目的操作數(shù)都采用了寄存器尋址。 在MCS-51單片機中,能夠用來間接尋址的寄存器有:用戶所選定的工作寄存器組的R0、R1,堆棧指針SP和16位的數(shù)據(jù)指針DPTR。 內(nèi)部數(shù)據(jù)RAM的寄存器間接尋址采用寄存器R0、R1;外部數(shù)據(jù)RAM的寄存器間接尋址有兩種形式:一是采用R0、R1作間址寄存器,這時R0或R1提供低8位地址,而高8位地址則由P2端口提供
9、;二是采用16位的DPTR作間址寄存器。 3.2.4 3.2.4 寄存器間接尋址寄存器間接尋址3.2 尋尋 址址 方方 式式 例如:設R0的內(nèi)容為60H,且(60H)=10H,即60H地址單元中的內(nèi)容為10H,則語句MOV A, R0的執(zhí)行過程如圖3.3所示。執(zhí)行后,(A)=10H,即累加器A的內(nèi)容成為10H。01100000ACCR060H10H0001000000010000內(nèi)部RAM圖3.3 MOV A,R0的執(zhí)行示意圖又如:MOVX A, R0;(A)(R0),用R0間接尋址的單元中的內(nèi)容替換A的內(nèi)容。MOVX A, DPTR;(A)(DPTR),用DPTR間接尋址的單元中的內(nèi)容替換A
10、的內(nèi)容。3.2.4 3.2.4 寄存器間接尋址寄存器間接尋址3.2 尋尋 址址 方方 式式 3.2.5 3.2.5 變址尋址變址尋址這種尋址方式是以數(shù)據(jù)指針DPTR或程序計數(shù)器PC作為基址寄存器,以累加器A作為偏移量寄存器,將一個基址寄存器的內(nèi)容與偏移量寄存器的內(nèi)容之和作為操作數(shù)地址。 例如:MOVC A, A+DPTR設(A)=10H,(DPTR)=1000H,程序存儲器的(1010H)=45H,則上面程序語句的功能是將A的內(nèi)容與DPTR的內(nèi)容相加形成操作數(shù)地址(1010H),把該地址中的數(shù)據(jù)傳送到累加器A。即(A)(A)+(DPTR)。結果:(A)=45H。 00010000DPHROM0
11、0000000DPL00010000ACC00010000+00010000(DPTR)=1010HDPHDPL01000101ACC01000101圖 3.4 MOVC A,A+DPTR的執(zhí)行示意圖3.2 尋尋 址址 方方 式式 相對尋址相對尋址是把指令中給定的地址偏移量rel與程序計數(shù)器PC的當前值(讀出該雙字節(jié)或三字節(jié)的跳轉(zhuǎn)指令后,PC指向的下條指令的地址)相加,得到真正的程序轉(zhuǎn)移地址。 例如:SJMP rel設該轉(zhuǎn)移指令存放在1000H單元,取出操作碼后PC指向1001H單元,取出偏移量后PC指向1002H單元,所以計算偏移量時PC當前地址為(1000+2)H,為轉(zhuǎn)移指令首地址加2;r
12、el為相對與此地址的偏移量,以補碼形式給出。假設rel=05H,則補碼運算后,就形成跳轉(zhuǎn)地址(1000+2+5)=1007H。其過程如圖3.5所示。 3.2.6 3.2.6 相對尋址相對尋址3.2 尋尋 址址 方方 式式 3.2.6 3.2.6 相對尋址相對尋址3.2 尋尋 址址 方方 式式 圖 3.5 相對尋址示意圖3.2.7 3.2.7 位尋址位尋址MCS-51單片機可對片內(nèi)RAM的兩個區(qū)域進行位尋址:一個是20H2FH單元的128位,另一個是特殊功能寄存器的93位。在尋址時,同一個位地址可以有多種標識方式,讀者可參看后面3.6節(jié)“位操作指令”的相關內(nèi)容。3.2 尋尋 址址 方方 式式 3
13、.3.1 3.3.1 內(nèi)部內(nèi)部RAMRAM數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令格式:MOV 目的操作數(shù),源操作數(shù)功能:把第二操作數(shù)指定的字節(jié)內(nèi)容傳送到第一操作數(shù)指定的單元中。不影響源操作數(shù)內(nèi)容,不影響別的寄存器和標志。 1. 以累加器A為目的操作數(shù)的傳送類指令3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令指令助記符及功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式MOVA,direct;(A)(direct) 直接尋址MOVA,Ri;(A)(Ri)寄存器間接尋址MOVA,Rn;(A)(Rn)寄存器尋址MOVA,#data;(A)data立即尋址例例1 若(50H)=10H,則執(zhí)行指令MOV A, 50H之后
14、,(A)=10H。例例2 若(R0)=20H,(20H)=39H,則執(zhí)行指令MOV A, R0后,(A)=39H。例例3 若(R5)=55H,則執(zhí)行指令MOV A, R5后,(A)=55H。3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令2. 以Rn為目的操作數(shù)的傳送類指令例例1 若(A)=20H,則執(zhí)行指令MOV R3, A后,(R3)=20H。例例2 若(30H)=01H,則執(zhí)行指令MOV R7, 30H后,(R7)=01H。指令助記符及功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式MOVRn,A;(Rn)(A)寄存器尋址MOVRn,direct;(Rn)(direct)直接尋址MOVRn,
15、#data;(Rn)data立即尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令例例1 若(30H)=20H,(R0)=30H,則執(zhí)行指令MOV 90H, R0的結果為(90H)=20H。例例2 若例1中的條件不變,而執(zhí)行指令MOV P1, R0,則(P1)=20H。 3. 以直接地址directX為目的操作數(shù)的傳送類指令指令助記符及功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式MOVdirectX,A;(directX)(A)寄存器尋址MOVdirectX,Rn;(directX)(Rn)寄存器尋址MOVdirectX,directY;(directX)(directY)直接尋址MOVdi
16、rectX,Ri;(directX)(Ri)寄存器間接尋址MOVdirectX,#data;(directX)data立即尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令例例1 若(R0)=50H,(50H)=20H,(A)=10H,則執(zhí)行指令“MOV R0, A”后,50H單元的內(nèi)容由原來的20H變?yōu)?0H。4. 以寄存器間接地址Ri為目的操作數(shù)的傳送類指令指令助記符及功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式MOVRi,A;(Ri)(A)寄存器尋址MOVRi,direct;(Ri)(direct)直接尋址MOVRi,#data;(Ri)data立即尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類
17、指令5. 16位目標地址傳送指令這條指令的功能是:把16位立即數(shù)送入DPTR中。而16位的數(shù)據(jù)指針DPTR由DPH與DPL組成,該指令執(zhí)行后,16位立即數(shù)的高8位送入DPH中,低8位送入DPL中。該指令的執(zhí)行,不影響程序狀態(tài)寄存器PSW。指令助記符及功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式MOVDPTR,#data16;(DPTR)data16立即尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令3.3.2 3.3.2 外部外部RAM RAM 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式MOVXA,DPTR;(A)(DPTR)寄存器間接尋址
18、MOVXA,Ri;(A)(Ri)寄存器間接尋址MOVXDPTR,A;(DPTR)(A)寄存器尋址MOVXRi,A;(Ri)(A)寄存器尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令例例1 設(P2)=20H,現(xiàn)將A中數(shù)據(jù)存儲到20FFH單元中去??捎靡韵鲁绦?qū)崿F(xiàn):MOV R1, #0FFH ;(R1)0FFHMOVX R1, A ;(20FFH)(A)也可采用下述程序?qū)崿F(xiàn):MOV DPTR, #20FFH ;(DPTR)20FFHMOVX DPTR, A ;(DPTR)(A),即(20FFH)(A)指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式MOVXA,DPTR;(A)(DP
19、TR)寄存器間接尋址MOVXA,Ri;(A)(Ri)寄存器間接尋址MOVXDPTR,A;(DPTR)(A)寄存器尋址MOVXRi,A;(Ri)(A)寄存器尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令例例2 將外部數(shù)據(jù)存儲器7FF0H單元中的數(shù)據(jù)取出,存放到外部數(shù)據(jù)存儲器2000H單元中去。MOV DPTR, #7FF0HMOVX A, DPTRMOV DPTR, #2000HMOVX DPTR, A3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令例例1 在外部程序存儲器2000H單元開始存放了數(shù)字09的共陰極數(shù)碼管的16進制數(shù)的字形代碼3FH、06H、6FH。要求根據(jù)A中的值(09)來查找該數(shù)字所對應的代碼以
20、便顯示。若用PC作基址寄存器,則需要在MOVC A, A+PC指令前用一加法指令對地址進行調(diào)整:ADD A, #dataMOVC A, A+PC3.3.3 3.3.3 程序存儲器程序存儲器 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式MOVCA,A+PC;(A)(A)+(PC)+1)變址尋址MOVCA,A+DPTR;(A)(A)+(DPTR)變址尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 1. 字節(jié)交換指令例例1 設(R1)=30H,(30H)=45H,(A)=7FH,則執(zhí)行指令:XCH A, R1結果:(A)=45H,而(30H)=7FH,從而實
21、現(xiàn)了累加器A與內(nèi)部數(shù)據(jù)存儲器RAM中30H單元的數(shù)據(jù)交換。3.3.4 3.3.4 數(shù)據(jù)交換指令數(shù)據(jù)交換指令指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式XCHA,direct(direct)直接尋址XCHA,Ri(Ri)間接尋址XCHA,Rn(Rn)寄存器尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令2. 半字節(jié)交換指令例例1 設(30H)=6FH,(R0)=30H,(A)=0F6H,則執(zhí)行指令:XCHD A, Ri結果:(A)=0FFH,(30H)=66H數(shù)據(jù)交換指令除了影響始終跟蹤A中數(shù)據(jù)奇偶性的P標志外,對PSW中其他標志位均無影響。指令助記符與功能說明如下:目的操作數(shù)源
22、操作數(shù)功能說明源操作數(shù)尋址方式XCHDA,Ri(Ri)間接尋址3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令3. 累加器A中高四位與低四位交換指令SWAP A該指令所執(zhí)行的操作是累加器A中的高4位與低4位的內(nèi)容互換,其結果仍存放在累加器A中。例例1 設(A)=0A5H(10100101B),則執(zhí)行指令:SWAP A結果:(A)=5AH(01011010B)指令SWAP交換了A中高、低半字節(jié)(30和74),結果不影響標志寄存器PSW。3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令3.3.5 3.3.5 堆棧操作指令堆棧操作指令堆棧操作指令只有2條,即:壓入(PUSH)和彈出(POP)。壓入指令:PUSH direc
23、t ;SPSP+1,(SP)(direct)彈出指令:POP direct ;(SP)(direct),SPSP-13.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令例1PUSH ACC ;保護A中數(shù)據(jù) PUSH PSW ;保護標志寄存器中數(shù)據(jù) ;執(zhí)行服務程序 POP PSW ;恢復標志寄存器中數(shù)據(jù) POP ACC ;恢復A中數(shù)據(jù)例2PUSH ACC PUSH PSW POP ACC POP PSW例3 PUSH DPH PUSH DPL POP DPL POP DPH3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令3.4.1 3.4.1 加減運算指令加減運算指令 1. 加法指令 這類指令所完成的操作是把源操作數(shù)(立即
24、數(shù)、直接地址單元內(nèi)容、間接地址單元內(nèi)容、工作寄存器內(nèi)容)與累加器A的內(nèi)容相加,將結果保存在累加器A中。 3.4 算術運算類指令算術運算類指令指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式ADDA,#data;(A)(A)+data立即尋址ADDA,direct;(A)(A)+(direct)直接尋址ADDA,Ri;(A)(A)+(Ri)寄存器間接尋址ADDA,Rn;(A)(A)+(Rn)寄存器尋址例例1 執(zhí)行指令:MOV A, #0A9HADD A, #0B8H對程序狀態(tài)寄存器的影響如圖3.6所示。運算結果:(A)=61H,CY=1,AC=1,OV=1,P=1,(PSW)
25、=0C5H3.4 算術運算類指令算術運算類指令例例2 8位數(shù)加法程序片斷1: MOVA, #23H ADDA, #5AH運算結果:(A)=7DH,CY=0,OV=0,AC=0,P=0,(PSW)=00H。 000000000001111111111111 d7d0d4d3無進位AC=0 0 =0,OV=0無進位CY=0P=003.4 算術運算類指令算術運算類指令例例3 8位數(shù)加法程序片斷2:MOVA, #0ABHADDA, #9AH運算結果:(A)=45H,CY=1,OV=1,AC=1,P=1,(PSW)=0C5H。 000001000111000111101111 d7d0d4d3有進位AC
26、=1 1 =1,OV=1有進位CY=1P=1103.4 算術運算類指令算術運算類指令帶進位加法指令與前述加法指令的區(qū)別僅為考慮進位位,其他與加法指令相同。2. 帶進位加法指令指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式ADDCA,#data;(A)(A)+data+(C)立即尋址ADDCA,direct;(A)(A)+(direct)+(C)直接尋址ADDCA,Ri;(A)(A)+(Ri)+(C)寄存器間接尋址ADDCA,Rn;(A)(A)+(Rn)+(C)寄存器尋址3.4 算術運算類指令算術運算類指令例例3 利用ADDC指令可以進行多字節(jié)的加法運算。設有兩個16位數(shù)相
27、加,被加數(shù)的高8位放在41H,低8位放在40H,加數(shù)的高8位放在43H,低8位放在42H,和的低8位存放在50H,高8位存放在51H,進位位存放在52H??删幊绦蛉缦拢豪? 設(A)=0AAH,(R0)=55H,C=1,則執(zhí)行指令:ADDC A, R0運算結果:(A)=00000000B,AC=1,CY=1,OV=1。例例2 設(A)=35H,(40H)=21H,C=0,則執(zhí)行指令:ADDC A, 40H運算結果:(A)=56H,AC=0,CY=0,OV=0。這與執(zhí)行指令“ADD A, 40H”的結果是一樣的。3.4 算術運算類指令算術運算類指令SHJ: MOV A, 40H;(A)被加數(shù)低
28、8位ADD A, 42H;與加數(shù)低8位相加MOV 50H, A;和的低8位存入50HMOV A, 41H;(A)被加數(shù)高8位ADDC A, 43H ;被加數(shù)高8位與加數(shù)高8位以及低位來的進位相加MOV 51H, A;和的高8位存入51H單元MOV A, #00H ;(A)00HADDC A, #00H ;(A)(A) +00H+高8位來的進位MOV 52H, A;進位位C內(nèi)容存入52H單元3.4 算術運算類指令算術運算類指令3. 帶借位減指令指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明源操作數(shù)尋址方式SUBBA,#data;(A)(A)-data-(C)立即尋址SUBBA,direct
29、;(A)(A)-(direct)-(C) 直接尋址SUBBA,Ri;(A)(A)-(Ri)-(C)寄存器間接尋址SUBBA,Rn;(A)(A)-(Rn)-(C)寄存器尋址3.4 算術運算類指令算術運算類指令例例1 設(40H)=0BAH,(41H)=98H,試編寫40H內(nèi)容減去41H內(nèi)容后,結果再存入40H單元的程序。MOVA, 40H ;(A)(40H)CLRC;進位位C清0SUBBA, 41H ;(A)(A)-(41H) -(C)MOV40H, A ;(40H)(A)執(zhí)行以上程序后,(40H)=22H,CY=0,OV=0。如果參與運算的兩數(shù)為無符號數(shù),則其溢出與否與OV狀態(tài)無關,而是靠CY
30、是否有借位來判斷,OV僅僅表示帶符號數(shù)運算時是否溢出。3.4 算術運算類指令算術運算類指令例例2 設有兩個16位數(shù)相減,被減數(shù)的高8位放在41H,低8位放在40H,減數(shù)高8位放在43H,低8位放在42H,差的低8位存放在50H,高8位存放在51H,借位位存放在52H。 可編程序如下:SHJIAN:MOV A, 40H ;(A)被減數(shù)低8位CLR C ;C位清0SUBB A, 42H ;減去減數(shù)低8位MOV 50H, A ;差的低8位存入50HMOV A, 41H ;(A)被減數(shù)高8位SUBB A, 43H ;被減數(shù)高8位減去減數(shù)高8位與借位MOV 51H, A ;差的高8位存入51H單元MOV
31、 A, #00H ;(A)00HADDC A, #00H ;(A)高8位的借位位MOV 52H, A ;借位位C內(nèi)容存入52H單元3.4 算術運算類指令算術運算類指令3.4 算術運算類指令算術運算類指令4. 增1指令INC A ;(A)(A)+1INC direct ;(direct)(direct)+1INC Ri ;(Ri)(Ri)+1INC Rn ;(Rn)(Rn)+1INC DPTR ;(DPTR)(DPTR)+1例例1 設(A)=40H,(41H)=29H,則執(zhí)行下列指令:INC A;(A)40H+1HINC 41H;(41H)29H+1H結果:(A)=41H,(41H)=2AH3.
32、4 算術運算類指令算術運算類指令例例2 設(R0)=56H,片內(nèi)RAM單元(56H)=0FFH,(57H)=50H,則執(zhí)行下列指令:INC R0;(56H)00HINC R0;(R0)57HINC R0;(57H)51H結果:(56H)=00H,(R0)=57H,(57H)=51H例例3 執(zhí)行下述指令序列:MOV DPTR,#2FFEH;(DPTR)2FFEHINC DPTR;(DPTR)2FFFHINC DPTR;(DPTR)3000HINC DPTR;(DPTR)3001H則(DPTR)=3001H3.4 算術運算類指令算術運算類指令5.減1指令DEC A;(A)(A)-1DEC dire
33、ct;(direct)(direct)-1DEC Ri;(Ri)(Ri)-1DEC Rn;(Rn)(Rn)-1例例1 設(R0)=4FH,片內(nèi)RAM單元(4FH)=40H,(4EH)=00H,執(zhí)行指令:DEC R0 ;(4FH)3FHDEC R0 ;(R0)4EHDEC R0 ;(4EH)0FFH結果:(R0)=4EH,(4EH)=0FFH,(4FH)=3FH1. 乘法指令例例1 設(A)=67H(103),(B)=0ADH(173),執(zhí)行指令:MUL AB運算結果:乘積為459BH(17819),(A)=9BH,(B)=45H。另外:OV=1,CY=03.4.2 3.4.2 乘除運算指令乘除
34、運算指令 MUL AB ;(A)乘積低8位,(B)乘積高8位例例2 設被乘數(shù)為16位無符號數(shù),低8位存放在地址為K的單元,高8位存放在地址為K+1的單元。乘數(shù)為8位無符號數(shù),存放在M單元。編程求出二者乘積,并將乘積的07位存放在R1,815位存放在R2,1623位存放在R3中。分析:16位無符號數(shù)與8位無符號數(shù)相乘的步驟示意如下:3.4 算術運算類指令算術運算類指令程序編制如下:MOV R0, #K ;設置被乘數(shù)地址指針MOV A, R0 ;被乘數(shù)送A中MOV B, M ;乘數(shù)送B中MUL AB ;(K)(M)MOV R1, A ;乘積的07位存入R1MOV R2, B ;暫存積的815位IN
35、C R0 ;指向被乘數(shù)高8位地址MOV A, R0 ;取被乘數(shù)高8位MOV B, M ;乘數(shù)送B中MUL AB ;(K+1)(M)ADD A, R2 ;求得乘積的815位MOV R2, A ;乘積的815位存入R2MOV A, BADDC A, #00H ;求得乘積的1623位MOV R3, A ;乘積的1623位存入R3 K+1 K M R1 R2 A B + R1 R2 R3 3.4 算術運算類指令算術運算類指令2. 除法指令例例1 設(A)=9AH,(B)=23H,執(zhí)行指令:DIV AB則(A)=04H,(B)=0EH,OV=00H,CY=00HDIV AB ;(A)商,(B)余數(shù)3.4
36、 算術運算類指令算術運算類指令3.4.4 3.4.4 二二/ /十進制調(diào)整指令十進制調(diào)整指令 DA A該指令的功能是對累加器A中的“二/十”進制(BCD碼)加法結果進行調(diào)整。3.4 算術運算類指令算術運算類指令例例1 執(zhí)行下面的指令:MOVA, #86HADDA, #47H結果:(A)=0CDH,CY=0,AC=0所得結果并不是BCD碼,若接著執(zhí)行以下指令:DA A則結果:(A)=33H,CY=1,AC=11. 累加器A清0指令格式:CLR A功能:將00H送入累加器A中。3.5 邏輯運算指令邏輯運算指令3.5.1 3.5.1 單操作數(shù)指令單操作數(shù)指令2. 累加器A取反指令格式:CPL A功能
37、:將累加器A中內(nèi)容取反(將A中內(nèi)容按位取反,即邏輯非運算)后再送回累加器A中。例例1 設(A)=98H,執(zhí)行指令CLR A ;(A)0CPL A ;(A)0FFH結果:(A)=0FFH3. 累加器A內(nèi)容循環(huán)左移一位指令格式:RL A功能:將累加器A中的內(nèi)容循環(huán)左移一位。即A7A03.5 邏輯運算指令邏輯運算指令例例1 設(A)=10001000,則執(zhí)行指令“RL A”后,結果:(A)=0001000110000001A0A1A2A3A4A5A6A7執(zhí)行RL A指令前10000001執(zhí)行RL A指令后A0A1A2A3A4A5A6A74. 累加器A內(nèi)容帶進位位CY循環(huán)左移一位指令格式:RLC A功
38、能:將累加器A中的內(nèi)容與進位標志位CY一起循環(huán)左移一位。即:A7A0CY3.5 邏輯運算指令邏輯運算指令例例1 設(A)=01010101,(CY)=1。則執(zhí)行指令“RLC A”后,結果:(A)=10101011,(CY)=0。執(zhí)行RLC A指令前執(zhí)行RLC A指令后10100101A0A1A2A3A4A5A6A7CY1101111000A0A1A2A3A4A5A6A7CY5. 累加器A內(nèi)容循環(huán)右移一位指令格式:RR A功能:將累加器A中的內(nèi)容循環(huán)右移一位。即:A7A03.5 邏輯運算指令邏輯運算指令例例1 設(A)=00010001,則執(zhí)行指令“RR A”后,結果:(A)=100010001
39、0000001A0A1A2A3A4A5A6A7執(zhí)行RR A指令前10000001A0A1A2A3A4A5A6A7執(zhí)行RR A指令后6. 累加器A內(nèi)容帶進位位CY循環(huán)右移一位指令格式:RRC A功能:將累加器A中的內(nèi)容與進位標志位CY一起循環(huán)右移一位。即:A7A0CY3.5 邏輯運算指令邏輯運算指令例例1 設(A)=10101011,(CY)=0。則執(zhí)行指令“RRC A”后,結果:(A)=01010101,(CY)=1。執(zhí)行RRC A指令前執(zhí)行RRC A指令后10100101110111100A0A1A2A3A4A5A6A7CY0A0A1A2A3A4A5A6A7CY3.5 邏輯運算指令邏輯運算指
40、令3.5.2 3.5.2 雙操作數(shù)指令雙操作數(shù)指令1. 邏輯與指令3.5 邏輯運算指令邏輯運算指令ANL ANL 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) (1) 以累加器A為目的操作數(shù)的與邏輯運算指令 ANL A,#data ; (A)data (A) ANL A,Rn ;n=07, (A) (Rn) (A) ANL A,direct ; (A)(direct) (A) ANL A,Ri; ;i=0,1,(A)(Ri) (A) 這4條指令執(zhí)行時僅影響標志位P (2)以某個單元為目的操作數(shù)的與邏輯運算指令 ANL direct,#data ;(direct)data (direct) ANL
41、direct,A ;(direct)(A) (direct) 指令執(zhí)行時不會影響任何標志位邏輯與的規(guī)則定義為:(其中表示邏輯與)00=001=10=011=1例例1 設(A)=0C3H,(R3)=0ADH,執(zhí)行指令“ANL A, R3”。結果:(A)=81H(10000001B)。指令執(zhí)行過程如下:100001110C3H ()0ADH11 000 111()0 10 0 01 0 081HBB(B )3.5 邏輯運算指令邏輯運算指令邏輯與的規(guī)則定義為:(其中表示邏輯與)00=001=10=011=12. 邏輯或指令邏輯或指令邏輯或的規(guī)則定義為:(其中表示邏輯或)00=000=10=111=1
42、3.5 邏輯運算指令邏輯運算指令ORL ORL 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)(1)以累加器A為目的操作數(shù)的或邏輯運算指令 ORL A,#data ;(A) data (A) ORL A,Rn ;n = 07,(A) (Rn)(A) ORL A,direct ; (A) (direct) (A) ORL A,Ri; ;i=0,1,(A) (Ri) (A) 指令執(zhí)行時僅影響標志位P(2)以某個單元為目的操作數(shù)的或邏輯運算指令 ORL direct,#data ;(direct) data(direct) ORL direct,A ;(direct)(A) (direct) 指令執(zhí)行時不
43、會影響任何標志位例例1 設(A)=0C3H,(R3)=0ADH,執(zhí)行指令“ORL A, R3”。結果:(A)=0EFH(11101111B)。指令執(zhí)行過程如下:100001110C3H ()0ADH11 000 111()1 10 1 11 1 10EFHBB(B )3. 邏輯異或指令邏輯異或的規(guī)則定義為(其中 表示邏輯異或):0 0=1 1=01 0=0 1=13.5 邏輯運算指令邏輯運算指令3. 邏輯異或指令邏輯異或的規(guī)則定義為(其中 表示邏輯異或):0 0=1 1=01 0=0 1=13.5 邏輯運算指令邏輯運算指令XRL XRL 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)(1)以累加器A
44、為目的操作數(shù)的異或邏輯運算指令 XRL A,#data ;(A)data(A) XRL A,Rn ;n=07,(A) (Rn) (A) XRL A,direct ;(A) (direct) (A) XRL A,Ri; ;i=0, 1,(A) (Ri) (A) 指令執(zhí)行時僅影響標志位P。(2)以某個單元為目的操作數(shù)的異或邏輯運算指令 XRL direct,#data ;(direct) data (direct) XRL direct,A ;(direct) (A) (direct) 指令執(zhí)行時不會影響任何標志位例例1 設(A)=0C3H,(R3)=0ADH,執(zhí)行指令“XRL A, R3”。結果
45、:(A)=6EH(01101110B)。指令執(zhí)行過程如下:100001110C3H ()0ADH11 000 111()1 00 1 10 1 16EHBB(B )例2 試把分別保存在30H、31H單元中用ASCII碼表示的兩位數(shù),轉(zhuǎn)換成兩位BCD碼,并以壓縮BCD碼形式存入30H單元中。程序如下:ANL 30H, #0FH;30H單元的ASCII碼轉(zhuǎn)換成BCD碼MOV A, 31H;取31H單元的ASCII碼ANL A, #0FH;31H單元的ASCII碼變成BCD碼RL ARL ARL ARL AORL 30H, A;結果存入30H單元3.5 邏輯運算指令邏輯運算指令例例1 要將20H位的
46、內(nèi)容傳送給23H位,不能直接用“MOV 20H, 23H”,因為該指令執(zhí)行的實際是字節(jié)傳送,若要將20H位的內(nèi)容傳送給23H位,可用下述程序?qū)崿F(xiàn):MOV C, 20H ;(C)(20H)MOV 23H, C ;(23H)(C)3.6 位操作類指令位操作類指令3.6.1 3.6.1 位數(shù)據(jù)傳送指令位數(shù)據(jù)傳送指令指令助記符與功能說明如下:目的操作數(shù) 源操作數(shù) 功能說明MOV C, bit;(C)(bit)MOV bit, C;(C)(bit)指令格式如下:CLR C;(C)(0)CLR bit;( bit)(0)以上指令可使直接尋址位(bit)或位累加器C清0,不影響其他標志。例例1 片內(nèi)RAM單
47、元26H的內(nèi)容為0FFH,執(zhí)行指令:CLR 32H結果:(26H)=0FBH(11111011B),其中,32H為26H單元第二位的位地址。3.6.2 3.6.2 位狀態(tài)控制指令位狀態(tài)控制指令 1. 位清0指令3.6 位操作類指令位操作類指令指令格式如下:CPL C ;(C)(/C)CPL bit ;(bit)(/bit)以上指令把位累加器C或者直接尋址位(bit)內(nèi)容取反,不影響其他標志位。例例1 執(zhí)行下面的指令序列:MOV P1,#2FH;(P1)(2FH即00101111B)CPL P1.0;P1.0位求反CPL P1.2;P1.2位求反結果:(P1)=2AH(00101010B)。2.
48、 位求反指令3.6 位操作類指令位操作類指令指令格式如下:SETB C;(C)1SETB bit;(bit)1以上指令把進位標志C或者任何可直接尋址位(bit)置1,不影響其他標志位。例例1 假設進位標志C內(nèi)容為0,輸出口P1原來的內(nèi)容為0FH(00001111B),則執(zhí)行下面指令:SETB CSETB P1.7結果:(C)=1,(P1)=8FH(10001111B)。 3. 位置1指令3.6 位操作類指令位操作類指令例例1 當位地址(2AH)=1,(32H)=1,同時累加器中(ACC.7)=0時,進位位C=1,否則C清0,可編程序如下:MOVC, 2AH ;(C)(2AH)ANLC, 32H
49、 ;(C)(C)(32H)ANLC, /ACC.7 ;(C)(C)(/ACC.7)3.6.3 3.6.3 位邏輯操作指令位邏輯操作指令 1. 位與指令指令助記符與功能說明如下:目的操作數(shù) 源操作數(shù) 功能說明ANL C, bit ;(C)(C)(bit)ANL C, /bit ;(C)(C)(/bit)3.6 位操作類指令位操作類指令指令助記符與功能說明如下:目的操作數(shù) 源操作數(shù) 功能說明ORL C, bit ;(C)(C)(bit)ORL C, /bit ;(C)(C)(/bit)位或指令的功能是將直接尋址位的內(nèi)容或直接尋址位內(nèi)容取反后(不改變原來位的內(nèi)容)和位累加器C的內(nèi)容相或,結果保存在C
50、中。例例1 寫出位地址(2AH)=1和(32H)=1、累加器(ACC.7)=0相或的程序:MOVC, 2AH ;(C)(2AH)ORLC, 32H ;(C)(C)(32H)ORLC, ACC.7 ;(C)(C)(ACC.7)結果:(C)=1。2. 位或指令3.6 位操作類指令位操作類指令圖3.7為判C轉(zhuǎn)移指令的執(zhí)行過程。3.6.4 3.6.4 位條件轉(zhuǎn)移指令位條件轉(zhuǎn)移指令1. 判C轉(zhuǎn)移指令JCrel ;若(C)=1,則(PC)(PC)+2+rel;若(C)=0,則(PC)(PC)+2JNCrel ;若(C)=0,則(PC)(PC)+rel;若(C)=1,則(PC)(PC)+2(PC)(PC)+
51、2C=1?NY(PC)(PC)+rel(PC)(PC)+2C=0?NY(PC)(PC)+rel(a) JC rel (b) JNC rel圖3.7 判C轉(zhuǎn)移指令的執(zhí)行過程3.6 位操作類指令位操作類指令JBbit, rel;若(bit)=1,則(PC)(PC)+3+rel ;若(bit)=0,則(PC)(PC)+3JNBbit, rel;若(bit)=0,則(PC)(PC)+3+rel ;若(bit)=1,則(PC)(PC)+3JBCbit, rel;若(bit)=1,則(PC)(PC)+3+rel,而且(bit)清0 ;若(bit)=0,則(PC)(PC)+32. 判直接尋址位轉(zhuǎn)移指令判直接
52、尋址位轉(zhuǎn)移指令的執(zhí)行過程如圖3.8所示。(PC)(PC)+3bit=1?NY(PC)(PC)+rel(PC)(PC)+3bit=0?NY(PC)(PC)+rel(PC)(PC)+3bit=1?NY(PC)(PC)+relbit=0(a) JB bit, rel (b) JNB bit, rel (c) JBC bit, rel3.6 位操作類指令位操作類指令例例1 假設前面的程序段一樣,則分別執(zhí)行下面三段程序。程序1:SETB32H;(32H)1JB32H, K1;(32H)=1轉(zhuǎn)K1處執(zhí)行K1:程序2:CLR32H;(32H)0JNB32H, K1;(32H)=0轉(zhuǎn)K1處執(zhí)行K1:程序3:S
53、ETB32H;(32H)1JBC32H, K1;(32H)=1轉(zhuǎn)K1處執(zhí)行K1:3.6 位操作類指令位操作類指令1. 長轉(zhuǎn)移指令 指令格式:LJMP addr16 ;(PC)addr0153.7 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令3.7.1 3.7.1 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令例例1 執(zhí)行下述程序段:M: LJMP KK: 2. 絕對轉(zhuǎn)移指令指令格式:0100101115(PC)(PC)2AJMPaddr11; (PC)addr(PC)不變3. 相對短轉(zhuǎn)移指令指令格式:4. 間接轉(zhuǎn)移指令JMP A+DPTR ;(PC)(A)+(DPTR)AJMPPC+22KLJMP64KLJMP-128+127JMP A+DPTR256PCPC+2DPTR無條件轉(zhuǎn)移指令跳轉(zhuǎn)范圍比較 (PC)(PC)2SJMPrel ;(PC)(PC)rel+2+rel3.7 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令1. 累加器A判零轉(zhuǎn)移指令3.7.2 3.7.2 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令JZ rel ;累加器為0轉(zhuǎn)移,否則繼續(xù)執(zhí)行JNZ rel ;累加器不為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育學會課題申報書范文
- 旅游文化課題申報書
- 員工與酒店合同范本
- 寫股權拍賣合同范本
- 品牌代招合同范本
- 代注冊工商合同范本
- 傳媒 科研課題申報書
- 公園租賃衣服合同范例
- 合伙辦學合同范本
- 知網(wǎng)查重課題申報書
- 物業(yè)服務行業(yè)禮儀培訓
- 22陳涉世家 司馬遷 公開課一等獎創(chuàng)新教學設計 度部編版初中語文九年級下冊
- 2021年飽和蒸汽及過熱蒸汽焓值表
- 《抗戰(zhàn)中的英雄人物》課件
- 外墻真石漆施工方案
- 森林防火安全生產(chǎn)工作
- 《服裝市場營銷》課件
- 【MOOC】實驗室安全學-武漢理工大學 中國大學慕課MOOC答案
- 網(wǎng)絡安全風險評估報告模板
- DB32T 2836-2015 雙孢蘑菇工廠化生產(chǎn)技術規(guī)程
- 蘋果種植養(yǎng)護培訓課件
評論
0/150
提交評論