版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第三章MCS-51單片機(jī)指令系統(tǒng)3.1概述3.2尋址方式
3.3數(shù)據(jù)傳送指令3.4算邏運(yùn)算和移位指令3.5控制轉(zhuǎn)移和位操作指令23.1MCS-51指令系統(tǒng)概述指令:規(guī)定計(jì)算機(jī)基本操作的語(yǔ)句或命令,51系列共111條指令.指令系統(tǒng):某個(gè)單片機(jī)所能執(zhí)行的指令集合為它的指令系統(tǒng),不同系列單片機(jī)指令系統(tǒng)不同.匯編語(yǔ)言:用助記符表示的指令叫做匯編語(yǔ)言.匯編語(yǔ)言通過(guò)專用的編譯器轉(zhuǎn)換為二進(jìn)制代碼才能為單片機(jī)執(zhí)行.指令格式:既指令的結(jié)構(gòu)形式。(例題)3OPDATA或ADDRESS操作碼操作數(shù)或操作數(shù)地址例:CJNER0,#5FH,35HADDA,#0FFHADDA,R0INCARETB8H5FH35H24HFFH28H04H22H
編譯器編譯之后生成可執(zhí)行機(jī)器代碼操作碼:用于規(guī)定語(yǔ)句執(zhí)行的內(nèi)容,指令格式唯一不能空 缺的部分.操作數(shù):用于規(guī)定指令操作的數(shù)據(jù),
是具體的數(shù)據(jù)或者取得數(shù)據(jù)的地址或者符號(hào),可以沒有或者有1-3個(gè)操作數(shù),43.1.1指令的字節(jié)數(shù)
分為單字節(jié)、雙字節(jié)和三字節(jié)。一、單字節(jié)指令(49條):如RET;00100010B NOP;00000000B【特點(diǎn)】:在操作碼中無(wú)操作數(shù)。如INCDPTR;10100011B INCA;00000100B【特點(diǎn)】:操作數(shù)隱含在操作碼中。含有操作數(shù)寄存器名稱的單字節(jié)指令:如:MOVA,R011101000BMOVA,R111101001B【特點(diǎn)】:寄存器名以三位數(shù)代碼的形式在指令的后三位。5
二、雙字節(jié)指令(46條):
指令的操作碼和操作數(shù)各占一個(gè)字節(jié)。如:
MOVA,#data;01110100Bdata程序存儲(chǔ)器01110100dataMOVA,
#data雙字節(jié)指令在程序存儲(chǔ)器的存放示意圖6
三、三字節(jié)指令(16條)(1)指令中的操作數(shù)為雙字節(jié)。如:
MOVDPTR,#data16;
(2)指令中分別包含1個(gè)字節(jié)的操作數(shù)和1個(gè)字節(jié)的操作數(shù)地址。如:
MOVdirect,#data舉例:MOV20H,#0FFH
10010000data15-8data8-0OP(75H)direct(20H)data(FFH)MOVDPTR,#data16三字節(jié)指令在存儲(chǔ)器中存放的方式示意圖MOVdirect,#data7四指令的字節(jié)數(shù)與指令的運(yùn)行時(shí)間指令的字節(jié)多是否意味著指令周期就長(zhǎng)?指令字節(jié)數(shù)周期數(shù)指令說(shuō)明MOVA,R011R0內(nèi)容送累加器AMOVA,#0FFH21立即數(shù)FFH送AMOV20H,#30H32立即數(shù)30H送內(nèi)存20h單元MULAB14乘法指令I(lǐng)NCDPTR1116位寄存器DPTR加一從表中可見,指令的字節(jié)數(shù)與指令周期不是對(duì)等83.2尋址方式在指令的操作數(shù)位置上,用于表征、尋找操作數(shù)的方式定義為“尋址方式”。在MCS-51單片機(jī)中,共使用了七種尋址方式。分別是:
(1)寄存器尋址(5)變址尋址;(2)直接尋址(6)相對(duì)尋址;(3)立即數(shù)尋址(7)位尋址。(4)寄存器間接尋址93.2.1寄存器尋址當(dāng)所需要的操作數(shù)在內(nèi)部某一個(gè)寄存器Rn中時(shí),將此寄存器名Rn直接寫在指令的操作數(shù)的位置上。如:
MOVA,R7 MOV20H,R0INCR1ADDA,R3
寄存器尋址范圍:寄存器包括8個(gè)工作寄存器R0~R7,累加器A,寄存器B、數(shù)據(jù)指針DPTR和布爾處理器的位累加器C。103.2.2直接尋址在指令中直接給出操作數(shù)所在存儲(chǔ)單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。如:
MOVA,30H;將RAM30H單元內(nèi)容送累加器直接尋址的指令長(zhǎng)度是兩個(gè)或三個(gè)字節(jié)。30HOP程序ROMnn+1操作數(shù)x數(shù)據(jù)RAM30H累加器A直接尋址示意圖11使用直接尋址應(yīng)注意的問(wèn)題:指令助記符中direct是用8位二進(jìn)制數(shù)表示的操作數(shù)地址,尋址范圍只限于內(nèi)部RAM(0~255)字節(jié)地址。當(dāng)?shù)刂吩赟FR區(qū)域時(shí),指令用地址或寄存器名表示。如:MOVA,80H
可以寫成MOVA,P0
當(dāng)?shù)刂吩诘?28單元時(shí),指令中用單元地址表示。區(qū)分字節(jié)地址與位地址(直接尋址和位尋址比較)
MOVA,20H;將RAM的20H單元內(nèi)容送AMOVC,20H;將位尋址區(qū)中的位地址為
20H位內(nèi)容送PSW的Cy中
12片內(nèi)RAM(20H-2FH)中的位尋址區(qū)結(jié)構(gòu)圖7F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837262524232221202F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002FH20H字節(jié)地址24H位地址133.2.3立即尋址指令本身直接含有所需要的8位或16位的操作數(shù)。將此數(shù)稱為“立即數(shù)”(使用#標(biāo)明)。如:
MOVA,#30H;將(8位)立即數(shù)送累加器AMOVDPTR,#2000H;16位立即數(shù)送DPTR寄存器30H74Hnn+1ROM累加器A00H20H90HROMDPTR143.2.4寄存器間接尋址寄存器間接尋址是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù).MOVA,@Ri(i=0、1)
如:MOVR0,#30H;立即數(shù)送R0寄存器
MOVA,@R0;從RAM的30H單元取數(shù)送累加器A30H78HROM30HxRAM30HR000H累加器A12315訪問(wèn)內(nèi)外數(shù)據(jù)存儲(chǔ)器時(shí)應(yīng)注意問(wèn)題(1)間址寄存器Ri只能使用R0、R1(i=0、1)。(2)對(duì)于片內(nèi)RAM的訪問(wèn)只能使用MOV指令 對(duì)于片內(nèi)RAM低128字節(jié)(00H~7FH)可使用直接尋址和寄存器間址Ri訪問(wèn)存儲(chǔ)單元; 對(duì)于片內(nèi)RAM高128字節(jié)(80H~FFH)只能使用寄存器直接尋址訪問(wèn);
(3)對(duì)于片外RAM的訪問(wèn)只能使用MOVX指令。
對(duì)于片外RAM,可以使用Ri(00H~FFH)和DPTR(0000H~FFFFH)做間址寄存器。堆棧操作:PUSHA;(MOV@SP,A)POPA;(MOVA,@SP)
16MCS-51片內(nèi)、片外數(shù)據(jù)存儲(chǔ)器示意圖特殊功能寄存器SFR通用數(shù)據(jù)存儲(chǔ)器80H7FH00HFFH片內(nèi)數(shù)據(jù)存儲(chǔ)器片外數(shù)據(jù)存儲(chǔ)器256B個(gè)字節(jié)64KB個(gè)字節(jié)片外數(shù)據(jù)存儲(chǔ)器64KB0000HFFFFH例一:訪問(wèn)片內(nèi)RAM20H存儲(chǔ)單元;
MOVA,20H;直接尋址方式
MOVR0,#20HMOVA,@R0;間接尋址方式例二:
訪問(wèn)片內(nèi)RAM80H存儲(chǔ)單元;
MOVA,80H;直接尋址方式
MOVA,P0;例三:訪問(wèn)片外RAM20H存儲(chǔ)單元
MOVR0,#20HMOVXA,@R0;間接尋址方式
MOVDPTR,#20HMOVXA,@DPTR
;間接尋址方式例四:訪問(wèn)片外RAM02FFH存儲(chǔ)單元
MOVDPTR,#02FFHMOVXA,@DPTR
;間接尋址方式
173.2.5變址尋址指令使用DPTR或PC中的內(nèi)容作為基地址,再與累加器A的內(nèi)容相加,和作為操作數(shù)地址,達(dá)到訪問(wèn)程序存儲(chǔ)器(ROM)數(shù)據(jù)表格的目的。有3條均為單字節(jié)指令:
MOVCA,@A+PC
;PC內(nèi)容與A的內(nèi)容相加得操作數(shù)地址并將此操作數(shù)送A
MOVCA,@A+DPTR;DPTR內(nèi)容與A的內(nèi)容相加得操作數(shù)地址并將此操作數(shù)送A
JMP@A+DPTR;
跳轉(zhuǎn)到操作數(shù)地址18變址指令適用于對(duì)ROM存儲(chǔ)器的數(shù)據(jù)表格訪問(wèn)。
【舉例】:已知ROM中0302H單元有一個(gè)數(shù)x,現(xiàn)要把它送到累加器A中,試編程。
MOVDPTR,#0300H;立即數(shù)送DPTRMOVA,#02H;立即數(shù)送累加器AMOVCA,@A+DPTR;從ROM的0302單元取數(shù)送A19變址尋址示意圖02H0300HROM
XALU0302H累加器ADPTR0300H+02H0302HMOVCA,@A+DPTR203.2.6相對(duì)尋址相對(duì)轉(zhuǎn)移指令在執(zhí)行中是將當(dāng)前PC值與指令中的8位偏移量進(jìn)行相加,形成指令要轉(zhuǎn)移的目標(biāo)地址,為解決程序轉(zhuǎn)移設(shè)置。當(dāng)前的PC值是指執(zhí)行完轉(zhuǎn)移指令后的PC值;相對(duì)轉(zhuǎn)移指令操作碼所在地址稱為源地址;轉(zhuǎn)移后的地址稱為目的地址。目的地址=源地址+相對(duì)轉(zhuǎn)移指令字節(jié)數(shù)+relSJMPrel由指令中有一個(gè)8位偏移量rel為帶符號(hào)位的補(bǔ)碼,所以控制程序轉(zhuǎn)移的范圍為-128~+127。21例如:SJMP54H;(80H、54H)
執(zhí)行前PC=2000H,執(zhí)行指令(2字節(jié))后PC=2002H,54H2002HALU累加器APC2002H+54H2056H
54H80H程序存儲(chǔ)器ROM2056H操作碼偏移量2000H2002H(LOOP1)223.2.7位尋址采用位尋址方式的指令的操作數(shù)是8位二進(jìn)制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。尋址范圍:RAM低128單元中位尋址區(qū)20H-2FH,16單元共128位(00H-7FH),可用位地址或字節(jié)地址加位數(shù)來(lái)表示
SETB78H;SETB2FH.0;將位地址為78H的位置1RAM高128單元中11個(gè)可進(jìn)行位尋址的特殊寄存器??捎梦幻Q或位地址,寄存器地址或名稱加位數(shù)表示。
CLRF0;CLRD5H;CLRPSW.5;CLRD0H.5;23概述:
80c51指令系統(tǒng)由111條指令組成。其中,單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。按照用途分為五類指令數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令邏輯運(yùn)算類指令控制轉(zhuǎn)移類指令位操作類指令
§3.380c51指令系統(tǒng)24Rn(n=0~7):當(dāng)前選中的工作寄存器組R0~R7。Ri(I=0,1):作為地址指針的兩個(gè)工作寄存器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的直接尋址位地址。@:間接寄存器的符號(hào)。/:位操作指令中對(duì)該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容。→:指令操作流程方向。符號(hào)規(guī)定及注釋意思25
3.3.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送類指令:完成數(shù)據(jù)在單片機(jī)內(nèi)部之間的傳送。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條)261.以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)匯編指令格式MOVA,Rn;MOVA,direct;MOVA,@Ri; MOVA,#data 機(jī)器碼格式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)容傳送到累加器A中將立即數(shù)傳送到累加器A中27
MOVA,#30H;(A)=30HMOVA,30H ;(A)=11HMOVA,@R1 ;(A)=11HMOVA,R1;(A)=30H例:起始30H單元內(nèi)容為11H,R1中為30H282、以寄存器Rn為目的操作數(shù)的指令(3條)匯編指令格式MOVRn,A;MOVRn,direct;MOVRn,#data;機(jī)器碼格式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)容送到當(dāng)前工作寄存器組R0-R7中的某個(gè)寄存器。源操作數(shù)有寄存器尋址、直接尋址和立即數(shù)尋址三種方式。Back29如:(A)=78H,(R5)=47H,(70H)=F2H,執(zhí)行指令:MOVR5,A;(A)→R5,(R5)=78HMOVR5,70H;(70H)→R5,(R5)=F2HMOVR5,#A3H;A3H→R5,(R5)=A3H注意:在80c51指令系統(tǒng)中沒有“MOVRn,Rn”傳送指令。303、以直接地址為目的操作數(shù)的指令(5條)機(jī)器碼格式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)存儲(chǔ)單元中。將工作寄存器Rn(即R0-R7)中內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲(chǔ)單元中。將直接地址源direct所指出的片內(nèi)存儲(chǔ)單元中內(nèi)容傳送到直接地址目的direct所指出的片內(nèi)存儲(chǔ)單元中將間接尋址(Ri為R0或R1)所得的片內(nèi)RAM單元內(nèi)容傳送到直接地址direct所指出的片內(nèi)存儲(chǔ)單元中將立即數(shù)傳送到直接地址direct所指出的片內(nèi)存儲(chǔ)單元中這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入由直接地址direct所指出的片內(nèi)存儲(chǔ)單元中。源操作數(shù)有寄存器尋址,直接尋址,寄存器間接尋址和立即尋址等方式。314、以間接地址為目的操作數(shù)的指令(3條)(Ri)表示Ri中的內(nèi)容為指定的RAM單元。 匯編格式 機(jī)器碼格式操作 注釋
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單元中。
325、十六位數(shù)據(jù)傳送指令(1條)
這條指令的功能是把16位常數(shù)送入DPTR。DPTR由DPH和DPL組成。例:MOVDPTR#1000H;(DPTR)=1000H, (DPH)=10H,(DPL)=00H匯編指令格式MOVDPTR,#data16;機(jī)器碼格式10010000data(h)data(l)操作#data16→DPTR注釋將16位立即數(shù)傳送到DPTR中336、查表指令(2條)匯編指令格式MOVCA,@A+DPTR;MOVCA,@A+PC;機(jī)器碼格式1001001110000011操作((A)+(DPTR))→A先(PC)+1→PC((A)+(PC))→A注釋將程序存儲(chǔ)器內(nèi)容傳送到A中將程序存儲(chǔ)器內(nèi)容傳送到A中34執(zhí)行下面程序段后結(jié)果如何?MOVDPTR,#2000H;(DPTR)=2000HMOVA,#0AH;(A)=0AHMOVCA,@A+DPTR;(A)=(200AH)=11H例1:若:初始ROM內(nèi)容:2000H00H2001H01H2002H09H2003H04H2004H06H2005H08H2006HFFH2007H66H2008H45H2009HABH200AH11H35例2:若初始ROM內(nèi)容為:
100FH 01H
1010H 02H
1011H 03H
1012H 04H
所以,最后結(jié)果為:(A)=01(R0)=01(PC)=1004H執(zhí)行下面程序后的結(jié)果如何?
1000H740CMOV
A,#0CH;(A)=0CH1002H83MOVCA,@A+PC;(PC)=1002+1=1003H,(A)=((A)+(PC))=(0C+1003)
=(100FH)(A)=01H1003HF8MOVR0,A;(R0)=(A)=01H367、累加器A與片外RAM傳送指令(4條)
在80c51指令系統(tǒng)中,CPU對(duì)片外RAM的訪問(wèn)只能用寄存器間接尋址的方式,且僅有四條指令:匯編指令格式機(jī)器碼格式操作MOVXA,@Ri1110001i((Ri))→AMOVXA,@DPTR11100000((DPTR))→AMOVX@Ri,A1111001i(A)→(Ri)MOVX@DPTR,A11110000(A)→(DPTR)
第2,4兩條指令以DPTR為片外數(shù)據(jù)存儲(chǔ)器16位地址指針,尋址范圍達(dá)64KB。其功能是DPTR所指定的片外數(shù)據(jù)存儲(chǔ)器與累加器A之間傳送數(shù)據(jù)。 第1,3兩條指令是用R0或R1作低8位地址指針,由P0口送出,尋址范圍是256字節(jié)。這兩條指令完成以R0或R1為地址指針的片外數(shù)據(jù)存儲(chǔ)器與累加器A之間的傳送數(shù)據(jù)。37例:若片內(nèi)RAM(30H)=01H,片外RAM(30H)=02H,執(zhí)行下面程序段后的結(jié)果如何。 MOVR1,#30H ; (R1)=30H(片內(nèi))
MOVXA,@R1 ; (A)=02H(片外)
MOVR0,A ; (R0)=(A)=02H MOVA,@R1 ; (A)=((R1))=01H(片內(nèi))
MOVR2,A ; (R2)=(A)=01H388、棧操作指令(二條)匯編指令格式機(jī)器碼格式操作注釋PUSHdirect11000000先(SP)+1→SP將direct內(nèi)容壓入堆棧
direct后(direct)→(SP)POPdirect11010000先((SP))→direct將堆棧內(nèi)容彈出到
direct 后(SP)-1→SPdirect單元中39
MOVSP,#18H ;(SP)=18HMOVA,#30H ;(A)=30HMOVDPTR,#1000H ;(DPTR)=1000HPUSHAcc ;(SP)=19H(19H)=30HPUSHDPH ;(SP)=1AH(1AH)=10HPUSHDPL ;(SP)=1BH(1BH)=00HPOPDPL ;(DPL)=00H(SP)=1AHPOPDPH ;(DPH)=10H(SP)=19HPOPAcc ;(A)=30H(SP)=18H409、交換指令(4條)(1)整字節(jié)變換指令匯編指令格式機(jī)器碼格式操作注釋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)容互換初始時(shí):(A)=34H,(30H)=11H XCHA,30H; (A)=11H,(30H)=34H MOVR1,#30H; (R1)=30H XCHA,@R1 ; (A)=11H,(30H)=34H41(2)半字節(jié)交換指令第一條指令為低半字節(jié)交換指令。該指令將累加器A的低4位與R0或R1所指出的片內(nèi)RAM單元的低4位數(shù)據(jù)相互交換,各自的高4位不變,其操作表示為:如:(R1)=30H,(30H)=11H=00010001B,(A)=34H=00110100B則:XCHDA,@R1;(A)=00110001B=31H;
(30H)=00010100B=14HSWAPA ;(A)=00010011=13HA半字節(jié)半字節(jié)RAM匯編指令格式機(jī)器碼格式操作XCHDA,@Ri1101011i(A)0-3←→((Ri))0-3SWAPA11000100(A)0-3←→(A)4-7第二條指令為A的低四位與高四位交換指令。該指令將累加器A的低4位與A的高4位數(shù)據(jù)相互交換。423.3.2算術(shù)運(yùn)算指令1.不帶進(jìn)位加法指令(四條)2.帶進(jìn)位加法指令(四條)3.帶借位減法指令(四條)4.乘法指令(1條)5、除法指令(1條)6、加1指令(5條)7、減1指令(4條)8、十進(jìn)制調(diào)整指令(1條)算術(shù)運(yùn)算指令:用于操作數(shù)之間的加、減、乘除運(yùn)算?!咎攸c(diǎn)】:多數(shù)情況下:操作數(shù)之一在累加器A中,結(jié)果也保留在A中,運(yùn)算結(jié)果要影響PSW(進(jìn)位標(biāo)志、奇偶和溢出標(biāo)志等)。431、不帶進(jìn)位加法指令(四條)匯編指令格式機(jī)器碼格式操作注釋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位無(wú)符號(hào)二進(jìn)制
data數(shù)和累加器A中的數(shù)相加,“和”存放于累加器A中44說(shuō)明:上述指令的執(zhí)行將影響標(biāo)志位AC,Cy,OV,P。當(dāng)“和”的第3位或第7位有進(jìn)位時(shí),分別將AC,CY標(biāo)志位置1,否則為0。溢出標(biāo)志位OV=C7+C6(異或,對(duì)加減法按照有符號(hào)數(shù)原則設(shè)置該位)當(dāng)位6向位7進(jìn)位,而位7不向c進(jìn)位時(shí)ov=1;或者位6不向位7進(jìn)位,而位7向c進(jìn)位時(shí),同樣ov=1。該標(biāo)志位只有帶符號(hào)數(shù)運(yùn)算時(shí)才有用。例:若:(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(和中1的個(gè)數(shù)為奇數(shù)),即:PSW=05H
結(jié)果:(A)=DCH(R0)=64H452帶進(jìn)位加法指令(四條,進(jìn)位位CY參與運(yùn)算)匯編指令格式機(jī)器碼格式操作注釋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位無(wú)符號(hào)二進(jìn)
data制數(shù)與CY及累加器A中的數(shù)相加,“和”存放于累加器A中46說(shuō)明:本組指令的功能是同時(shí)把源操作數(shù)所指出的內(nèi)容和進(jìn)位標(biāo)志位Cy都加到累加器A中,結(jié)果存放到A中,其余的功能和不帶進(jìn)位的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。
47例:編程,將(30H),(31H)單元中的16位數(shù)與(40H),(41H)單元中的16位數(shù)相加,結(jié)果存于(30H),(31H)單元中。解:
MOVA,30H ADDA,40H;數(shù)的低8位相加
MOV30H,A;數(shù)的低8位和送30H MOVA,31H ADDCA,41H;帶進(jìn)位的高8位相加
MOV31H,A;數(shù)的高8位和送31H483、帶借位減法指令(四條)匯編指令格式機(jī)器碼格式操作注釋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位無(wú)符號(hào)二進(jìn)
data制數(shù)與CY及累加器A中的數(shù)相減,“差”存放于累加器A中49
說(shuō)明:這組指令的功能是從累加器A中減去源操作數(shù)所指出的數(shù)及進(jìn)位位CY的值,差保留在累加器A中。 由于80c51指令系統(tǒng)中沒有不帶借位的減法指令,如需要的話,可以在“SUBB”指令前用“CLRC”指令將Cy清0,這一點(diǎn)必須注意.50例:設(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=051
4、乘法指令(1條)匯編指令格式機(jī)器碼格式操作MULAB ;10100100(A)×(B)→B15-8A7-0該指令將累加器A和寄存器B中兩個(gè)無(wú)符號(hào)數(shù)相乘,所得16位積的低字節(jié)存放在A中,高字節(jié)存放中B中。OV=1;表示乘積大于255(FFH),OV=0;表示乘積小于或等于255,A中存放積,B=0。Cy位總是被清0例:(A)=4EH,(B)=5DH,執(zhí)行指令“MULAB”后結(jié)果如何?
解:結(jié)果為:(B)=1CH,(A)=56H,表示積(BA)=1C56H,OV=1。
525、除法指令(1條)例:(A)=BFH,(B)=32H,執(zhí)行指令“DIVAB”后:
結(jié)果為(A)=03H,(B)=29H;標(biāo)志位CY=0,OV=0。匯編指令格式機(jī)器碼格式操作DIVAB;10000100(A)/(B)的商→A,(A)/(B)的余數(shù)→BA中內(nèi)容除以B中內(nèi)容,整數(shù)商存于A中,余數(shù)存于B中。該指令執(zhí)行后,CY和OV均被清0。若原(B)=00H,則結(jié)果無(wú)法確定,用OV=1表示,CY仍為0。536、加1指令(5條)除INCA影響奇偶p標(biāo)志位,其余指令的操作不影響PSW。若原單元內(nèi)容為FFH,加1后溢出為00H,也不影響PSW標(biāo)志。匯編指令格式機(jī)器碼格式操作注釋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”的結(jié)果。解: “INCA”指令只將A的內(nèi)容加1,奇偶p標(biāo)志位變化,其它標(biāo)志位沒有變化?!癆DDA,#01H”指令不僅將A的內(nèi)容加1,還影響標(biāo)志位變化。54例有兩個(gè)無(wú)符號(hào)16位數(shù),分別存放在從M1和M2開始的數(shù)據(jù)區(qū)中,低8位先存,高8位在后。寫出兩個(gè)16位數(shù)的加法程序,和存于R3(高8位)和R4(低8位)。設(shè)和不超過(guò)16位。解由于不存在16位數(shù)的加法指令,所以只能先加低8位,后加高8位,而在加高8位時(shí)要連低8位相加的進(jìn)位一起相加。取操作數(shù)時(shí)用寄存器間接尋址方式,并用加1指令來(lái)修改寄存器的內(nèi)容,亦即修改了操作數(shù)的地址。MOVR0,#Ml;第一個(gè)加數(shù)首地址送R0MOVR1,#M2;第二個(gè)加數(shù)首地址送R1MOVA,@R0,;取第一個(gè)加數(shù)低8位ADDA,@R1:低8位相加MOVR4,A;存和之低8位INCR0;修改地址INCR1;修改地址MOVA,@R0;取第一個(gè)加數(shù)高8位ADDC
A,@R1;高8位相加MOVR3,A;存和之高8位557、減1指令(4條)匯編指令格式機(jī)器碼格式操作注釋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。
除DECA;其余指令的操作不影響PSW。無(wú)DPTR減1指令.568、十進(jìn)制調(diào)整指令(1條)匯編指令格式機(jī)器碼格式操作DAA; 11010100 若(A0-3)>9或AC=1,則(A0-3)+6→A0-3
同時(shí),若(A4-7)>9或CY=1,則(A4-7)+6→A4-7該指令調(diào)整累加器內(nèi)容為BCD碼。(機(jī)器滿16進(jìn)1,10進(jìn)制數(shù)滿10進(jìn)1,所以修正時(shí)加上6)這條指令跟在ADD或ADDC指令后,將相加后存放在累加器中的結(jié)果進(jìn)行十進(jìn)制調(diào)整,完成十進(jìn)制加法運(yùn)算功能。必須注意,本指令不能簡(jiǎn)單地把累加器A的16進(jìn)制數(shù)變換成BCD碼,也不能用于十進(jìn)制減法的調(diào)整。
57例: 設(shè)累加器A內(nèi)容為:01010110B(即為56的BCD碼),寄存器R3的內(nèi)容為01100111B(即67的BCD碼),CY內(nèi)容為1。求執(zhí)行下列指令后的結(jié)果。
ADDCA,R3;
DAA;解:先執(zhí)行ADDCA,R3; (A):01010110BCD:56
(R3):01100111BCD:67
(+)(CY):00000001BCD:01
和:10111110BCD:BE
即(A)=10111110且影響標(biāo)志位CY=0,AC=0;
再執(zhí)行DAA;因?yàn)锳中的高四位值為11,大于9,低四位值為14,也大于9,所以內(nèi)部調(diào)整自動(dòng)進(jìn)行加66H的操作:
10111110
調(diào)整+)01100110 100100100BCD:124即(A)=00100100=24BCD,CY=1;AC=1。583.3.3邏輯操作指令
邏輯操作指令包括:與、或、異或、清除、求反、移位等操作。該指令組全部操作數(shù)都是8位25條指令。多數(shù)情況下一個(gè)操作數(shù)在A中,結(jié)果也存于A。
1.簡(jiǎn)單操作指令(2條)
2.移位指令(4條)
3.邏輯“與”指令(6條)
4.邏輯“或”指令(6條)
5.邏輯“異或”指令(6條)591.簡(jiǎn)單操作指令(2條)匯編指令格式機(jī)器碼格式操作注釋CLRA;111001000→A累加器A清0指令,只影響標(biāo)志位P。CPLA;11110100(A)
→A累加器A取反指令,不影響標(biāo)志位匯編指令格式機(jī)器碼格式操作注釋RLA;00100011A中內(nèi)容循環(huán)左移一位。
←a7←a0
←RRA;00000011A中內(nèi)容循環(huán)右移一位。 →a7→a0→RLCA;00110011A中內(nèi)容連同進(jìn)位位CY一起循 ←CY←a7←a0←環(huán)左移一位。RRCA;00010011A中內(nèi)容連同進(jìn)位位CY一起循 →CY→a7→a0→環(huán)右移一位。2.移位指令(4條)例如:無(wú)符號(hào)8位二進(jìn)制數(shù)(A)=10111101B=BDH,(CY)=0。將(A)乘2,執(zhí)行指令“RLCA”后結(jié)果:(A)=01111010B=7AH,(CY)=1,17AH正是BDH的2倍。603.邏輯“與”指令(6條)匯編指令格式 機(jī)器碼格式 操作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)容按位進(jìn)行邏輯“與”,結(jié)果存放在A中。后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫”操作。614.邏輯“或”指令(6條)匯編指令格式 機(jī)器碼格式 操作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這組指令的功能是將兩個(gè)指定的操作數(shù)按位進(jìn)行邏輯“或”,前四條指令的操作結(jié)果存放在累加器A中,后兩條指令的操作結(jié)果存放在直接地址單元中。625.邏輯“異或”指令(6條)匯編指令格式 機(jī)器碼格式 操作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這組指令的功能是將兩個(gè)指定的操作數(shù)按位進(jìn)行“異或”,前四條指令的結(jié)果存放在累加器A中,后兩條指令的操作結(jié)果存放在直接地址單元中這類指令的操作均只影響標(biāo)志位P。63已知:M1、M2單元中有2個(gè)BCD碼,試編程將其緊縮為一個(gè)字節(jié)并存入M1單元。解:MOVR1,#M1
MOVA,@R1
SWAPA INCR1
ORLA,@R1
MOVM1,A0000BCD10000BCD2M1M1+1BCD10000BCD1BCD20000BCD1累加器ABCD1BCD2BCD10000BCD1BCD20000BCD1BCD10000BCD1BCD2累加器A0000BCD1BCD10000BCD1BCD2累加器A0000BCD1BCD10000BCD1BCD2已知:M1、M2單元中有2個(gè)BCD碼,試編程將其緊縮為一個(gè)字節(jié)并存入M1單元。解:MOVR1,#M1
MOVA,@R1
SWAPA INCR1
ORLA,@R1
MOVM1,A0000BCD10000BCD2已知:M1、M2單元中有2個(gè)BCD碼,試編程將其緊縮為一個(gè)字節(jié)并存入M1單元。解:MOVR1,#M1
MOVA,@R1
SWAPA INCR1
ORLA,@R1
MOVM1,A已知:M1、M2單元中有2個(gè)BCD碼,試編程將其緊縮為一個(gè)字節(jié)并存入M1單元。解:MOVR1,#M1 MOVA,@R1 SWAPA INCR1 ORLA,@R1 MOVM1,A643.3.4控制程序轉(zhuǎn)移類指令80c51單片機(jī)有豐富的轉(zhuǎn)移類指令(17條),包括無(wú)條件轉(zhuǎn)移、條件轉(zhuǎn)移和調(diào)用指令及返回指令等。
【特點(diǎn)】:通過(guò)修改程序指針PC的內(nèi)容,使CPU轉(zhuǎn)到另一處執(zhí)行,從而改變程序的流向。所有這些指令的目標(biāo)地址都是在64K字節(jié)程序存儲(chǔ)器地址空間范圍內(nèi)1.無(wú)條件轉(zhuǎn)移指令(4條)2.空操作指令(1條)3.條件轉(zhuǎn)移指令(8條)4.調(diào)用和返回指令(4條)651、無(wú)條件轉(zhuǎn)移指令(4條)
無(wú)條件轉(zhuǎn)移指令是當(dāng)程序執(zhí)行到該指令時(shí),程序無(wú)條件的轉(zhuǎn)移到指令所提供的地址處執(zhí)行。無(wú)條件轉(zhuǎn)移指令有長(zhǎng)轉(zhuǎn)移、短轉(zhuǎn)移、相對(duì)轉(zhuǎn)移和間接轉(zhuǎn)移4條指令。
(1)長(zhǎng)轉(zhuǎn)移指令
指令格式機(jī)器碼注釋
LJMP addr16; 00000010 addr16→PC a15-a8
a7-a0指令提供16位目標(biāo)地址,將指令的第二、第三字節(jié)地址碼分別裝入PC的高8位和低8位中,程序無(wú)條件轉(zhuǎn)向指定的目標(biāo)地址去執(zhí)行。由于直接提供16位目標(biāo)地址,所以程序可轉(zhuǎn)向64K程序存儲(chǔ)器地址空間的任何單元。66
(2)短轉(zhuǎn)移指令(絕對(duì)轉(zhuǎn)移)AJMP addr11; a10a9a800001 先(PC)+2→PC a7-a0 后addr11→PC10-0 (PC15-11)不變這條指令提供了11位地址,可在2K范圍內(nèi)無(wú)條件轉(zhuǎn)移到由a10-a0所指出的地址單元中。因?yàn)橹噶钪惶峁┑?1位地址,范圍為000H~7FFH,高5位為原PC15-11位值,因此,轉(zhuǎn)移的目標(biāo)地址范圍為
A15A14A13A12A11000
0000
0000B~~A15A14A13A12A11111
1111
1111B。67例1:ORG 0500H0500H: AJMP 0703H;0703H=0000011100000011B ;Addr11=11100000011B ;指令地址PC=0500H ;即:PC=0000
010100000000BPC+2,PC=0502H=0000010100000010B,然后將Addr11送PC的低11位:PC=0000011100000011B(0703H).指令的機(jī)器碼:a10a9a800001 =11100001=E1H a7-a0 =00000011=03H
例2:ORG 0700H0700H: AJMP 0832H;0832H=0000100000110010B ;Addr11=00000110010B ;指令地址PC=0700H ;即:PC=0000011100000000B ;該指令為二字節(jié)指令在執(zhí)行時(shí)先PC+2,(PC=0702H=0000011100000010B,PC的高五位為:00000B,于0832H的高五位不同,不在同一個(gè)2k范圍內(nèi)。)該指令跨越2k的范圍,錯(cuò)誤。68
(3)相對(duì)轉(zhuǎn)移指令(短轉(zhuǎn)移)指令的操作數(shù)是相對(duì)地址,rel是一個(gè)帶符號(hào)的偏移字節(jié)數(shù)(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版實(shí)習(xí)合同模板:實(shí)習(xí)期間實(shí)習(xí)成果轉(zhuǎn)化3篇
- 2025版木結(jié)構(gòu)景觀清包施工合同示范文本4篇
- 二零二五年度虛擬現(xiàn)實(shí)內(nèi)容創(chuàng)作者免責(zé)聲明合同范本4篇
- 2025版小型沼氣項(xiàng)目設(shè)備研發(fā)、生產(chǎn)、安裝及運(yùn)營(yíng)維護(hù)合同3篇
- 增值稅及其會(huì)計(jì)處理教學(xué)課件
- 2025版新能源汽車動(dòng)力電池回收利用合同范本4篇
- 2025版小麥種子市場(chǎng)調(diào)研與風(fēng)險(xiǎn)評(píng)估合同2篇
- 2025版學(xué)校臨時(shí)教師聘用合同實(shí)施細(xì)則3篇
- 二零二五版幕墻工程風(fēng)險(xiǎn)管理與保險(xiǎn)合同4篇
- 體育設(shè)施工程體育場(chǎng)地圍網(wǎng)施工考核試卷
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 2024年城市軌道交通設(shè)備維保及安全檢查合同3篇
- 【教案】+同一直線上二力的合成(教學(xué)設(shè)計(jì))(人教版2024)八年級(jí)物理下冊(cè)
- 湖北省武漢市青山區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末質(zhì)量檢測(cè)數(shù)學(xué)試卷(含解析)
- 單位往個(gè)人轉(zhuǎn)賬的合同(2篇)
- 科研倫理審查與違規(guī)處理考核試卷
- GB/T 44101-2024中國(guó)式摔跤課程學(xué)生運(yùn)動(dòng)能力測(cè)評(píng)規(guī)范
- 高危妊娠的評(píng)估和護(hù)理
- 2024年山東鐵投集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2023年高考全國(guó)甲卷數(shù)學(xué)(理)試卷【含答案】
- 新教材教科版五年級(jí)下冊(cè)科學(xué)全冊(cè)課時(shí)練(課后作業(yè)設(shè)計(jì))(含答案)
評(píng)論
0/150
提交評(píng)論