第3章 指令系統(tǒng)_第1頁
第3章 指令系統(tǒng)_第2頁
第3章 指令系統(tǒng)_第3頁
第3章 指令系統(tǒng)_第4頁
第3章 指令系統(tǒng)_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章指令系統(tǒng)Exit.熟悉89C51匯編語言指令的格式;.掌握89C51的7種尋址方式,并能實(shí)際應(yīng)用,學(xué)會計算目標(biāo)地址或偏移量;.熟記89C51的111條匯編指令,并會根據(jù)題目要求編制匯編語言程序;.熟記指令的功能、操作的對象和結(jié)果以及指令執(zhí)行后對PSW各位的影響。

§3.1匯編語言§3.1.1指令和程序設(shè)計語言§3.1.2指令格式BACK§3.1.1指令和程序設(shè)計語言指令:是CPU根據(jù)人的意圖來執(zhí)行某種操作的命令。程序設(shè)計語言:是實(shí)現(xiàn)人機(jī)交換信息的基本工具,分為機(jī)器語言、匯編語言和高級語言。機(jī)器語言:用二進(jìn)制編碼表示每條指令,是計算機(jī)能直接識別和執(zhí)行的語言。匯編語言:是用助記符、符號和數(shù)字等來表示指令的程序設(shè)計語言。它與機(jī)器語言指令是一一對應(yīng)的。BACK§3.1.2指令格式89C51匯編語言指令格式操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]匯編語言指令對應(yīng)的二進(jìn)制代碼格式單字節(jié)指令(49條)雙字節(jié)指令(45條)三字節(jié)指令(17條)單字節(jié)指令(49條)1、指令碼中隱含著對某一種寄存器的操作如:指令“INCDPTR”的指令代碼格式為:A3H=101000112、由指令中的rrr三位的不同編碼指定某一寄存器如:指令“MOVA,Rn”的指令代碼格式為:11101rrr雙字節(jié)指令(45條)用一個字節(jié)表示操作碼,另一個字節(jié)表示操作數(shù)或操作數(shù)所在的地址。格式為:操作碼立即數(shù)或地址BACK三字節(jié)指令(17條)一個字節(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)→A(2)直接尋址

直接尋址方式:在指令中直接給出操作數(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)=00H(4)寄存器間接尋址

寄存器間接尋址:操作數(shù)的地址事先存放在某個寄存器中,寄存器間接尋址是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。89C51規(guī)定R0或R1為間接尋址寄存器,它可尋址片內(nèi)RAM低128B單元內(nèi)容和片外RAM低地址256B單元的內(nèi)容。還可采用DPTR作為間接尋址寄存器,尋址外部數(shù)據(jù)存儲器的64KB空間。但不能用這種尋址方式尋址特殊功能寄存器。例如:例如:將片內(nèi)RAM65H單元內(nèi)容47H送A,可執(zhí)行指令“MOVA,@R0”。其中R0內(nèi)容為65H。如圖所示:65H47HR0A47H片內(nèi)數(shù)據(jù)存儲器地址┋┋65H①②以指令中所指定的R0內(nèi)容(65H)為指針將片內(nèi)RAM65H單元內(nèi)容47H送A(5)變址尋址

(基址寄存器+變址寄存器間接尋址)變址尋址:以某個寄存器的內(nèi)容為基地址,在這個基地址的基礎(chǔ)上加上地址偏移量形成真正的操作數(shù)地址。89C51中采用DPTR或PC為變址寄存器,A的內(nèi)容為地址偏移量。注意:變址尋址只能訪問程序存儲器,訪問范圍為64KB。這種尋址方式多用于查表。

MOVCA,@A+DPTRMOVCA,@A+PC例如:例如:MOVCA,@A+DPTR;((A)+(DPTR))→A1EH0302HROMDPTRAA02F1H11H1EH+①②DPTR內(nèi)容與A的內(nèi)容之和為程序存儲器地址程序存儲器內(nèi)容送A(6)相對尋址相對尋址:是以當(dāng)前的PC值加上指令中規(guī)定的偏移量rel而形成實(shí)際的轉(zhuǎn)移地址。相對尋址只出現(xiàn)在相對轉(zhuǎn)移指令中。當(dāng)前的PC值是指執(zhí)行完相對指令后的PC值;相對轉(zhuǎn)移指令操作碼所在地址稱為源地址;轉(zhuǎn)移后的地址稱為目的地址。目的地址=源地址+2(相對轉(zhuǎn)移指令字節(jié)數(shù))+relrel為補(bǔ)碼表示的有符號數(shù)。例如:JCrel,設(shè)rel=75H,CY=1。

(0100000001110101)(7)位尋址位尋址:采用位尋址方式的指令的操作數(shù)是8位二進(jìn)制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的兩種表示方法:直接使用位地址,如D3H;直接用寄存器名字加位數(shù),如PSW.3。位尋址區(qū)域:1、片內(nèi)RAM的20H-2FH的16個單元中的128位;2、字節(jié)地址能被8整除的SFR。2、尋址空間及符號注釋(1)尋址空間:見表3-2(2)尋址方式中常用符號注釋表3-2操作數(shù)尋址方式和有關(guān)空間符號注釋Rn(n=0~7):當(dāng)前選中的工作寄存器組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:補(bǔ)碼表示的8位地址偏移量。范圍:-128~+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號。/:位操作指令中對該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容。→:指令操作流程方向。概述:

89C51指令系統(tǒng)由111條指令組成。其中,單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。從指令執(zhí)行時間看,單周期指令64條,雙周期45條,只有乘、除指令為4個周期。

該指令系統(tǒng)有255種指令代碼,助記符42種?!?.389C51指令系統(tǒng)89C51指令系統(tǒng)可分為五大類[1]數(shù)據(jù)傳送指令:28條[2]算術(shù)運(yùn)算指令:24條[3]邏輯運(yùn)算及移位指令:25條[4]控制轉(zhuǎn)移指令:17條[5]位操作指令(布爾操作):17條Back§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.棧操作指令(2條)◆9.交換指令(5條)◆1.以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)例:匯編指令機(jī)器碼操作注釋MOVA,Rn11101rrr(Rn)→A將工作寄存器Rn(即R0~R7)內(nèi)容傳送到累加器A中MOVA,direct11100101direct(direct)→A將直接尋址所得的片內(nèi)RAM單元內(nèi)容或特殊功能寄存器中的內(nèi)容傳送到累加器AMOVA,@Ri1110011i((Ri))→A將間接尋址(Ri為R0或R1)所得的片內(nèi)RAM單元內(nèi)容或特殊功能積存器中的內(nèi)容傳送到累加器A中MOVA,#data01110100#data#data→A將立即數(shù)傳送到累加器A中

MOVA,#30H;(A)=30HMOVA,30H ;(A)=11HMOVA,@R1 ;(A)=11HMOVA,R1;(A)=30H例:起始30H單元內(nèi)容為11H,R1中為30HBack

2、以寄存器Rn為目的操作數(shù)的指令(3條)這組指令的功能是把源操作數(shù)所指定的內(nèi)容送到當(dāng)前工作寄存器組R0-R7中的某個寄存器。源操作數(shù)有寄存器尋址、直接尋址和立即數(shù)尋址三種方式。Back匯編指令機(jī)器碼操作注釋MOVRn,A11111rrr(A)→Rn將累加器A中內(nèi)容傳送到工作寄存器Rn(即R0-R7)中MOVRn,direct10101rrrdirect(direct)→Rn將直接尋址所得的片內(nèi)RAM單元內(nèi)容或特殊功能寄存器中的內(nèi)容傳送到工作寄存器Rn(即R0-R7)中MOVRn,#data01111rrr#data#data→Rn將立即數(shù)傳送到工作寄存器Rn(即R0-R7)中如:(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條)這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入由直接地址direct所指出的片內(nèi)存儲單元中。源操作數(shù)有寄存器尋址,直接尋址,寄存器間接尋址和立即尋址等方式。匯編指令機(jī)器碼操作注釋MOVdirect,A11110101direct(A)→direct將A中內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲單元中。MOVdirect,Rn1rrrdirectRn→direct將工作寄存器Rn(即R0-R7)中內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲單元中。MOVdirect1,direct210000101Direct2direct1direct2→direct1將直接地址源direct2所指出的片內(nèi)存儲單元中內(nèi)容傳送到直接地址目的direct1所指出的片內(nèi)存儲單元中MOVdirect,@Ri011idirect((Ri))→direct將間接尋址(Ri為R0或R1)所得的片內(nèi)RAM單元內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲單元中MOVdirect,#data01110101direct#data#data→direct將立即數(shù)傳送到直接地址direct所指出的片內(nèi)存儲單元中4、以間接地址為目的操作數(shù)的指令(3條)(Ri)表示Ri中的內(nèi)容為指定的RAM單元的地址。 匯編指令機(jī)器碼操作注釋MOV@Ri,A1111011i(A)→(Ri)將累加器A中內(nèi)容傳送到間接尋址(Ri為R0或R1)所指的片內(nèi)RAM單元中。MOV@Ri,direct0101011i(direct)→(Ri)將直接尋址得到的片內(nèi)RAMdirect單元內(nèi)容或特殊功能寄存器中內(nèi)容傳送到間接尋址(Ri為R0或R1)所指的片內(nèi)RAM單元中。

MOV@Ri,#data0111011idata#data→(Ri)

將立即數(shù)傳送到間接尋

址(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匯編指令機(jī)器碼操作MOVDPTR,#data1610010000Data(h)Data(l)#data16→DPTR6、查表指令(2條)例如上述兩條指令的操作過程如圖3.2-2所示。匯編指令機(jī)器碼操作MOVCA,@A+DPTR10010011((A)+(DPTR))→A(對ROM,遠(yuǎn)程查表)MOVCA,@A+PC10000011先(PC)+1→PC再((A)+(PC))→A(對ROM,近程查表)基地址寄存器+變址寄存器間接尋址@PC+A(程序存儲器256B)基地址寄存器+變址寄存器間接尋址@DPTR+A(程序存儲器0-64K)A寄存器圖3.2-2程序存貯器傳送Back執(zhí)行下面程序段后結(jié)果如何?MOVDPTR,#2000H;(DPTR)=2000HMOVA,#0AH;(A)=0AHMOVCA,@A+DPTR;(A)=(200AH)=11H例1:若初始ROM內(nèi)容:2000H00H2001H01H2002H09H2003H04H2004H06H2005H08H2006HFFH2007H66H2008H45H2009HABH200AH11HBack例2:若初始ROM內(nèi)容為:

100FH 01H

1010H 02H

1011H 03H

1012H 04H

所以,最后結(jié)果為:(A)=02H(R0)=02H(PC)=1004H執(zhí)行下面程序后的結(jié)果如何?

1000H740DMOV

A,#0DH;(A)=0DH1002H83MOVCA,@A+PC;(PC)=1002+1=1003H,(A)=((A)+(PC))=(0D+1003)

=(1010H)(A)=02H1003HF8MOVR0,A;(R0)=(A)=02H7、累加器A與片外RAM傳送指令(4條,I/O指令)

在89C51指令系統(tǒng)中,CPU對片外RAM的訪問只能用寄存器間接尋址的方式,且僅有四條指令:

第2,4兩條指令以DPTR為片外數(shù)據(jù)存儲器16位地址指針,尋址范圍達(dá)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所示:匯編指令機(jī)器碼操作MOVXA,@Ri1110001i((Ri))→AMOVXA,@DPTR11100000(DPTR)→AMOVX@Ri,A1111001i(A)→(Ri)MOVX@DPTR,A11110000(A)→(DPTR)圖3.2-3

外部數(shù)據(jù)存儲器傳送操作A寄存器寄存器間接尋址@R1.@R0片外RAM0-255B寄存器間接尋址@DPTR片外RAM0-64KB

若片外數(shù)據(jù)存儲器的地址空間上有片外I/O接口芯片,則上述指令就是89C51的輸入/輸出指令。例:若片內(nèi)RAM(30H)=01H,片外RAM(30H)=02H,執(zhí)行下面程序段后的結(jié)果如何?

MOVR1,#30H;(R1)=30H MOVXA,@R1;(A)=02H MOVR0,A ;(R0)=(A)=02H MOVA,@R1 ;(A)=((R1))=01H MOVR2,A ;(R2)=(A)=01H8、棧操作指令(2條)

在89C51片內(nèi)的128字節(jié)單元中,可設(shè)定一個區(qū)域作為堆棧(一般可設(shè)在30H~7FH單元中),棧頂由堆棧指針SP指出,89C51復(fù)位后為07H,若要更改,需重新賦值。

PUSH和POP操作不影響標(biāo)志位。匯編指令機(jī)器碼操作PUSHdirect11000000direct先(SP)+1→SP后(direct)→(SP),壓棧POPdirect11010000direct先((SP))→(direct)后(SP)-1→SP,出棧

例:MOVSP,#18H

;(SP)=18HMOVA,#30H

;(A)=30HMOVDPTR,#1000H ;(DPTR)=1000HPUSHA

;(SP)=19H,(19H)=30HPUSHDPH ;(SP)=1AH,(1AH)=10HPUSHDPL ;(SP)=1BH,(BH)=00H

POPDPL ;(DPL)=00H,(SP)=1AHPOPDPH ;(DPH)=10H,(SP)=19HPOPA

;(A)=30H,(SP)=18H9、交換指令(4+1條)(1)字節(jié)交換指令例:初始時:(A)=34H,(30H)=11H

XCHA,30H; (A)=11H,(30H)=34H MOVR1,#30H; (R1)=30H XCHA,@R1 ; (A)=34H,(30H)=11H匯編指令機(jī)器碼操作XCHA,Rn11001rrr(A)?(Rn)XCHA,direct11000101direct(A)?(direct)XCHA,@Ri1100011i(A)?((Ri))(2)半字節(jié)交換指令

XCHD指令為低半字節(jié)交換指令。該指令將累加器A的低4位與R0或R1所指出的片內(nèi)RAM單元的低4位數(shù)據(jù)相互交換,各自的高4位不變,其操作表示為:如:(R1)=30H,(30H)=11H,(A)=34H則:XCHDA,@R1;(A)=31H;(30H)=14H

匯編指令機(jī)器碼操作XCHDA,@Ri1101011i(A)0-3?((Ri))0-3SWAPA11000100§3.3.2算術(shù)運(yùn)算指令(24條)1.不帶進(jìn)位加法指令(4條)2.帶進(jìn)位加法指令(4條)3.帶借位減法指令(4條)4.乘法指令(1條)5、除法指令(1條)6、加1指令(5條)7、減1指令(4條)8、十進(jìn)制調(diào)整指令(1條)1、不帶進(jìn)位加法指令(4條)匯編指令機(jī)器碼操作ADDA,Rn00101rrr(A)+(Rn)→AADDA,direct00100101direct(A)+(direct)→AADDA,@Ri0010011i(A)+((Ri))→AADDA,#data00100100data(A)+#data→A說明:上述指令的執(zhí)行將影響標(biāo)志位AC,CY,OV,P。當(dāng)“和”的第3位或第7位有進(jìn)位時,分別將AC,CY標(biāo)志位置1,否則為0。溢出標(biāo)志位OV=C7⊕C6(異或),該標(biāo)志位只有帶符號數(shù)運(yùn)算時才有用。例:若:(A)=78H,(R0)=64H

執(zhí)行ADDA,R0后,結(jié)果及PSW=?

(A):78H=01111000B

+(R0):64H=01100100B

(A):DCH=11011100B標(biāo)志位: CY=0,AC=0,OV=1,P=1,即:PSW=05H

結(jié)果:(A)=DCH(R0)=64H2、帶進(jìn)位加法指令(4條)匯編指令機(jī)器碼操作ADDCA,Rn00111rrr(A)+(Rn)+CY→AADDCA,direct00110101direct(A)+(direct)+CY→AADDCA,@Ri0011011i(A)+((Ri))+CY→AADDCA,#data00110100#data(A)+#data+CY→A說明:本組指令的功能是同時把源操作數(shù)所指出的內(nèi)容和進(jìn)位標(biāo)志未CY都加到累加器A中,結(jié)果存放到A中,其余的功能和上面的ADD指令相同。本組指令常用于多字節(jié)加法。

例:設(shè)(A)=0C3H,(R0)=0AAH,(CY)=1。

執(zhí)行指令“ADDCA,R0”后的結(jié)果及標(biāo)志位如何?解:

(A):C3H=11000011

+(CY):1=0000000111000100

+(R0):AAH=10101010

(A):6EH=01101110標(biāo)志位:CY=1,OV=1,AC=0,結(jié)果:(A)=6EH,(R0)=0AAH。

例:編程,將(30H),(31H)單元中的數(shù)與(40H),(41H)單元中的數(shù)相加,結(jié)果存于(30H),(31H)單元中。解:

MOVA,30H ADDA,40H MOV30H,A MOVA,31H ADDCA,41H MOV31H,A3、帶借位減法指令(四條)匯編指令機(jī)器碼操作SUBBA,Rn10011rrr(A)-(Rn)-CY→ASUBBA,direct10010101direct(A-(direct)-CY→ASUBBA,@Ri1001011i(A)-((Ri))-CY→ASUBBA,#data10010100#data(A)-#data-CY→A

說明:這組指令的功能是從累加器A中減去源操作數(shù)所指出的數(shù)及進(jìn)位位CY的值,差保留在累加器A中。 由于89C51指令系統(tǒng)中沒有不帶借位的減法指令,如需要的話,可以在“SUBB”指令前用“CLRC”指令將CY清0,這一點(diǎn)必須注意。例:設(shè)(A)=0C9H,(R2)=54H,Cy=1。

執(zhí)行指令“SUBBA,R2”的結(jié)果如何?

解: (A)=0C9H=11001001B-)CY

=1=00000001B11001000B-)(R2)=54H=01010100B

(A)=74H=01110100B結(jié)果為:(A)=74H標(biāo)志位為:CY=0AC=0OV=1P=04、乘法指令(1條)該指令若乘積大于0FFH,則OV置1,否則OV清0,Cy位總是被清0。該指令將累加器A和寄存器B中兩個無符號數(shù)相乘,所得16位積的低字節(jié)存放在A中,高字節(jié)存放中B中。例:(A)=4EH,(B)=5DH,執(zhí)行指令“MULAB”后結(jié)果如何?解:

結(jié)果為:(B)=1CH,(A)=56H,表示積(BA)=1C56H,OV=1。匯編指令機(jī)器碼操作MULAB10100100(A)×(B)→B15-8A7-05、除法指令(1條)例:(A)=BFH,(B)=32H。執(zhí)行指令“DIVAB”后:

結(jié)果為(A)=03H,(B)=29H;標(biāo)志位CY=0,OV=0。該指令執(zhí)行后,CY和OV均被清0。 若原(B)=00H,則結(jié)果無法確定,用OV=1表示,CY仍為0。匯編指令機(jī)器碼操作DIVAB10000100(A)/(B)的商→A,(A)/(B)的余數(shù)→B6、加1指令(5條)匯編指令機(jī)器碼操作注釋INCA00000100(A)+1→AA中內(nèi)容加1INCRn00001rrr(Rn)+1→RnRn中內(nèi)容加1INCdirect00000101direct(direct)+1→directDirect單元中內(nèi)容加1INC@Ri0000011i((Ri))+1→(Ri)Ri間接尋址所得片內(nèi)RAM單元中內(nèi)容加1INCDPTR10100011(DPTR)+1→DPTRDPTR中內(nèi)容加1

該組指令的操作不影響PSW。例1:比較指令“INCA”和“ADDA,#01H”的結(jié)果。解:“INCA”指令只將A的內(nèi)容加1,標(biāo)志位沒有變化。而“ADDA,#01H”指令不僅將A的內(nèi)容加1,還影響標(biāo)志位變化。

該組指令的操作不影響PSW。若原單元內(nèi)容為FFH,加1后溢出為00H,也不影響PSW標(biāo)志。例2:若:(R1)=30H,(30H)=11H

求執(zhí)行下面指令后的結(jié)果。

INC@R1;(30H)=12H

INCR1;(R1)=31H解:結(jié)果為:(30H)=12H,(R1)=31H。不影響PWS.7、減1指令(4條)

該組指令的操作不影響PSW。Back匯編指令機(jī)器碼操作注釋DECA00010100(A)-1→AA中內(nèi)容減1DECRn00011rrr(Rn)-1→RnRn中內(nèi)容減1DECdirect00010101direct(direct)-1→directDirect單元中內(nèi)容減1DEC@Ri0001011i((Ri))-1→(Ri)Ri間接尋址所得片內(nèi)RAM單元中內(nèi)容減18、十進(jìn)制調(diào)整指令(1條)☆該指令調(diào)整累加器內(nèi)容為BCD碼?!?/p>

這條指令跟在ADD或ADDC指令后,將相加后存放在累加器中的結(jié)果進(jìn)行十進(jìn)制調(diào)整,完成十進(jìn)制加法運(yùn)算功能。

必須注意,本指令不能簡單地把累加器A的16進(jìn)制數(shù)變換成BCD碼,也不能用于十進(jìn)制減法的調(diào)整。

匯編指令機(jī)器碼操作DAA11010100若(A0-3)>9或AC=1,則(A0-3)+6→A0-3同時,若(A4-7)>9或CY=1,則(A4-7)+6→A4-7例:

設(shè)累加器A內(nèi)容為:01010110B(即為59的BCD碼),寄存器R3的內(nèi)容為01100111B(即68的BCD碼),CY內(nèi)容為1。求執(zhí)行下列指令后的結(jié)果。 ADDCA,R3;

DAA;解:先執(zhí)行ADDCA,R3; (A):01011001BCD:59

(R3):01101000BCD:68

(+)(CY):00000001BCD:01

和:11000010即(A)=11000001且影響標(biāo)志位CY=0,AC=1;

再執(zhí)行DAA;因?yàn)锳中的高四位值為11,大于9,低四位值為17,AC有進(jìn)位,所以內(nèi)部調(diào)整自動進(jìn)行加66H的操作:

11000010

調(diào)整+

01100110 100101001BCD:129即(A)=00100100=29(BCD),CY=1;AC=1。Back§3.3.3邏輯操作指令

邏輯操作指令包括:與、或、異或、清零、求反、移位等操作。該指令組全部操作數(shù)都是8位,共24條指令。1.簡單操作指令(2條)2.移位指令(4條)3.邏輯“與”指令(6條)4.邏輯“或”指令(6條)5.邏輯“異或”指令(6條)Back1.簡單操作指令(2條)(A)→A0→A操作累加器A取反指令,不影響標(biāo)志位11110100CPLA累加器A清0指令,只影響標(biāo)志位P。11100100CLRA注釋機(jī)器碼匯編指令2.移位指令(4條)我們通常用RLCA指令將累加器A的內(nèi)容做乘2運(yùn)算。

例如:無符號8位二進(jìn)制數(shù)(A)=10111101B=BDH,(CY)=0。將(A)乘2,執(zhí)行指令“RLCA”后結(jié)果:(A)=01111010B=7AH,(CY)=1,而17AH正是BDH的2倍。匯編指令機(jī)器碼操作注釋RLA00100011A中內(nèi)容循環(huán)左移一位RRA00000011A中內(nèi)容循環(huán)右移一位RLCA00110011A中內(nèi)容連同進(jìn)位位CY一起循環(huán)左移一位RRCA00010011A中內(nèi)容連同進(jìn)位位CY一起循環(huán)右移一位a7←a0a7→a0a7←a0CYa7→

a0CY3.邏輯“與”指令(6條)這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存放在A中。后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫”操作。匯編指令機(jī)器碼操作ANLA,Rn01011rrr(A)∧(Rn)→AANLA,direct01010101direct(A)∧(direct)→AANLA,@Ri0101011i(A)∧((Ri))→AANLA,#data01010100data(A)∧data→AANLdirect,A01010010direct(direct)∧(A)→directANLdirect,#data01010011directdata(direct)∧#data→direct4.邏輯“或”指令(6條)這組指令的功能是將兩個指定的操作數(shù)按位進(jìn)行邏輯“或”,前四條指令的操作結(jié)果存放在累加器A中,后兩條指令的操作結(jié)果存放在直接地址單元中,若直接地址正好是I/O端口,則同樣具有“讀——修改——寫”操作。匯編指令機(jī)器碼操作ORLA,Rn01001rrr(A)∨(Rn)→AORLA,direct01000101direct(A)∨(direct)→AORLA,@Ri0100011i(A)∨((Ri))→AORLA,#data01000100data(A)∨#

data→AORLdirect,A01000010direct(direct)∨(A)→directORLdirect,#data01000011directdata(direct)∨

#data→direct5.邏輯“異或”指令(6條)這組指令的功能是將兩個指定的操作數(shù)按位進(jìn)行“異或”,前四條指令的結(jié)果存放在累加器A中,后兩條指令中若直接地址正好是I/O端口,則同樣具有“讀——修改——寫”操作。這類指令的操作均只影響標(biāo)志位P。匯編指令機(jī)器碼操作XRLA,Rn01101rrr(A)⊕(Rn)→AXRLA,direct01100101direct(A)⊕(direct)→AXRLA,@Ri0110011i(A)⊕((Ri))→AXRLA,#data01100100data(A)⊕

#data→AXRLdirect,A01100010direct(direct)⊕(A)→directXRLdirect,#data01100011directdata(direct)⊕

#data→direct§3.3.4控制程序轉(zhuǎn)移類指令

1.無條件轉(zhuǎn)移指令(4條)

2.空操作指令(1條)

3.條件轉(zhuǎn)移指令(8條)

4.調(diào)用和返回指令(4條)

89C51單片機(jī)有豐富的轉(zhuǎn)移類指令(17條),包括無條件轉(zhuǎn)移、條件轉(zhuǎn)移和調(diào)用指令及返回指令等。所有這些指令的目標(biāo)地址都是在64K字節(jié)程序存儲器地址空間范圍內(nèi)。1、無條件轉(zhuǎn)移指令(4條)

無條件轉(zhuǎn)移指令是當(dāng)程序執(zhí)行到該指令時,程序無條件的轉(zhuǎn)移到指令所提供的地址處執(zhí)行。無條件轉(zhuǎn)移指令有長轉(zhuǎn)移、短轉(zhuǎn)移、相對轉(zhuǎn)移和間接轉(zhuǎn)移4條指令。

(1)長轉(zhuǎn)移指令

指令提供16位目標(biāo)地址,將指令的第二、第三字節(jié)地址碼分別裝入PC的高8位和低8位中,程序無條件轉(zhuǎn)向指定的目標(biāo)地址去執(zhí)行。由于直接提供16位目標(biāo)地址,所以程序可轉(zhuǎn)向64K程序存儲器地址空間的任何單元。匯編指令機(jī)器碼操作LJMPaddr1600000010a15_a8a7_a0

addr16→PC例:若程序存儲器中,指令LJMPLOOP的首地址為1000H,其轉(zhuǎn)向的目標(biāo)地址為1234H,執(zhí)行下列程序:

ORG1000HLJMPLOOP┇ ORG1234HLOOP:MOVA,R2┇此時指令的指令碼(機(jī)器碼)為:02H12H34H即:

1000H1001H1002H

1234HROM02H12H34H┆

EAH┆

(2)短轉(zhuǎn)移指令(絕對轉(zhuǎn)移)匯編指令機(jī)器碼操作AJMPaddr11a10a9a800001a7_a0先(PC)+2→PC后addr11→PC10-0(PC)15-11不變這條指令提供了11位地址,可在2K范圍內(nèi)無條件轉(zhuǎn)移到由a10-a0所指出的地址單元中。因?yàn)橹噶钪惶峁┑?1位地址,高5位為原PC11-15位值,因此,轉(zhuǎn)移的目標(biāo)地址必須在AJMP指令后面指令的第一個字節(jié)開始的同一2K字節(jié)范圍內(nèi)。例1:ORG 0500H0500H:AJMP 0703H

分析:0703H=0000011100000011BAddr11=11100000011B

指令地址PC=0500H 即:PC=0000010100000000B該指令為二字節(jié)指令在執(zhí)行時先PC+2,(PC=0502H=0000010100000010B,PC的高五位為:00000B,與0703H的高五位相同,在同一個2k范圍內(nèi)。)然后將Addr11送PC的低11位:

PC=0000011100000011B.指令的機(jī)器碼: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)相對轉(zhuǎn)移指令(短轉(zhuǎn)移)

指令的操作數(shù)是相對地址,rel是一個帶符號的偏移字節(jié)數(shù)(補(bǔ)碼表示),其范圍為-128~+127,負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。該指令為二字節(jié),執(zhí)行時先將PC內(nèi)容加2,再加相對地址,就得到了轉(zhuǎn)移目標(biāo)地址。

例1:

1000HSJMP55H其轉(zhuǎn)移目的地址=?解: ∵rel=55H=01010101B,為正數(shù)。 ∴目的PC=1000H+2+rel =1002H+55H =1057H匯編指令機(jī)器碼操作SJMPrel10000000rel先(PC)+2→PC后(PC)+rel→PC例2:

1000HSJMPF6H;其轉(zhuǎn)移目的地址=?解:∵rel=F6H=11110110B為負(fù)數(shù),表示向低地址方向轉(zhuǎn)移。∴目的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指令的機(jī)器碼:1004H=10000

00000100Addr11=000

0000010000000001=01H00000100=04HSJMPLOOP指令的機(jī)器碼:80Hrelrel=目的地址-(源地址+2)=1004H-(1007H+2)=-05H=FBH

(4)間接轉(zhuǎn)移指令(散轉(zhuǎn))該指令的轉(zhuǎn)移地址由數(shù)據(jù)指針DPTR的16位數(shù)和累加器A的8位數(shù)作無符號數(shù)相加形成,并直接送入。指令執(zhí)行過程對DPTR、A和標(biāo)志位均無影響。這條指令可代替眾多的判別跳轉(zhuǎn)指令,具有散轉(zhuǎn)功能。匯編指令機(jī)器碼操作JMP@A+DPTR01110011

(A)+(DPTR)→PC例如:根據(jù)累加器A中命令鍵鍵值,設(shè)計命令鍵操作程序入口跳轉(zhuǎn)表:

CLRC;清進(jìn)位

RLCA ;鍵值乘2MOVDPTR,#JPTAB;指向命令鍵跳轉(zhuǎn)表首址

JMP@A+DPTR ;散轉(zhuǎn)入命令鍵入口JPTAB:AJMPCCS0 ;雙字節(jié)指令

AJMPCCS1AJMPCCS2……

從程序中看出,當(dāng)(A)=00H時,散轉(zhuǎn)到CCS0;當(dāng)(A)=01H時,散轉(zhuǎn)到CCS1;……。由于AJMP是雙字節(jié)指令,散轉(zhuǎn)前中的鍵值應(yīng)乘2。2、空操作指令(1條)

這是一條單字節(jié)指令,除PC加1外,不影響其它寄存器和標(biāo)志位?!癗OP”指令常用于產(chǎn)生一個機(jī)器周期的延遲。Back匯編指令機(jī)器碼操作NOP00000000

(PC)+1→PC3、條件轉(zhuǎn)移指令(8條)(1)判零轉(zhuǎn)移指令JZ和JNZ指令分別對累加器A的內(nèi)容為全零和不為零進(jìn)行檢測并轉(zhuǎn)移,當(dāng)不滿足各自的條件時,程序繼續(xù)往下執(zhí)行,當(dāng)各自的條件滿足時,則程序轉(zhuǎn)向指定的目標(biāo)地址。其目標(biāo)地址是以下一條指令第一個字節(jié)的地址為基礎(chǔ)加上指令的第二各字節(jié)中的相對偏移量。相對偏移量為一個帶符號的8位數(shù),偏移范圍為-128—+127字節(jié),在指令匯編和手工匯編時被確定,它是目標(biāo)地址于下條指令地址之差。本指令不改變累加器A內(nèi)容和影響任何標(biāo)志位。匯編指令機(jī)器碼操作JZrel01100000rel先(PC)+2→PC若(A)=0,則(PC)+rel→PC;否則(A)≠0,程序順序執(zhí)行。JNZrel01100000rel先(PC)+2→PC若(A)≠0,則(PC)+rel→PC;否則(A)=0,程序順序執(zhí)行。(2)比較轉(zhuǎn)移指令(4條)CJNE(目的字節(jié)),(源字節(jié)),rel;三字節(jié)指令

它的功能是對指定的目的字節(jié)和源字節(jié)進(jìn)行比較,先(PC)+3→PC:若(目的字節(jié))≠(源字節(jié)),則轉(zhuǎn)移,PC的當(dāng)前值(PC)+rel→PC。若(目的字節(jié))>(源字節(jié)),則清0進(jìn)位標(biāo)志位CY;若(目的字節(jié))<(源字節(jié)),則置位進(jìn)位標(biāo)志位CY;若(目的字節(jié))=(源字節(jié)),則往下執(zhí)行。該組指令執(zhí)行后不影響任何操作數(shù)。匯編指令機(jī)器碼操作CJNEA,direct,rel10110101directrel先(PC)+3→PC若(A)≠(direct),則(PC)+rel→PC;若(A)>(direct),Cy=0;若(A)<(direct),Cy=1;否則(A)=(direct),程序順序執(zhí)行CJNEA,#data,rel10110100datarel先(PC)+3→PC若(A)≠#data,則(PC)+rel→PC;若(A)>#data,Cy=0;若(A)<#data,Cy=1;否則(A)=#data,程序順序執(zhí)行CJNERn,#data,rel10110rrrdatarel先(PC)+3→PC若(Rn)≠#data,則(PC)+rel→PC;若(Rn)>#data,Cy=0;若(Rn)<#data,Cy=1;否則(Rn)=#data,程序順序執(zhí)行CJNE@Ri,#data,rel1011011idatarel先(PC)+3→PC若((Ri))≠#data,則(PC)+rel→PC;若((Ri))>#data,Cy=0;若((Ri))<#data,Cy=1;否則((Ri))=#data,程序順序執(zhí)行(3)循環(huán)轉(zhuǎn)移指令(2條)程序每執(zhí)行一次本指令,將第一操作數(shù)的字節(jié)變量減1,并判字節(jié)變量是否為零,若不為0,則轉(zhuǎn)移到目標(biāo)地址,繼續(xù)執(zhí)行循環(huán)程序段;若為0,則結(jié)束循環(huán)程序段的執(zhí)行,程序往下執(zhí)行。其中,rel為相對于DJNZ指令的下一條指令的第一個字節(jié)相對偏移量,用一個帶符號的8位數(shù)表示。所以,循環(huán)轉(zhuǎn)移的目標(biāo)地址應(yīng)為DJNZ指令的下條指令地址和偏移量之和。匯編指令機(jī)器碼操作DJNZRn,rel11011rrrrel先(PC)+2→PC,(Rn)-1→Rn若(Rn)≠0,則(PC)+rel→PC;否則:(Rn)=0,程序順序執(zhí)行DJNZdirect,rel11010101directrel先(PC)+3→PC,(direct)-1→direct若(direct)≠0,則(PC)+rel→PC;否則:(direct)=0,程序順序執(zhí)行4、調(diào)用和返回指令

在程序設(shè)計中,有時因操作要求,需反復(fù)執(zhí)行某段程序,使這段程序能被公用。這樣可減少程序編寫和調(diào)試的工作量,于是引進(jìn)了主程序和子程序的概念。指令系統(tǒng)中一般都有主程序調(diào)用子程序的指令和從子程序返回主程序的指令。通常把具有一定功能的公用程序段作為子程序,子程序的最后一條指令為返回主程序指令(RET)。(1)短調(diào)用指令短調(diào)用指令提供了11位目標(biāo)地址,限定在2K地址空間內(nèi)調(diào)用。

匯編指令機(jī)器碼操作ACALLaddr11a10a9a810001a7_a0先(PC)+2→PC(斷點(diǎn)PC),后(SP)+1→SP,(PC7-0)→(SP)(保護(hù)斷點(diǎn))(SP)+1→SP,(PC15-8)→(SP)addr10-0→PC10-0(子程序地址送PC)(PC15-11)

不變(2)長調(diào)用指令長調(diào)用指令提供了16位目標(biāo)地址,在64K地址空間內(nèi)調(diào)用。

匯編指令機(jī)器碼操作LCALLaddr1600010010a15~a8a7~a0先(PC)+3→PC(斷點(diǎn)PC),后(SP)+1→SP,(PC7-0)→(SP)(保護(hù)斷點(diǎn))(SP)+1→SP,(PC15-8)→(SP)addr15-0→PC(子程序地址送PC)(3)返回指令匯編指令機(jī)器碼操作RET00100010((SP))→PC15-8

,(SP)-1→SP,(彈出斷點(diǎn)高8位)

((SP))→PC7-0

,(SP)-1→SP,(彈出斷點(diǎn)低8位)RETI00110010((SP))→PC15-8

,(SP)-1→SP,(彈出斷點(diǎn)高8位)

((SP))→PC7-0

,(SP)-1→SP,(彈出斷點(diǎn)低8位)開放中斷邏輯例如:主程序及子程序段如下:

ORG 0100H

0100H MAIN: MOV SP,#60H

0103H LCALL SUB1

0106H …

ORG 0200H

0200H SUB1: …

RET

分析執(zhí)行LCALLSUB1

及RET指令后的結(jié)果。解:執(zhí)行LCALLSUB1的過程:結(jié)果如圖所示。(PC)+3→PC: (PC)=0106H(SP)+1→SP: (SP)=61H(PC0-7)→(SP): (61H)=06H(SP)+1→SP: (SP)=62H(PC8-15)→(SP): (62H)=01Haddr0-15→PC: (PC)=0200H(進(jìn)入子程序)

執(zhí)行RET的過程:如圖所示。

((SP))→PC8-15: (PC8-15)=01H

(SP)-1→SP: (SP)=61H ((SP))→PC0-7: (PC0-7)=06H (SP)-1→SP: (SP)=60H所以:(PC)=0106H,返回主程序。

01H06H/////////64H63H62H61H60H

RAMPC0200HSP62H/////////64H63H62H61H60H

RAMPC0106HSP60H例如:主程序及子程序段如下:

ORG 0100H

0100H MAIN: MOV SP,#60H

0103H ACALL SUB1

0105H …

ORG 0200H

0200H SUB1: …

RET

分析執(zhí)行ACALLSUB1

指令后的結(jié)果。解:執(zhí)行ACALLSUB1的過程:結(jié)果如圖所示。(PC)+2→PC: (PC)=0104H(SP)+1→SP: (SP)=61H(PC0-7)→(SP): (61H)=05H(SP)+1→SP: (SP)=62H(PC8-15)→(SP): (62H)=01Haddr0-10→PC0-10:(PC0-10)=addr0-10=01000000000B(PC11-15)不變:(PC11-15)=00000B,與SUB1的地址的高5位相同(同一個2K范圍內(nèi))?!?PC)=0000001000000000B=0200H01H05H/////////64H63H62H61H60H

RAMPC0200HSP62HBack§3.3.5位操作(布爾處理)類指令(17條)在進(jìn)行位操作時,進(jìn)位標(biāo)志位CY——布爾累加器(位累加),簡寫成C。位尋址區(qū):片內(nèi)RAM字節(jié)地址20H~2FH單元中連續(xù)的128位(位地址00H~7FH)和部分特殊功能寄存器SFR。位地址的表達(dá)方式:直接寫位地址:如D4H;點(diǎn)操作符號:如PSW.4或(D0H).4;位名稱方式:如RS1;用戶定義名方式:如用偽指令bit1、位數(shù)據(jù)傳送指令(2條)

2、位修正指令(6條)

3、邏輯運(yùn)算指令(4條)

4、位條件轉(zhuǎn)移類指令(5條)位操作(布爾處理)類指令1、位數(shù)據(jù)傳送指令(2條)例如:初始時位地址(20H)=1MOVC,20H;CY=1 MOVP1.0,C;P1.0=12、位修正指令(6條)匯編指令機(jī)器碼操作CLRC110000110→CCLRbit11000010位地址bit0→bitSETC110100111→CSETbit11010010位地址bit1→bitCPLC10110011/C→C

CPLbit10110010位地址bit/bit→bit

例如:CLRC ;CY=0CLRACC.0 ;ACC.0=0CPL ACC.0 ;ACC.0=1SETBRS1 ;RS1=1CLR RS0;RS0=0選擇當(dāng)前工作寄存器為第2組CPLC ;CY=13、位邏輯運(yùn)算指令(4條)例:若位地址(20H)=1,位累加器(C)=0

執(zhí)行指令:ANLC,/20H;后的結(jié)果:(C)=0,(20H)=1。

而執(zhí)行指令:CPL20H;

ANLC,20H; 后的結(jié)果:(C)=0,(20H)=0。匯編指令機(jī)器碼操作ANLC,bit10000010位地址bit(C)∧(bit)→CANLC,/bit10110000位地址bit(C)∧(/bit)→CORLC,bit01110010位地址bit(C)∨(bit)→C

ORLC,/bit01010000位地址bit(C)∨(/bit)→C

4、位條件轉(zhuǎn)移類指令(5條)(1)判布爾累加器C轉(zhuǎn)移指令(2條)

(2)判位變量轉(zhuǎn)移指令(2條)匯編指令機(jī)器碼操作JCrel01000000rel先(PC)+2→PC若(C)=1,則(PC)+rel→PC;否則(C)=0,程序順序執(zhí)行。JNCrel01010000rel先(PC)+2→PC若(C)=0,則(PC)+rel→PC;否則(C)=1,程序順序執(zhí)行。匯編指令機(jī)器碼操作JBbit,rel00100000bitrel先(PC)+3→PC若(bit)=1,則(PC)+rel→PC;否則(bit)=0,程序順序執(zhí)行。JNBbit,rel00110000bitrel先(PC)+3→PC若(bit)=0,則(PC)+rel→PC;否則(bit)=1,程序順序執(zhí)行。(3)判位變量并清0轉(zhuǎn)移指令(1條)匯編指令機(jī)器碼操作JBCbit,rel00010000bitrel先(PC)+3→PC若(bit)=1,則(PC)+rel→PC,0→bit;否則(bit)=0,程序順序執(zhí)行。例如:編程設(shè)計,若片內(nèi)RAM30H單元內(nèi)容大于0,40H單元置00;30H單元內(nèi)容小于0,40H單元置FFH;30H單元內(nèi)容等于0,40H單元置1;例如:編程設(shè)計,若片內(nèi)RAM30H單元內(nèi)容大于0,40H單元置00;30H單元內(nèi)容<于0,40H單元置FFH;30H單元內(nèi)容等于0,40H單元置1;(30H)=0?(40H)=1(40H)=00CY=1?(40H)=FFH開始結(jié)束YNYN MOVA,30HCJNEA,#00H,LP1 MOV 40H,#01H SJMP LP2LP1: JC LP3 MOV 40H,#00H SJMP LP2LP3: MOV 40H,#0FFHLP2: SJMP $LP1LP3LP2程序設(shè)計舉例一簡單程序設(shè)計舉例二分支程序三循環(huán)程序四子程序設(shè)計舉例五代碼轉(zhuǎn)換程序設(shè)計舉例六運(yùn)算類程序設(shè)計舉例一、簡單程序設(shè)計舉例例1:拆字。將片內(nèi)RAM20H單元的內(nèi)容拆成兩段,每段四位。并將它們分別存入21H與22H單元中。程序如下:解: ORG 2000HSTART: MOV R0,#21H;21H→R0

MOV A,20H ;(20H)→A

ANL A,#0FH;A∧#0FH→A

MOV @R0,A;(A)→(R0)

INC R0 ;R0+1(R0

MOV A,20H

溫馨提示

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

評論

0/150

提交評論