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

下載本文檔

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

文檔簡介

第3章指令系統(tǒng)(上)89C51指令系統(tǒng)3.1.1匯編語言匯編語言是用助記符、符號(hào)和數(shù)字等來表示指令的程序語言。機(jī)器語言是用二進(jìn)制編碼來表示的。89C51單片機(jī)是8位機(jī),其機(jī)器語言以8位二進(jìn)制碼為單位(一個(gè)字節(jié))。89C51指令有:單字節(jié)、雙字節(jié)或三字節(jié)指令。例:“10+20”匯編語言程序機(jī)器語言程序MOVA,#0AH740AHADDA,#14H2414H機(jī)器語言程序(機(jī)器碼,或稱為“代碼”)通過某種方法存放在ROM中。3.1.2MCS-51

指令格式89C51匯編語言指令組成:操作碼+操作數(shù)格式:操作碼[目的操作數(shù)][,源操作數(shù)]例:MOVA,#13H3.1.2MCS-51

指令格式標(biāo)號(hào)段---由用戶定義的符號(hào)組。標(biāo)號(hào)段可有可無。若一條指令中有標(biāo)號(hào)段,標(biāo)號(hào)代表該指令的第1個(gè)字節(jié)所存放的存儲(chǔ)器單元的地址,故標(biāo)號(hào)又稱為符號(hào)地址,在匯編時(shí),把該地址賦值給標(biāo)號(hào)。3.1.2MCS-51

指令格式操作碼---規(guī)定指令所實(shí)現(xiàn)的操作功能,由2~5個(gè)英文字母表示。操作數(shù)---指出了參與操作的數(shù)據(jù)來源和操作結(jié)果存放的目的單元。操作數(shù)可以是:①一個(gè)常數(shù)(立即數(shù));②一個(gè)數(shù)據(jù)所在的地址,即在執(zhí)行指令時(shí)從指定的地址中取出操作數(shù)。操作碼和操作數(shù)都有相對應(yīng)的二進(jìn)制代碼(即機(jī)器碼)。指令代碼由若干字節(jié)組成。注釋段---可有可無。加入注釋段的目的是便于閱讀。在閱讀程序,尤其是在調(diào)試程序時(shí)會(huì)帶來很多方便。不同的指令,指令的字節(jié)數(shù)也不同。在89C51指令系統(tǒng)中,有單字節(jié)(一字節(jié))、雙字節(jié)或3字節(jié)指令。第一個(gè)字節(jié)第二個(gè)字節(jié)第三個(gè)字節(jié)單字節(jié)指令操作碼雙字節(jié)指令操作碼操作數(shù)三字節(jié)指令操作碼操作數(shù)操作數(shù)1.單字節(jié)(一字節(jié))指令單字節(jié)指令中的8位二進(jìn)制代碼既包含操作碼的信息,也包含操作數(shù)的信息。單字節(jié)指令又有二種情況:記住:一字節(jié)=8位二進(jìn)制數(shù)1).指令碼中隱含著對某一個(gè)寄存器的操作例如,指令:INCDPTR“DPTR”是“數(shù)據(jù)指針”,屬于“特殊功能寄存器”。該條指令翻譯成機(jī)器碼為:A3H。二進(jìn)制數(shù)為:10100011B。該機(jī)器碼是人為(芯片發(fā)明者)規(guī)定的,INTEL51系列單片機(jī)的指令參見教材附錄A、B。3.1.2MCS-51

指令格式2).由指令碼中的rrr三位的不同編碼指定某一個(gè)寄存器例如,工作寄存器向累加器A傳送數(shù)據(jù)指令:MOVA,Rn其指令格式(機(jī)器碼)為:11101rrr2.雙字節(jié)指令用一字節(jié)表示操作碼,另一字節(jié)表示操作數(shù)或操作數(shù)所在的地址。其格式為:如:ADDA,#45H機(jī)器碼:24H45H問:該條指令占用ROM中幾個(gè)單元?3.

3字節(jié)指令一字節(jié)表示操作碼,另兩個(gè)字節(jié)為操作數(shù)。其格式為:如:MOVDPTR,#2100H機(jī)器碼:90H21H00H3.2尋址方式尋址------就是尋找(或確定)指令中操作數(shù)或操作數(shù)所在的地址。尋址方式-----就是如何找到存放操作數(shù)的地址,并把操作數(shù)提取出來的方法。尋址方式越多,計(jì)算機(jī)尋址能力越強(qiáng),但指令系統(tǒng)也就越復(fù)雜。3.2尋址方式尋址方式分為以下七種:按功能分為以下五種:1、立即數(shù)尋址1、數(shù)據(jù)傳送指令2、直接尋址2、算術(shù)運(yùn)算指令3、寄存器尋址3、邏輯運(yùn)算指令4、寄存器間接尋址4、控制轉(zhuǎn)移類指令5、相對尋址5、位操作指令6、變址尋址7、位尋址指令中常用符號(hào)說明(P56)Rn——當(dāng)前寄存器區(qū)的8個(gè)工作寄存器R0~R7(n=0~7);Ri——當(dāng)前寄存器區(qū)可作地址寄存器的2個(gè)工作寄存器R0和R1(i=0,1);direct——8位內(nèi)部RAM單元的地址(即字節(jié)地址)及特殊功能寄存器的地址;#data——表示8位常數(shù)(立即數(shù));#datal6——表示16位常數(shù);addr16——表示16位地址;addrll——表示11位地址;rel——8位帶符號(hào)的地址偏移量。偏移范圍為-128~+127。bit——表示位地址;@——間接尋址寄存器或基址寄存器的前綴;/——位操作指令中,該位求反后參與操作,不影響該位;X——片內(nèi)RAM的直接地址或寄存器;(X)——相應(yīng)地址單元中的內(nèi)容;((X))——表示X地址單元中的內(nèi)容;

→:箭頭左邊的內(nèi)容送入箭頭右邊的單元內(nèi)3.2.1七種尋址方式1、寄存器尋址由指令指出寄存器組R0~R7中某一個(gè)或其他寄存器的內(nèi)容作為操作數(shù)。

如:1)、MOVA,R0;(R0)→A2)、ADDA,R1;(A)+(R1)→A

3)、MOVP1,A

;(A)→

P1口操作數(shù)在寄存器中,如R0~R7,A、B、Cy(位)、DPTR等。

在此寄存器中存放著真正的被操作對象。例:“INCRn”指令的機(jī)器為:00001rrr。若Rn為R3時(shí),即INCR3

,則其機(jī)器碼為00001011。2、直接尋址指令中直接給出的操作數(shù)是片內(nèi)RAM單元的的地址。

如:MOVA,40H

;(40H)→A

,即片內(nèi)RAM40H單元的內(nèi)容送入A中

使用

直接尋址方式可訪問片內(nèi)RAM的低128個(gè)單元及特殊功能寄存器(SFR)。

對SFR,既可使用其字節(jié)地址,也可使用其名字。

如:MOVA,P0

;(P0)→A

P0口的字節(jié)地址為80H,故上條指令又可寫成:

MOVA,80H;(80H)→A3.2.1七種尋址方式3、立即數(shù)尋址操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù)。用“#”表示,以區(qū)別直接地址。

如:MOVA,#40H;40H→A該指令與“MOVA,40H”有何區(qū)別?89C51中只有一條要求操作碼后面兩字節(jié)立即數(shù)的指令:

MOVDPTR,

#datal6例:MOVDPTR,#2100H;2100H→DPTR其機(jī)器碼為:902100H3.2.1七種尋址方式4、寄存器間接尋址

操作數(shù)的地址事先存放在某個(gè)寄存器中,然后把這個(gè)寄存器中的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。89C51規(guī)定①用R0或R1作為間接尋址寄存器,可尋址片內(nèi)RAM低位地址的128字節(jié)單元內(nèi)容;

②用DPTR(數(shù)據(jù)指針)作為間接寄存器,尋址片外RAM(數(shù)據(jù)存儲(chǔ)器)的64KB空間,但不能用這種尋址方法尋址特殊功能寄存器(SFR)。如:MOVA,@R0

MOVXA,@DPTR操作數(shù)在片內(nèi)RAM中操作數(shù)在片外RAM中例如:將片內(nèi)RAM65H單元的內(nèi)容47H送A。其中R0中的內(nèi)容為65H。

程序如下:

MOVR0,#65H;65H→(R0)MOV65H,#47H;47H→(65H)MOVA,@R0;((R0))→A使用“MOVA,@Ri”時(shí)

R0或R1要先賦值。3.2.1七種尋址方式5、變址尋址(基址寄存器+變址寄存器尋址)

以DPTR或PC為基址寄存器,以A為變址寄存器(A中的內(nèi)容為無符號(hào)數(shù)),把兩者內(nèi)容相加(形成的16位地址)作為操作數(shù)的地址。

用變址尋址方式只能訪問ROM(從ROM中讀取數(shù)據(jù)),訪問范圍:64KB。

例:

MOVCA,@A+DPTR;((A)+(DPTR))→A

變址尋址方式常用于查表操作。使用該指令時(shí),DPTR要先賦值。這個(gè)數(shù)值一般稱為表的首地址。E0A程序存儲(chǔ)區(qū)2040H9320E0H472041H………DPH20DPL00ALU20E0H47指令代碼5、變址尋址例如:2040H:MOVCA,@A+DPTR設(shè)DPTR=2000H,A=0E0H機(jī)器碼為:93HPC3.2.1七種尋址方式6、相對尋址將PC中的當(dāng)前內(nèi)容與指令第二字節(jié)給出的數(shù)相加,結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(轉(zhuǎn)移目的地址)。PC中的當(dāng)前內(nèi)容稱為基地址(本指令后的字節(jié)地址)指令第二字節(jié)給出的數(shù)據(jù)稱為偏移量(rel),1字節(jié)帶符號(hào)數(shù).

常用于跳轉(zhuǎn)指令。如:JC23H;若Cy=0,不跳轉(zhuǎn);Cy=1,跳轉(zhuǎn)改變PC程序存儲(chǔ)區(qū)ALU如:1000H:JC23H;若Cy=0,不跳轉(zhuǎn);Cy=1,向前跳轉(zhuǎn)23H個(gè)單元1025H1000H401025H451001H

23……1024H471002H3023H1002H指令代碼當(dāng)前PC6、相對尋址其機(jī)器碼為:4023H地址共23H個(gè)單元PC6、相對尋址?目的地址=源地址+2(相對轉(zhuǎn)移指令字節(jié)數(shù))+rel?相對轉(zhuǎn)移分為正向跳轉(zhuǎn)和反向跳轉(zhuǎn)。正向跳轉(zhuǎn)時(shí):

rel=目的地址–源地址–2反向跳轉(zhuǎn)時(shí):rel=FEH–│地址差│3.2.1七種尋址方式7、位尋址對片內(nèi)RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器進(jìn)行位操作時(shí)的尋址方式。

如:SETB3DH;將27H.5位置1

CLRC;Cy位清0操作數(shù)在片內(nèi)RAM位地址區(qū)或SFR某些位中3.389C51單片機(jī)的指令系統(tǒng)MCS-51指令系統(tǒng)分為五大類數(shù)據(jù)傳送指令(28條)算術(shù)運(yùn)算指令(24條)邏輯運(yùn)算及移位指令(25條)控制轉(zhuǎn)移指令(17條)位操作指令或布爾操作(17條)共111條指令。3.3.1數(shù)據(jù)傳送指令傳送-----把源地址單元的內(nèi)容傳送到目的地址單元中去,而源地址單元的內(nèi)容不變;或者源、目的單元內(nèi)容互換。傳送指令的助記符:“MOV”功能:將源地址單元的內(nèi)容傳送到目的字節(jié),而源字節(jié)的內(nèi)容不變。3.3.1數(shù)據(jù)傳送指令1.以累加器A為目的操作數(shù)的指令

匯編指令格式操作

MOVA,#data;#data→

A。2字節(jié)指令機(jī)器碼:74HdataH

MOVA,Rn;

n=0~7,

(Rn)

A。1字節(jié)指令

MOVA,@Ri;i=0,1,

((Ri))

A。1字節(jié)指令

MOVA,direct

;

(direct)→A,direct為內(nèi)部RAM或SFR地址。2字節(jié)指令上述操作會(huì)影響PSW的內(nèi)容(即影響P標(biāo)志位)。例:執(zhí)行下列指令后,(A)=?MOVR0,#30HMOV30H,#60HMOVA,@R0(A)=?2.以Rn為目的操作數(shù)的指令MOVRn,A;

(A)

Rn,n=0~7。1字節(jié)指令MOVRn,direct;

(direct)→

Rn。2字節(jié)指令MOVRn,#data;

#data→Rn。2字節(jié)指令例(A)=78H,(R5)=47H,(70H)=0F2H。寫出執(zhí)行下列指令的注釋。MOVR5,A;(A)R5,(R5)=78HMOVR5,70H;(70H)R5,(R5)=0F2HMOVR5,#0A3H;0A3HR5,(R5)=0A3H注意:指令“

MOVRn,Rn”是非法指令!3.以直接地址為目的操作數(shù)的指令

MOVdirect,A;(A)

direct。2字節(jié)指令MOVdirect,Rn;(Rn)→direc

t,n=0~7。2字節(jié)指令MOVdirect,@Ri;((Ri

)

)→

direct,i=0,1。2字節(jié)指令MOVdirect1,direct2;(direct2)→

direct1。3字節(jié)指令MOVdirect,#data

;#data→direct。3字節(jié)指令例1:MOV20H,A MOV20H,R1 MOV20H,30H MOV20H,@R1 MOV0A0H,#34H MOVP2,#34H例2:MOV78H,#80H機(jī)器碼:757880H

例3:

MOV78H,80H

機(jī)器碼:858078H注意例2、例3的區(qū)別。4.以寄存器間接地址為目的操作數(shù)指令MOV@Ri,A;

(A)

((Ri)),i=0,1。1字節(jié)指令MOV@Ri,direct;

(direct)→

((Ri))。2字節(jié)指令MOV@Ri,#data;

#data→((Ri))。2字節(jié)指令功能:把源操作數(shù)指定的內(nèi)容送入以R0或R1為地址指針的片內(nèi)存儲(chǔ)單元中。例:

MOV@R0,A MOV@R1,20H MOV@R0,#34H使用@Ri時(shí),R0或R1要先賦值。如:MOVR0,#46HMOV@R0,A5.十六位數(shù)的傳遞指令MOVDPTR,#data16;#dataH→DPH,

#dataL→DPL;3字節(jié)指令DPTR----數(shù)據(jù)指針,為SFR中(DPH)、(DPL)例:MOVDPTR,#1234H結(jié)果:(DPH)=12H,(DPL)=34H。例如:

MOVDPL,#12HMOVDPH,#35H

則就相當(dāng)于執(zhí)行:?例題1:例題2:請判斷下列的MCS-51單片機(jī)指令的書寫格式是否有錯(cuò),若有,請說明錯(cuò)誤原因。

①M(fèi)OV50H,@R3

MOVCA,@R0+DPTR答案:①間址寄存器不能使用R2~R7。

MOVCA,@R0+DPTR。變址尋址方式中的間址寄存器不可使用R0,只可使用A6.查表指令MOVCA,@A+DPTR

;先(PC)+1→PC,((A)+(DPTR))→A

MOVCA,@A+PC;先(PC)+1→PC,后((A)+(PC))→A上面兩條指令均為:1字節(jié)指令例:(DPTR)=0300H,(A)=02HROM中(0302H)=55H執(zhí)行:

MOVCA,@A+DPTR結(jié)果:(A)=55H使用“MOVCA,@A+DPTR”指令時(shí),DPTR要先賦值。這個(gè)數(shù)值一般稱為表的首地址。P61.例:在ROM中,數(shù)據(jù)表格為:執(zhí)行程序:1000H:MOVA,#0DH;0DH→A,查表的偏移量1002H:MOVCA,@A+PC;(0DH+1003H)→A1003H:MOVR0,A;(A)→R0執(zhí)行完上述指令后的結(jié)果為:(A)=02H,(R0)=02H,(PC)=1004H。數(shù)據(jù)表格P62.例:在ROM中,數(shù)據(jù)表格為:執(zhí)行程序:1000H:MOVA,#10H;10H→A,查表的偏移量1002H:PUSHDPH;保護(hù)現(xiàn)場1004H:PUSHDPL1006H:MOVDPTR,#7000H;表首地址→DPTR1009H:MOVCA,@A+DPTR;(10H+7000H)=(7010H)=02H→A100AH:POPDPL;恢復(fù)現(xiàn)場100CH:POPDPH執(zhí)行后結(jié)果為:(A)=02H,(PC)=100EH,(DPTR)=原值。例:根據(jù)A中的內(nèi)容(0~9)查平方表

MOVCA,@A+PC例子:

地址機(jī)器碼源程序

ORG0050H

00507403 MOVA,#03H

0052 83MOVCA,@A+PC

0053 00DB00H

0054 01DB01H

0055 04DB04H

0056 09DB09H

0057 10DB10H

0058 19DB19H

0059 24DB24H

005A31DB31H

005B40DB40H

005C51DB51H END“ORG”、“DB”為偽指令。P108執(zhí)行該程序段后:(A)=09H。7.累加器A與片外數(shù)據(jù)傳輸指令(P62)MOVXA,@DPTR;

((DPTR))→A,地址范圍64K

MOVXA,@Ri;

((Ri))→A,地址范圍0~255上面兩條指令為”讀”。硬件自動(dòng)使RD引腳產(chǎn)生低電平,WR引腳為高電平。

MOVX@DPTR,A;(A)→(DPTR)MOVX@Ri,A;(A)→(Ri)上面兩條指令為”寫”。硬件自動(dòng)使WR引腳產(chǎn)生低電平,RD引腳下為高電平。

以上四條指令均為:1字節(jié)指令

使用“MOVXA,@DPTR”和“MOVX@DPTR,A”指令時(shí),DPTR要先賦值。這個(gè)數(shù)值一般稱為源首地址或目的首地址。說明:1.在MCS-51中,與外部存儲(chǔ)器RAM打交道的只可以是累加器A

。所有需要送入外部RAM的數(shù)據(jù)必需要通過A送去,而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過A讀入。內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行。2.要“讀”或“寫”外部的RAM,當(dāng)然也必須要知道RAM的地址,對“MOVXA,@DPTR”和“MOVX@DPTR,A”兩條指令中,地址是被直接放在DPTR中的。而“MOVXA,@Ri”和“MOVX@Ri,A”兩條指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。3.使用時(shí)應(yīng)先將要“讀”或“寫”的地址送入DPTR或Ri中,然后再用“讀/寫”命令。

請同學(xué)閱讀“上機(jī)實(shí)驗(yàn)指導(dǎo)書”實(shí)驗(yàn)一的程序!例題2:將片外RAM中某一單元(設(shè)為0100H單元)的數(shù)據(jù)送入片內(nèi)RAM的60H單元中,試編寫程序。例題3:將片內(nèi)RAM中50H單元的數(shù)據(jù)送到片外RAM的1060H單元中,試編寫程序。例題1:將外部RAM中某一單元(設(shè)為0100H單元)的數(shù)據(jù)送入外部RAM的另一個(gè)單元(設(shè)為0200H單元)中,試編寫程序。8.棧操作指令

①入棧指令

PUSHdirect

;先(SP)+1→SP,后(direct)→(SP)

②出棧指令

POPdirect;先((SP))→(direct),后(SP)-1→(SP)這兩條指令均為:2字節(jié)指令。第一條為壓入指令,就是將direct中的內(nèi)容送入堆棧中,第二條為彈出指令,就是將堆棧中的內(nèi)容送回到direct中例: MOVSP,#5FH MOVA,#100 MOVB,#20 PUSHACC

PUSHB將SP中的值加1,即變?yōu)?0H,然后將A中的值送到60H單元中,因此執(zhí)行完本條指令后,(60H)=100,同樣,執(zhí)行PUSHB時(shí),是將SP+1,即變?yōu)?1H,然后將B中的值送入到61H單元中,即執(zhí)行完本條指令后,(61H)=20。堆棧的操作原則:先進(jìn)后出9.交換指令①字節(jié)交換指令XCHA,Rn;(A)←→(Rn)。1字節(jié)指令XCHA,direct;(A)←→(direct)。2字節(jié)指令XCHA,@Ri;(A)←→((Ri))。1字節(jié)指令例:(A)=80H,(R7)=97H執(zhí)行:XCHA,R7結(jié)果:(A)=97H,(R7)=80H9.交換指令②半字節(jié)交換指令XCHDA,@Ri;(A)0-3←→((Ri)0-3)。1字節(jié)指令例:(R0)=60H,(60H)=3EH,(A)=59H執(zhí)行:XCHDA,@R0結(jié)果:(A)=5EH(60H)=39H3.3.2算術(shù)操作類指令主要對8位無符號(hào)數(shù);也可用于帶符號(hào)數(shù)運(yùn)算。包括:加、減、乘、除、加1、減1運(yùn)算指令影響PSW有關(guān)位。3.3.2算術(shù)操作類指令復(fù)習(xí)--PSW寄存器Cy:進(jìn)位標(biāo)志位AC:輔助進(jìn)位標(biāo)志位F0:

供用戶使用的標(biāo)志位OV:溢出標(biāo)志位P:奇偶標(biāo)志位

A中數(shù)據(jù)的奇偶性。當(dāng)1的個(gè)數(shù)為奇數(shù),P=1,否則P=0。RS1RS000區(qū)0(地址:00H~07H)01區(qū)1(地址:08H~0FH)10區(qū)2(地址:10H~17H)11區(qū)3(地址:18H~1FH)3.3.2算術(shù)操作類指令1.不帶進(jìn)位位的加法指令

ADDA,#data ;(A)+data→A。2字節(jié)指令 ADDA,direct ;(A)+(direct)→A。2字節(jié)指令 ADDA,Rn ;(A)+(Rn)→A。1字節(jié)指令 ADDA,@Ri ;(A)+((Ri))→A。1字節(jié)指令用途:將A中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果存在A中。P65.例3-1

設(shè)(A)=0C3H,(R0)=0AAH。執(zhí)行指令:ADDA,R0問:執(zhí)行指令后,A、R0、CY、AC和OV的內(nèi)容是什么?問題:OV溢出是什么意思?若認(rèn)為是補(bǔ)碼運(yùn)算,則運(yùn)算結(jié)果為-61+(-86)=-147超出了補(bǔ)碼的表示范圍(-128~+127)。負(fù)溢出。也可以這樣理解:兩個(gè)負(fù)數(shù)相加,而結(jié)果為正,出錯(cuò)。1.不帶進(jìn)位位的加法指令例:單片機(jī)上電復(fù)位后,執(zhí)行下面的指令:

MOVA,#78HMOVR0,#64H

ADDA,RO問:執(zhí)行該指令后:(A)=?,(R0)=?,(PSW)=?問題:OV溢出是什么意思?若認(rèn)為是補(bǔ)碼運(yùn)算,則運(yùn)算結(jié)果為+120+64=+220超出了補(bǔ)碼的表示范圍(-128~+127)。正溢出。也可以這樣理解:兩個(gè)正數(shù)相加,而結(jié)果為負(fù),出錯(cuò)。例如:

若A=11010011B,(R1)=11101000B,執(zhí)行指令“ADDA,R1”時(shí),其算式表達(dá)為:相加后(A)=10111011B。若認(rèn)為是無符號(hào)相加,則A的值代表十進(jìn)制數(shù)187;若認(rèn)為是有符號(hào)數(shù)(補(bǔ)碼)相加,則A的值為十進(jìn)制-69。小結(jié)在確定相加后進(jìn)位標(biāo)志CY的值時(shí),總是把兩個(gè)操作數(shù)作為無符號(hào)數(shù)直接相加而得出進(jìn)位CY值。如上例中,相加后CY=1。若為無符號(hào)數(shù)相加CY代表十進(jìn)制數(shù)256,但若是兩個(gè)有符號(hào)數(shù)相加,CY的值沒有意義。在確定相加后溢出標(biāo)志OV的值時(shí),計(jì)算機(jī)總是把操作數(shù)當(dāng)作帶符號(hào)數(shù)來對待。在作加法運(yùn)算時(shí),一個(gè)正數(shù)和一個(gè)負(fù)數(shù)相加是不可能產(chǎn)生溢出的,只有兩個(gè)同符號(hào)數(shù)相加才有可能產(chǎn)生溢出,表示運(yùn)算結(jié)果出錯(cuò)。溢出標(biāo)志位OV只有帶符號(hào)運(yùn)算時(shí)才有用。3.3.2算術(shù)操作類指令A(yù)DDCA,Rn ;(A)+(Rn)+CY→A。1字節(jié)指令A(yù)DDCA,direct ;(A)+(direct)+CY→A。

2字節(jié)指令A(yù)DDCA,@Ri ;(A)+((Ri))+CY→A。1字節(jié)指令A(yù)DDCA,#data ;(A)+#data+CY→A。2字節(jié)指令對標(biāo)志位的影響與ADD相同說明:由于51單片機(jī)是一種8位機(jī),所以只能做8位的數(shù)學(xué)運(yùn)算,但8位運(yùn)算的范圍只有0~255,這在實(shí)際工作中是不夠的,因此就要進(jìn)行擴(kuò)展,一般是將2個(gè)8位(兩字節(jié))的數(shù)學(xué)運(yùn)算合起來,成為一個(gè)16位的運(yùn)算,這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到0~65535。3.3.2算術(shù)操作類指令3.帶借位的減法指令SUBBA,Rn ;(A)-(Rn)-CY→A。1字節(jié)指令SUBBA,direct;(A)-(direct)-CY→A。2字節(jié)指令SUBBA,@Ri ;(A)-((Ri))-CY→A。1字節(jié)指令SUBBA,#data;(A)-#data-CY→A。2字節(jié)指令若在使用“SUBB”指令前不知道“CY”值,則應(yīng)先將“CY”清“0”。P66.例:3-3設(shè)累加器A的內(nèi)容為0C9H,寄存器R2的內(nèi)容為54H,進(jìn)位標(biāo)志CY=1。執(zhí)行指令“SUBBA,R2”的結(jié)果為(A)=74H,CY=0,AC=0,OV=1。補(bǔ)碼,其真值為-55補(bǔ)碼,其真值為-56補(bǔ)碼,其真值為84補(bǔ)碼,其真值為116補(bǔ)碼時(shí):-55-1-(+84)=-140,超過了補(bǔ)碼表示的范圍3.3.2算術(shù)操作類指令4.乘法指令

MULAB ;(A)×(B)→B15~8

A7~0。1字節(jié)指令

功能:把累加器A和寄存器B中的兩個(gè)8位無符號(hào)數(shù)相乘,所得16位積的低8位存放在A中,積的高8位存放在B中。若乘積>0FFH(255),則“OV”置1;否則清0(即B的內(nèi)容為0)。CY總是被清0。P66.例3-4(A)=4EH,(B)=5DH。執(zhí)行指令:MULAB后,其結(jié)果是什么?3.3.2算術(shù)操作類指令5.除法指令

DIVAB ;A÷B的商→A,余數(shù)→B。1字節(jié)指令

A、B的內(nèi)容均為8位無符號(hào)整數(shù)。CY和OV均被清0。若原(B)=00H,則結(jié)果是無法確定的,用OV=1表示,而CY仍為0。P67.例3-5若(A)=0BFH,(B)=32H。執(zhí)行:DIVAB指令后,其結(jié)果是什么?3.3.2算術(shù)操作類指令6.加1指令

INCA ;(A)+1→A,影響P標(biāo)志。1字節(jié)指令

INCRn ;(Rn)+1→Rn。1字節(jié)指令

INCdirect ;(direct)+1→(direct)。2字節(jié)指令

INC@Ri ;((Ri))+1→(Ri)。1字節(jié)指令

INCDPTR ;(DPTR)+1→DPTR。1字節(jié)指令

若原單元的內(nèi)容為FFH,加1后溢出為00H。例:A=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234H。連續(xù)執(zhí)行下面的指令:

INCAINCR0INC21HINC@R0INCDPTR;A=13H;R0=34H;(21H)=33H;(34H)=23H;DPTR=1235H3.3.2算術(shù)操作類指令7.減1指令DECA ;(A)-1→A,影響P標(biāo)志。1字節(jié)指令

DECRn ;(Rn)-1→Rn。1字節(jié)指令

DECdirect ;(direct)-1→direct。2字節(jié)指令

DEC@Ri ;((Ri))-1→(Ri)。1字節(jié)指令

若原單元的內(nèi)容為00H,減1后溢出為FFH。3.3.2算術(shù)操作類指令8.十進(jìn)制調(diào)整指令

DAA;該指令的功能是對BCD碼的加法結(jié)果進(jìn)行調(diào)整,

1字節(jié)指令

;調(diào)整后的結(jié)果儲(chǔ)存在A中

該指令必須跟在ADD和ADDC指令之后,而且只能用于壓縮BCD數(shù)相加結(jié)果的調(diào)整(自動(dòng)修正)。兩BCD數(shù)相加后,經(jīng)本指令調(diào)整才能得到壓縮BCD數(shù)的和的正確值。十進(jìn)制調(diào)整的修正方法為:當(dāng)累加器低四位大于9或半進(jìn)位標(biāo)志AC=1時(shí),則進(jìn)行低四位加6修正

(A0~3)+6→(A0~3)

即(A)=(A)+06

當(dāng)累加器高四位大于9或進(jìn)位標(biāo)志CY=1時(shí),進(jìn)行高四位加6修正

(A4~7)+6→(A4~7)

即(A)=(A)+60H例:設(shè)A的內(nèi)容為01010110B(即為56的BCD數(shù)),R3的內(nèi)容為00010111B(27的BCD數(shù)),CY的內(nèi)容為1。執(zhí)行下列指令:ADDCA,R3DAA執(zhí)行“DAA”注意:使用“DAA”指令時(shí):①只能緊跟在加法指令之后進(jìn)行,不能緊跟在減法、乘法、除法和INC指令之后;②兩個(gè)加數(shù)必須已經(jīng)是BCD碼;③只能對累加器中的結(jié)果(BCD碼)進(jìn)行調(diào)整。

3.3.3邏輯操作指令主要用于對2個(gè)操作數(shù)按位進(jìn)行邏輯操作,結(jié)果送到A或直接尋址單元。

主要操作

與、或、異或、移位、取反、清零等。

對標(biāo)志位的影響

除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。3.3.3邏輯操作指令

1.簡單操作指令CLRA;“0”→A。1字節(jié)指令

2.累加器A取反CPLA;(A)→A。1字節(jié)指令

對累加器A中的內(nèi)容逐位取反。例:設(shè)(A)=3AH,CPLA;

00111010B→11000101B,即(A)=0C5H

3.3.3邏輯操作指令2.移位指令①累加器A循環(huán)左移指令RLA;1字節(jié)指令

例:設(shè)(A)=6CH=01101100B

執(zhí)行指令:RLA(A)=11011000B=0D8H②帶進(jìn)位循環(huán)左移指令RLCA;

1字節(jié)指令

例:設(shè)(A)=6CH=01101100B,(CY)=1

執(zhí)行指令:RLCA(A)=11011001B=0D9H

?對RL指令, “RL”相當(dāng)于乘以2

?對RLC指令,在CY=0時(shí)“RLC”相當(dāng)于乘以23.3.3邏輯操作指令③累加器A循環(huán)右移指令RRA;1字節(jié)指令

例:設(shè)(A)=6CH=01101100B

執(zhí)行指令:RRA

溫馨提示

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

評論

0/150

提交評論