版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第3章指令系統(tǒng)§3.389C51指令系統(tǒng)§3.1匯編語言§3.2尋址方式§3.1匯編語言§3.1.1指令和程序設計語言§3.1.2指令格式§3.1.1指令和程序設計語言指令:是CPU根據(jù)人的意圖來執(zhí)行某種操作的命令。程序設計語言:是實現(xiàn)人機交換信息的基本工具,分為機器語言、匯編語言和高級語言。機器語言:用二進制編碼表示每條指令,是計算機能直接識別和執(zhí)行的語言。匯編語言:是用助記符、符號和數(shù)字等來表示指令的程序設計語言。它與機器語言指令是一一對應的?!?.1.2指令格式89C51匯編語言指令格式操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]匯編語言指令對應的二進制代碼格式單字節(jié)指令雙字節(jié)指令三字節(jié)指令單字節(jié)指令1、指令碼中隱含著對某一種寄存器的操作如:指令“INCDPTR”的指令代碼格式為:A3H=101000112、由指令中的rrr三位的不同編碼指定某一寄存器如:指令“MOVA,Rn”的指令代碼格式為:11101rrr雙字節(jié)指令用一個字節(jié)表示操作碼,另一個字節(jié)表示操作數(shù)或操作數(shù)所在的地址。格式為:操作碼立即數(shù)或地址三字節(jié)指令一個字節(jié)操作碼,兩個字節(jié)操作數(shù)。格式為:操作碼立即數(shù)或地址立即數(shù)或地址§3.2尋址方式什么是尋址方式:如何找到存放操作數(shù)的地址,把操作數(shù)提取出來的方法。1、7種尋址方式:2、尋址空間及符號注釋:1、7種尋址方式:
1)寄存器尋址2)直接尋址3)立即數(shù)尋址4)寄存器間接尋址5)變址尋址6)相對尋址7)位尋址1)寄存器尋址寄存器尋址:由指令指出寄存器組R0~R7中的某一個或其他寄存器(A,B,DPTR等)的內(nèi)容作為操作數(shù)。例如:MOVA,R0;(R0)→AMOVP1,A;(A)→P1口
ADDA,R0;(A)+(R0)→A2)直接尋址直接尋址方式:在指令中直接給出操作數(shù)所在存儲單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。直接尋址方式可訪問片內(nèi)RAM的128個單元以及所有的SFR。對于SFR,既可以使用它們的地址,也可以使用它們的名字。例如:MOVA,3AH;(3AH)→AMOVA,P1;(P1口)→A
或:MOVA,90H;90H是P1口的地址3)立即數(shù)尋址立即數(shù)尋址:指令操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù),用“#”號表示,以區(qū)別直接地址。例如:MOVA,3AH;(3AH)→AMOVA,#3AH;3AH→AMOVDPTR,#2000H;2000H→DPTR
;(DPH)=20H
;(DPL)=00H4)寄存器間接尋址
寄存器間接尋址:操作數(shù)的地址事先存放在某個寄存器中,寄存器間接尋址是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。89C51規(guī)定R0或R1為間接尋址寄存器,它可尋址內(nèi)部地址RAM低位的128B單元內(nèi)容。還可采用DPTR作為間接尋址寄存器,尋址外部數(shù)據(jù)存儲器的64KB空間。例如例如:將片內(nèi)RAM65H單元內(nèi)容47H送A,可執(zhí)行指令“MOVA,@R0”。其中R0內(nèi)容為65H。如圖所示:65H47HR0A47H數(shù)據(jù)存儲器地址┋┋65H①②以指令中所指定的R0內(nèi)容(65H)為指針將片內(nèi)RAM65H單元內(nèi)容47H送A5)變址尋址(基址寄存器+變址寄存器間接尋址)變址尋址:以某個寄存器的內(nèi)容為基地址,在這個基地址的基礎上加上地址偏移量形成真正的操作數(shù)地址。89C51中采用DPTR或PC為變址寄存器,A的內(nèi)容為地址偏移量。變址尋址只能訪問程序存儲器,訪問范圍為64KB。例如例如:MOVCA,@A+DPTR;((A)+(DPTR))→A如圖所示1EH0302HROMDPTRAA02F1H11H1EH+①②DPTR內(nèi)容與A的內(nèi)容之和為程序存儲器地址程序存儲器內(nèi)容送A6)相對尋址
相對尋址:是以當前的PC值加上指令中規(guī)定的偏移量rel而形成實際的轉移地址。相對尋址只出現(xiàn)在相對轉移指令中。當前的PC值是指執(zhí)行完相對指令后的PC值;相對轉移指令操作碼所在地址稱為源地址;轉移后的地址稱為目的地址。目的地址=源地址+相對轉移指令字節(jié)數(shù)+relrel為補碼表示的有符號數(shù)。7)位尋址位尋址:采用位尋址方式的指令的操作數(shù)是8位二進制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的兩種表示方法:直接使用位地址,如D3H;直接用寄存器名字加位數(shù),如PSW.3。位尋址區(qū)域:片內(nèi)RAM的20H-2FH的16個單元中的128位;字節(jié)地址能被8整除的SFR。2、尋址空間及符號注釋1)尋址空間:見表3-2。2)符號注釋:表3-2操作數(shù)尋址方式和有關空間符號注釋Rn(n=0~7):當前選中的工作寄存器組R0~R7。Ri(I=0,1):作為地址指針的兩個工作寄存器R0,R1。#data:8位立即數(shù)。#data16:16位立即數(shù)。direct:8位片內(nèi)RAM單元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:補碼表示的8位地址偏移量。范圍:-128~+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號。/:位操作指令中對該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容?!褐噶畈僮髁鞒谭较颉8攀觯?/p>
89C51指令系統(tǒng)由111條指令組成。其中,單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。從指令執(zhí)行時間看,單周期指令64條,雙周期45條,只有乘、除指令為4個周期?!?.389C51指令系統(tǒng)89C51指令系統(tǒng)可分為五大類[1]數(shù)據(jù)傳送指令:28條[2]算術運算指令:24條[3]邏輯運算及移位指令:25條[4]控制轉移指令:17條[5]位操作指令(布爾操作):17條§3.3.1數(shù)據(jù)傳送指令1.以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)◆2.以寄存器Rn為目的操作數(shù)的指令(3條)◆3.以直接地址為目的操作數(shù)的指令(5條)◆4.以間接地址為目的操作數(shù)的指令(3條)◆5.十六位數(shù)據(jù)傳送指令(1條)◆6.查表指令(2條)◆7.累加器A與片外RAM傳送指令(4條)◆8.棧操作指令(二條)◆9.交換指令(5條)◆1.以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)匯編指令格式MOVA,Rn;MOVA,direct;MOVA,@Ri; MOVA,#data 機器碼格式11101rrr11100101direct1110011i01110100data操作(Rn)→A(direct)→A((Ri))→A#data→A注釋將工作寄存器Rn(即R0~R7)內(nèi)容傳送到累加器A中將直接尋址所得的片內(nèi)RAM單元內(nèi)容或特殊功能寄存器中的內(nèi)容傳送到累加器A中將間接尋址(Ri為R0或R1)所得的片內(nèi)RAM單元內(nèi)容或特殊功能積存器中的內(nèi)容傳送到累加器A中將立即數(shù)傳送到累加器A中例:
MOVA,#30H;(A)=30HMOVA,30H ;(A)=11HMOVA,@R1 ;(A)=11HMOVA,R1;(A)=30H例:起始30H單元內(nèi)容為11H,R1中為30H
2、以寄存器Rn為目的操作數(shù)的指令(3條)匯編指令格式MOVRn,A;MOVRn,direct;MOVRn,#data;機器碼格式11111rrr1rrrdirect01111rrrdata操作(A)→Rn(direct)→Rn#data→Rn注釋將累加器A中內(nèi)容傳送到工作寄存器Rn(即R0-R7)中將直接尋址所得的片內(nèi)RAM單元內(nèi)容或特殊功能寄存器中的內(nèi)容傳送到工作寄存器Rn(即R0-R7)中將立即數(shù)傳送到工作寄存器Rn(即R0-R7)中這組指令的功能是把源操作數(shù)所指定的內(nèi)容送到當前工作寄存器組R0-R7中的某個寄存器。源操作數(shù)有特殊寄存器尋址、直接尋址和立即數(shù)尋址三種方式。如:(A)=78H,(R5)=47H,(70H)=F2H,執(zhí)行指令:MOVR5,A;(A)→ R5,(R5)=78HMOVR5,70H;(70H)→R5,(R5)=F2HMOVR5,#A3H;A3H→R5,(R5)=A3H注意:在89C51指令系統(tǒng)中沒有“MOVRn,Rn”傳送指令。
3、以直接地址為目的操作數(shù)的指令(5條)機器碼格式11110101direct
10001rrrdirect10000101direct2direct11000011idirect01110101directdata匯編指令格式MOVdirect,A;MOVdirect,Rn;MOVdirect1,direct2;MOVdirect,@Ri;MOVdirect,#data;操作(A)→directRn→directdirect2→direct1((Ri))→direct
#data→direct注釋將A中內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲單元中。將工作寄存器Rn(即R0-R7)中內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲單元中。將直接地址源direct所指出的片內(nèi)存儲單元中內(nèi)容傳送到直接地址目的direct所指出的片內(nèi)存儲單元中將間接尋址(Ri為R0或R1)所得的片內(nèi)RAM單元內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲單元中將立即數(shù)傳送到直接地址direct所指出的片內(nèi)存儲單元中這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入由直接地址direct所指出的片內(nèi)存儲單元中。源操作數(shù)有寄存器尋址,直接尋址,寄存器間接尋址和立即尋址等方式。4、以間接地址為目的操作數(shù)的指令(3條)(Ri)表示Ri中的內(nèi)容為指定的RAM單元。 匯編格式 機器碼格式操作 注釋
MOV@Ri,A;1111011i(A)→(Ri)將累加器A中內(nèi)容傳送到間接尋址(Ri為R0或R1)所得的片內(nèi)RAM單元中。
MOV@Ri,direct;0101011i(direct)→(Ri)將直接尋址得的片內(nèi)RAMdirect單元內(nèi)容或特殊功能寄存器中內(nèi)容傳送到間接尋址(Ri為R0或R1)所得的片內(nèi)RAM單元中。
MOV@Ri,#data;0111011i#data→(Ri) 將立即數(shù)傳送到間接尋data址(Ri為R0或R1)所得的片內(nèi)RAM單元中。
MOV指令在片內(nèi)存儲器的操作功能如圖3.2-1示。圖3.2-1傳送指令在片內(nèi)存儲器的操作功能@RidirectRn#dataACC5、十六位數(shù)據(jù)傳送指令(1條)
這條指令的功能是把16位常數(shù)送入DPTR。DPTR由DPH和DPL組成。例:MOVDPTR#1000H;(DPTR)=1000H, (DPH)=10H,(DPL)=00H匯編指令格式MOVDPTR,#data16;機器碼格式10010000data(h)data(l)操作#data16→DPTR注釋將16位立即數(shù)傳送到DPTR中6、查表指令(2條)例如匯編指令格式MOVCA,@A+DPTR;MOVCA,@A+PC;機器碼格式1001001110000011操作((A)+(DPTR))→A先(PC)+1→PC((A)+(PC))→A注釋將程序存儲器內(nèi)容傳送到A中(遠程查表)將程序存儲器內(nèi)容傳送到A中(進程查表)上述兩條指令的操作過程如圖3.2-2所示?;刂芳拇嫫?變址寄存器間接尋址@PC+A(程序存儲器0-64K)基地址寄存器+變址寄存器間接尋址@DPTR+A(程序存儲器0-64K)A寄存器圖3.2-2程序存貯器傳送執(zhí)行下面程序段后結果如何?MOVDPTR,#2000H;(DPTR)=2000HMOVA,#0AH;(A)=0AHMOVCA,@A+DPTR;(A)=(200AH)=11H例1:若:初始ROM內(nèi)容:2000H00H2001H01H2002H09H2003H04H2004H06H2005H08H2006HFFH2007H66H2008H45H2009HABH200AH11H例2:若初始ROM內(nèi)容為:
100FH 01H
1010H 02H
1011H 03H
1012H 04H
所以,最后結果為:(A)=01(R0)=01(PC)=1004執(zhí)行下面程序后的結果如何?
1000H740DMOV
A,#0DH;(A)=0DH1002H83MOVCA,@A+PC;(PC)=1002+1=1003H,(A)=((A)+(PC))=(0D+1003)
=(1010H)(A)=01H1003HF8MOVR0,A;(R0)=(A)=01H7、累加器A與片外RAM傳送指令(4條)
在89C51指令系統(tǒng)中,CPU對片外RAM的訪問只能用寄存器間接尋址的方式,且僅有四條指令:匯編指令格式機器碼格式操作MOVXA,@Ri1110001i((Ri))→AMOVXA,@DPTR11100000((DPTR))→AMOVX@Ri,A1111001i(A)→(Ri)MOVX@DPTR,A11110000(A)→(DPTR)
第2,4兩條指令以DPTR為片外數(shù)據(jù)存儲器16位地址指針,尋址范圍達64KB。其功能是DPTR所指定的片外數(shù)據(jù)存儲器與累加器A之間傳送數(shù)據(jù)。 第1,3兩條指令是用R0或R1作低8位地址指針,由P0口送出,尋址范圍是256字節(jié)。這兩條指令完成以R0或R1為地址指針的片外數(shù)據(jù)存儲器與累加器A之間的傳送數(shù)據(jù)。 上述四條指令的操作如圖3.2-3所示:例如A寄存器寄存器間接尋址@R1.@R0片內(nèi)RAM0-255寄存器間接尋址@DPTR片外RAM0-64K
圖3.2-3
外部數(shù)據(jù)存儲器傳送操作例:若片內(nèi)RAM(30H)=01H,片外RAM(30H)=02H,執(zhí)行下面程序段后的結果如何。
MOVR1,#30H ; (R1)=30H MOVXA,@R1 ; (A)=02H MOVR0,A ; (R0)=(A)=02H MOVA,@R1 ; (A)=((R1))=01H MOVR2,A ; (R2)=(A)=01H8、棧操作指令(二條)匯編指令格式機器碼格式操作注釋PUSHdirect11000000先(SP)+1→SP將direct內(nèi)容壓入堆棧
direct后(direct)→(SP)POPdirect11010000先((SP))→direct將堆棧內(nèi)容彈出到
direct 后(SP)-1→SPdirect單元中
例:MOVSP,#18H
;(SP)=18HMOVA,#30H
;(A)=30HMOVDPTR,#1000H ;(DPTR)=1000HPUSHA
;(SP)=19H(19H)=30HPUSHDPH ;(SP)=1AH(1AH)=10HPUSHDPL ;(SP)=1BH(1BH)=00H
POPDPL ;(DPL)=00H(SP)=1AHPOPDPH ;(DPH)=10H(SP)=19HPOPA
;(A)=30H(SP)=18H9、交換指令(4條)(1)字節(jié)變換指令匯編指令格式機器碼格式操作注釋XCHA,Rn11001rrr(A)←→(Rn)A的內(nèi)容與Rn的內(nèi)容互換XCHA,direct 11000101(A)←→(direct)A的內(nèi)容與direct的內(nèi)容互換
directXCHA,@Ri1100011i((A)←→((Ri))A的內(nèi)容與((Ri))t的內(nèi)容互換例:初始時:(A)=34H,(30H)=11H
XCHA,30H; (A)=11H,(30H)=34H MOVR1,#30H; (R1)=30H XCHA,@R1 ; (A)=34H,(30H)=11H(2)半字節(jié)交換指令第一條指令為低半字節(jié)交換指令。該指令將累加器A的低4位與R0或R1所指出的片內(nèi)RAM單元的低4位數(shù)據(jù)相互交換,各自的高4位不變,其操作表示為:如:(R1)=30H,(30H)=11H,(A)=34H則:XCHDA,@R1;(A)=31H;(30H)=14HSWAPA ;(A)=13HA半字節(jié)半字節(jié)RAM匯編指令格式機器碼格式操作XCHDA,@Ri1101011i(A)0-3←→((Ri))0-3SWAPA11000100(A)0-3←→(A)4-7第二條指令為A的低四位與高四位交換指令。該指令將累加器A的低4位與A的高4位數(shù)據(jù)相互交換。§3.3.2算術運算指令1.不帶進位加法指令(四條)2.帶進位加法指令(四條)3.帶借位減法指令(四條)4.乘法指令(1條)5、除法指令(1條)6、加1指令(5條)7、減1指令(4條)8、十進制調(diào)整指令(1條)1、不帶進位加法指令(四條)
匯編指令格式機器碼格式操作注釋ADDA,Rn;00101rrr(A)+(Rn)→A將工作寄存器內(nèi)容和累加器A中的數(shù)相加,“和”存放于累加器A中ADDA,direct;00100101(A)+(direct)→A將內(nèi)部RAM單元內(nèi)容和
direct累加器A中的數(shù)相加,“和”存放于累加器A中ADDA,@Ri;0010011i(A)+((Ri))→A將間接尋址(Ri為R0或R1)
所得的片內(nèi)RAM單元中內(nèi)容和累加器A中的數(shù)相加,“和”存放于累加器A中ADDA,#data;00100100(A)+#data→A將立即數(shù)的8位無符號二進制
data數(shù)和累加器A中的數(shù)相加,“和”存放于累加器A中說明:上述指令的執(zhí)行將影響標志位AC,Cy,OV,P。當“和”的第3位或第7位有進位時,分別將AC,CY標志位置1,否則為0。溢出標志位OV=C7+C6(異或),該標志位只有帶符號數(shù)運算時才有用。例:若:(A)=78H,(R0)=64H
執(zhí)行ADDA,R0后,結果及PSW=?
(A):78H=01111000B
+(R0):64H=01100100B
(A):DCH=11011100B標志位: CY=0,AC=0,OV=1,P=1,即:PSW=05H
結果:(A)=DCH(R0)=64H2、帶進位加法指令(四條)匯編指令格式機器碼格式操作注釋ADDCA,Rn;00111rrr(A)+CY+(Rn)→A將工作寄存器內(nèi)容與CY及累加器A中的數(shù)相加,“和”存放于累加器A中ADDCA,direct;00110101(A)+CY+(direct)→A將內(nèi)部RAM單元內(nèi)容與
directCY及累加器A中的數(shù)相加,“和”存放于累加器A中ADDCA,@Ri;0011011i(A)+CY+((Ri))→A將間接尋址(Ri為R0或R1)
所得的片內(nèi)RAM單元中內(nèi)容與CY及累加器A中的數(shù)相加,“和”存放于累加器
A中ADDCA,#data;00110100(A)+CY+#data→A將立即數(shù)的8位無符號二進
data制數(shù)與CY及累加器A中的數(shù)相加,“和”存放于累加器A中說明:本組指令的功能是同時把源操作數(shù)所指出的內(nèi)容和進位標志未CY都加到累加器A中,結果存放到A中,其余的功能和上面的ADD指令相同。本組指令常用于多字節(jié)加法。
例:設(A)=0C3H,(R0)=0AAH,(CY)=1。
執(zhí)行指令“ADDCA,R0”后的結果及標志位如何?解:(A):C3H=11000011+(CY):1=0000000111000100+(R0):AAH=10101010
(A):6EH=01101110標志位:CY=1,OV=1,AC=0,結果:(A)=6EH,(R0)=0AAH。
例:編程,將(30H),(31H)單元中的數(shù)與(40H),(41H)單元中的數(shù)相加,結果存于(30H),(31H)單元中。解:
MOVA,30H ADDA,40H MOV30H,A MOVA,31H ADDCA,41H MOV31H,A3、帶借位減法指令(四條)匯編指令格式機器碼格式操作注釋SUBBA,Rn;10011rrr(A)-CY-(Rn)→A將工作寄存器內(nèi)容與CY及累加器A中的數(shù)相減,“差”存放于累加器A中SUBBA,direct;10010101(A)-CY-(direct)→A將內(nèi)部RAM單元內(nèi)容與
directCY及累加器A中的數(shù)相減,“差”存放于累加器A中SUBBA,@Ri;1001011i(A)-CY-((Ri))→A將間接尋址(Ri為R0或R1)
所得的片內(nèi)RAM單元中內(nèi)容與CY及累加器A中的數(shù)相減,“差”存放于累加器
A中SUBBA,#data;10010100(A)-CY-#data→A將立即數(shù)的8位無符號二進
data制數(shù)與CY及累加器A中的數(shù)相減,“差”存放于累加器A中
說明:這組指令的功能是從累加器A中減去源操作數(shù)所指出的數(shù)及進位位CY的值,差保留在累加器A中。 由于89C51指令系統(tǒng)中沒有不帶借位的減法指令,如需要的話,可以在“SUBB”指令前用“CLRC”指令將Cy清0,這一點必須注意。例:設(A)=0C9H,(R2)=54H,Cy=1。
執(zhí)行指令“SUBBA,R2”的結果如何?
解: (A)=0C9H=11001001B-)Cy=1=00000001B11001000B-)(R2)=54H=01010100B
(A)=74H=01110100B結果為:(A)=74H標志位為:Cy=0AC=0OV=1P=04、乘法指令(1條)該指令若乘積大于0FFH,則OV置1,否則OV清0。Cy位總是被清0。匯編指令格式機器碼格式操作MULAB ;10100100(A)×(B)→B15-8A7-0該指令將累加器A和寄存器B中兩個無符號數(shù)相乘,所得16位積的低字節(jié)存放在A中,高字節(jié)存放中B中。例:(A)=4EH,(B)=5DH,執(zhí)行指令“MULAB”后結果如何?
解:
結果為:(B)=1CH,(A)=56H,表示積(BA)=1C56H,OV=1。5、除法指令(1條)例:(A)=BFH,(B)=32H。執(zhí)行指令“DIVAB”后:
結果為(A)=03H,(B)=29H;標志位CY=0,OV=0。匯編指令格式機器碼格式操作DIVAB;10000100(A)/(B)的商→A,(A)/(B)的余數(shù)→BA中內(nèi)容除以B中內(nèi)容,整數(shù)商存于A中,余數(shù)存于B中。該指令執(zhí)行后,CY和OV均被清0。 若原(B)=00H,則結果無法確定,用OV=1表示,CY仍為0。6、加1指令(5條)
該組指令的操作不影響PSW。若原單元內(nèi)容為FFH,加1后溢出為00H,也不影響PSW標志。匯編指令格式機器碼格式操作注釋INCA;00000100(A)+1→AA中內(nèi)容加1。INCRn;00001rrr(Rn)+1→RnRn中內(nèi)容加1。INCdirect;00000101(direct)+1→directdirect單元中內(nèi)容加1。
directINC@Ri;0000011i((Ri))+1→(Ri)Ri間接尋址所得的片內(nèi)RAM
單元中內(nèi)容加1。INCDPTR;10100011(DPTR)+1→DPTRDPTR中內(nèi)容加1例:比較指令“INCA”和“ADDA,#01H”的結果。解: “INCA”指令只將A的內(nèi)容加1,標志位沒有變化。而“ADDA,#01H”指令不僅將A的內(nèi)容加1,還影響標志位變化。例:若:(R1)=30H,(30H)=11H
求執(zhí)行下面指令后的結果。
INC@R1;(30H)=12H
INCR1;(R1)=31H解:結果為:(30H)=12H,(R1)=31H。不影響PWS.7、減1指令(4條)匯編指令格式機器碼格式操作注釋DECA;00010100(A)-1→AA中內(nèi)容減1。DECRn;00011rrr(Rn)-1→RnRn中內(nèi)容減1。DECdirect;00010101(direct)-1→directdirect單元中內(nèi)容減1。
directDEC@Ri;0001011i((Ri))-1→(Ri)Ri間接尋址所得的片內(nèi)RAM
單元中內(nèi)容減1。
該組指令的操作不影響PSW。8、十進制調(diào)整指令(1條)匯編指令格式機器碼格式操作DAA; 11010100 若(A0-3)>9或AC=1,則(A0-3)+6→A0-3
同時,若(A4-7)>9或CY=1,則(A4-7)+6→A4-7☆該指令調(diào)整累加器內(nèi)容為BCD碼。☆
這條指令跟在ADD或ADDC指令后,將相加后存放在累加器中的結果進行十進制調(diào)整,完成十進制加法運算功能。
☆
必須注意,本指令不能簡單地把累加器A的16進制數(shù)變換成BCD碼,也不能用于十進制減法的調(diào)整。
例:
設累加器A內(nèi)容為:01010110B(即為56的BCD碼),寄存器R3的內(nèi)容為01100111B(即67的BCD碼),CY內(nèi)容為1。求執(zhí)行下列指令后的結果。 ADDCA,R3;
DAA;解:先執(zhí)行ADDCA,R3; (A):01010110BCD:56
(R3):01100111BCD:67
(+)(CY):00000001BCD:01
和:10111110即(A)=10111110且影響標志位CY=0,AC=0;
再執(zhí)行DAA;因為A中的高四位值為11,大于9,低四位值為14,也大于9,所以內(nèi)部調(diào)整自動進行加66H的操作:
10111110
調(diào)整+)01100110 100100100BCD:124即(A)=00100100=24BCD,CY=1;AC=1?!?.3.3邏輯操作指令
邏輯操作指令包括:與、或、異或、清除、求反、移位等操作。該指令組全部操作數(shù)都是8位25條指令。1.簡單操作指令(2條)2.移位指令(4條)3.邏輯“與”指令(6條)4.邏輯“或”指令(6條)5.邏輯“異或”指令(6條)1.簡單操作指令(2條)匯編指令格式機器碼格式操作注釋CLRA;111001000→A累加器A清0指令,只影響標志位P。CPLA;11110100(A)
→A累加器A取反指令,不影響標志位2.移位指令(4條)匯編指令格式機器碼格式操作注釋RLA;00100011A中內(nèi)容循環(huán)左移一位。
←a7←a0
←RRA;00000011A中內(nèi)容循環(huán)右移一位。 →a7→a0→RLCA;00110011A中內(nèi)容連同進位位CY一起循 ←CY←a7←a0←環(huán)左移一位。RRCA;00010011A中內(nèi)容連同進位位CY一起循 →CY→a7→a0→環(huán)右移一位。我們通常用RLCA指令將累加器A的內(nèi)容做乘2運算。
例如:無符號8位二進制數(shù)(A)=10111101B=BDH,(CY)=0。將(A)乘2,執(zhí)行指令“RLCA”后結果:(A)=01111010B=7AH,(CY)=1,而17AH正是BDH的2倍。3.邏輯“與”指令(6條)匯編指令格式 機器碼格式 操作ANLA,Rn; 01011rrr (A)∧(Rn)→A
ANLA,direct; 01010101 (A)∧(direct)→A
directANLA,@Ri; 0101011i (A)∧((Ri))→A
ANLA,#data; 01010100 (A)∧data→A data
ANLdirect,A; 01010010 (direct)∧(A)→direct
directANLdirect,#data; 01010011 (direct)∧#data→direct direct data這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進行邏輯“與”,結果存放在A中。后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進行邏輯“與”,結果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫”操作。4.邏輯“或”指令(6條)匯編指令格式 機器碼格式 操作ORLA,Rn; 01001rrr (A)∨(Rn)→A
ORLA,direct; 01000101 (A)∨(direct)→A
directORLA,@Ri; 0100011i (A)∨((Ri))→A
ORLA,#data; 01000100 (A)∨data→A data
ORLdirect,A; 01000010 (direct)∨(A)→direct
directORLdirect,#data; 01000011 (direct)∨#data→direct direct data這組指令的功能是將兩個指定的操作數(shù)按位進行邏輯“或”,前四條指令的操作結果存放在累加器A中,后兩條指令的操作結果存放在直接地址單元中。5.邏輯“異或”指令(6條)匯編指令格式 機器碼格式 操作XRLA,Rn; 01101rrr (A)∨(Rn)→A
XRLA,direct; 01100101 (A)∨(direct)→A
directXRLA,@Ri; 0110011i (A)∨((Ri))→A
XRLA,#data; 01100100 (A)∨data→A data
XRLdirect,A; 01100010 (direct)∨(A)→direct
directXRLdirect,#data; 01100011 (direct)∨#data→direct direct data這組指令的功能是將兩個指定的操作數(shù)按位進行“異或”,前四條指令的結果存放在累加器A中,后兩條指令的操作結果存放在直接地址單元中這類指令的操作均只影響標志位P?!?.3.4控制程序轉移類指令
1.無條件轉移指令(4條)
2.空操作指令(1條)
3.條件轉移指令(8條)
4.調(diào)用和返回指令
89C51單片機有豐富的轉移類指令(17條),包括無條件轉移、條件轉移和調(diào)用指令及返回指令等。所有這些指令的目標地址都是在64K字節(jié)程序存儲器地址空間范圍內(nèi)。1、無條件轉移指令(4條)
無條件轉移指令是當程序執(zhí)行到該指令時,程序無條件的轉移到指令所提供的地址處執(zhí)行。無條件轉移指令有長轉移、短轉移、相對轉移和間接轉移4條指令。
(1)長轉移指令
指令格式機器碼注釋
LJMP addr16; 00000010 addr16→PC a15-a8 a7-a0
指令提供16位目標地址,將指令的第二、第三字節(jié)地址碼分別裝入PC的高8位和低8位中,程序無條件轉向指定的目標地址去執(zhí)行。由于直接提供16位目標地址,所以程序可轉向64K程序存儲器地址空間的任何單元。*例:若程序存儲器中,指令LJMPLOOP的首地址為1000H,其轉向的目標地址為1234H,執(zhí)行下列程序:
ORG1000HLJMPLOOP┇ ORG1234HLOOP:MOVA,R2┇此時指令的指令碼(機器碼)為:02H12H34H即:
1000H1001H1002H
1234HROM02H12H34H┆
EAH┆
(2)短轉移指令(絕對轉移)AJMP addr11; a10a9a800001 先(PC)+2→PC a7-a0 后addr11→PC10-0 (PC15-11)不變這條指令提供了11位地址,可在2K范圍內(nèi)無條件轉移到由a10-a0所指出的地址單元中。因為指令只提供低11位地址,高5位為原PC11-15位值,因此,轉移的目標地址必須在AJMP指令后面指令的第一個字節(jié)開始的同一2K字節(jié)范圍內(nèi)。*例1:ORG 0500H0500H: AJMP 0703H;0703H=0000011100000011B ;Addr11=11100000011B ;指令地址PC=0500H ;即:PC=0000010100000000B ;該指令為二字節(jié)指令在執(zhí)行時先PC+2,(PC=0502H=0000010100000010B,PC的高五位為:00000B,于0703H的高五位相同,在同一個2k范圍內(nèi)。)然后將Addr11送PC的低11位:PC=0000011100000011B.指令的機器碼:a10a9a800001 =11100001=E1H a7-a0 =00000011=03H
例2:ORG 0700H0700H: AJMP 0832H;0832H=0000100000110010B ;Addr11=00000110010B ;指令地址PC=0700H ;即:PC=0000011100000000B ;該指令為二字節(jié)指令在執(zhí)行時先PC+2,(PC=0702H=0000011100000010B,PC的高五位為:00000B,于0832H的高五位不同,不在同一個2k范圍內(nèi)。)該指令跨越2k的范圍,錯誤。
(3)相對轉移指令(短轉移)
指令的操作數(shù)是相對地址,rel是一個帶符號的偏移字節(jié)數(shù)(補碼表示),其范圍為-128~+127,負數(shù)表示反向轉移,正數(shù)表示正向轉移。該指令為二字節(jié),執(zhí)行時先將PC內(nèi)容加2,再加相對地址,就得到了轉目標地址。
例1:
1000H SJMP55H;其轉移目的地址=?解: ∵rel=55H=01010101B,為正數(shù)。 ∴目的PC=1000H+2+rel =1002H+55H =1057HSJMP rel; 10000000 先(PC)+2→PC rel
后(PC)+rel→PC例2:
1000H SJMPF6H;其轉移目的地址=?解: ∵rel=F6H=11110110B為負數(shù),表示向低地址方向轉移。 ∴目的PC=1000H+2+rel=1002H+F6H不能直接相加,要先計算出F6H的真值。即:F6H=11110110B取反加1后為:00001010B=0AH ∴目的PC=1002H+F6H =1002H-0AH =0FF8H例3: 指令碼 程序
ORG 1000H1000H:E4H CLR A1001H:78H30H MOV R0,#30H1003H:C3H CLR C1004H:36H LOOP: ADDC A,@R01005H:F6H MOV @R0, A1006H:08H INC R01007H:02H10H04H LJMP LOOP(1007H: 01H04H) (AJMPLOOP)(1007H:80HFBH) (SJMPLOOP)AJMPLOOP指令的機器碼:Addr11=0000000010000000001=E1H00000100=04HSJMPLOOP指令的機器碼:80Hrelrel=目的地址-(源地址+2)=1004H-(1007H+2)=FBH
(4)間接轉移指令(散轉)JMP @A+DPTR; 01110011 (A)+(DPTR)→PC該指令的轉移地址由數(shù)據(jù)指針DPTR的16位數(shù)和累加器A的8位數(shù)作無符號數(shù)相加形成,并直接送入。指令執(zhí)行過程對DPTR、A和標志位均無影響。這條指令可代替眾多的判別跳轉指令,具有散轉功能。例如:根據(jù)累加器A中命令鍵鍵值,設計命令鍵操作程序入口跳轉表:
CLRC ;清進位
RLCA ;鍵值乘2 MOVDPTR,#JPTAB ;指向命令鍵跳轉表首址
JMP@A+DPTR ;散轉入命令鍵入口
JPTAB:AJMPCCS0 ;雙字節(jié)指令
AJMPCCS1 AJMPCCS2
從程序中看出,當(A)=00H時,散轉到CCS0;當(A)=01H時,散轉到CCS1;……。由于AJMP是雙字節(jié)指令,散轉前中的鍵值應乘2。2、空操作指令(1條)NOP ; 00000000 (PC)+1→PC
這是一條單字節(jié)指令,除PC加1外,不影響其它寄存器和標志位?!癗OP”指令常用于產(chǎn)生一個機器周期的延遲。3、條件轉移指令(8條)(1)判零轉移指令匯編指令格式機器碼格式操作JZrel; 01100000 先(PC)+2→PC rel 若(A)=0,則(PC)+rel→PC;否則:(A)≠0,程序順序執(zhí)行JNZrel; 01110000 先(PC)+2→PC rel 若(A)≠0,則(PC)+rel→PC;否則:(A)=0,程序順序執(zhí)行JZ和JNZ指令分別對累加器A的內(nèi)容為全零和不為零進行檢測并轉移,當不滿足各自的條件時,程序繼續(xù)往下執(zhí)行,當各自的條件滿足時,則程序轉向指定的目標地址。其目標地址是以下一條指令第一個字節(jié)的地址為基礎加上指令的第二各字節(jié)中的相對偏移量。相對偏移量為一個帶符號的8位數(shù),偏移范圍為-128—+127字節(jié),在指令匯編和手工匯編時被確定,它是目標地址于下條指令地址之差。本指令不改變累加器A內(nèi)容和影響任何標志位。(2)比較轉移指令(4條)CJNE(目的字節(jié)),(源字節(jié)),rel;三字節(jié)指令
它的功能是對指定的目的字節(jié)和源字節(jié)進行比較,先(PC)+3→PC:若(目的字節(jié))≠(源字節(jié)),則轉移,PC的當前值(PC)+rel→PC。若(目的字節(jié))>(源字節(jié)),則清0進位標志位Cy;若(目的字節(jié))<(源字節(jié)),則置位進位標志位Cy;若(目的字節(jié))=(源字節(jié)),則往下執(zhí)行。該組指令執(zhí)行后不影響任何操作數(shù)。匯編指令格式 機器碼格式操作CJNEA,direct,rel; 10110101 先(PC)+3→PC direct 若(A)≠(direct),則(PC)+rel→PC;
rel
若(A)>(direct),Cy=0,
若(A)<(direct),Cy=1,
否則:(A)=(direct),程序順序執(zhí)行CJNEA,#data,rel; 10110100 先(PC)+3→PC data 若(A)≠data,則(PC)+rel→PC;
rel
若(A)>data,Cy=0,
若(A)<data,Cy=1,
否則:(A)=data,程序順序執(zhí)行匯編指令格式 機器碼格式操作CJNERn,#data,rel; 10110rrr 先(PC)+3→PC data 若(Rn)≠(data),則(PC)+rel→PC;
rel
若(Rn)>(data),Cy=0,
若(Rn)<(data),Cy=1,
否則:(Rn)=(data),程序順序執(zhí)行CJNE@Ri,#data,rel; 1011011i 先(PC)+3→PC data 若((Ri))≠data,則(PC)+rel→PC;
rel
若((Ri))>data,Cy=0,
若((Ri))<data,Cy=1,
否則:((Ri))=data,程序順序執(zhí)行(3)循環(huán)轉移指令(2條)匯編指令格式 機器碼格式操作DJNZRn,rel; 11011rrr 先(PC)+2→PC,(Rn)-1→Rn rel
若(Rn)≠0,則(PC)+rel→PC; 否則:(Rn)=0,程序順序執(zhí)行DJNZdirect,rel; 11010101 先(PC)+3→PC,(direct)-1→direct direct 若(direct)≠0,則(PC)+rel→PC;
rel
否則:(direct)=0,程序順序執(zhí)行程序每執(zhí)行一次本指令,將第一操作數(shù)的字節(jié)變量減1,并判字節(jié)變量是否為零,若不為0,則轉移到目標地址,繼續(xù)執(zhí)行循環(huán)程序段;若為0,則結束循環(huán)程序段的執(zhí)行,程序往下執(zhí)行。其中,rel為相對于DJNZ指令的下一條指令的第一個字節(jié)相對偏移量,用一個帶符號的8位數(shù)表示。所以,循環(huán)轉移的目標地址應為DJNZ指令的下條指令地址和偏移量之和。4、調(diào)用和返回指令
在程序設計中,有時因操作要求,需反復執(zhí)行某段程序,使這段程序能被公用。這樣可減少程序編寫和調(diào)試的工作量,于是引進了主程序和子程序的概念。指令系統(tǒng)中一般都有主程序調(diào)用子程序的指令和從子程序返回主程序的指令。通常把具有一定功能的公用程序段作為子程序,子程序的最后一條指令為返回主程序指令(RET)。(1)長調(diào)用指令匯編指令格式 機器碼格式操作LCALLaddr16; 00010010 先(PC)+3→PC(斷點PC),長調(diào)用指令提供了16位
addr8-15
后(SP)+1→SP,(PC0-7)→(SP)(保護斷點)目標地址,在64K地
addr0-7 (SP)+1→SP,(PC8-15)→(SP)址空間內(nèi)調(diào)用。
addr0-15→PC(子程序地址送PC)匯編指令格式 機器碼格式操作ACALLaddr11;
a10a9a810001 先(PC)+2→
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 店鋪租賃(出租)意向協(xié)議書
- 2025年度高端摩托車租賃及保養(yǎng)服務合同2篇
- 2025版?zhèn)€人入股合作協(xié)議書:互聯(lián)網(wǎng)公司股權分配合同4篇
- 2025年度個人消費分期付款合同標準7篇
- 2025-2030全球石墨氮化碳行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球封離型CO2激光器冷水機行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國鼻炎光療儀行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國常壓等離子體裝置行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年度國際貨運代理及物流服務合同
- 商家聯(lián)盟協(xié)議書
- 江蘇省蘇州市2024-2025學年高三上學期1月期末生物試題(有答案)
- 銷售與銷售目標管理制度
- 人教版(2025新版)七年級下冊英語:寒假課內(nèi)預習重點知識默寫練習
- 2024年食品行業(yè)員工勞動合同標準文本
- 2025年第一次工地開工會議主要議程開工大吉模板
- 糖尿病高滲昏迷指南
- 全屋整裝售后保修合同模板
- 壁壘加筑未來可期:2024年短保面包行業(yè)白皮書
- 高中生物學科學推理能力測試
- GB/T 44423-2024近紅外腦功能康復評估設備通用要求
- 2024-2030年中國減肥行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資研究報告
評論
0/150
提交評論