第三章-單片機(jī)的指令系統(tǒng)_第1頁
第三章-單片機(jī)的指令系統(tǒng)_第2頁
第三章-單片機(jī)的指令系統(tǒng)_第3頁
第三章-單片機(jī)的指令系統(tǒng)_第4頁
第三章-單片機(jī)的指令系統(tǒng)_第5頁
已閱讀5頁,還剩112頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章MCS-51指令系統(tǒng)3.1指令格式3.2尋址方式3.4算術(shù)運(yùn)算指令3.5邏輯運(yùn)算指令3.3數(shù)據(jù)傳送指令3.6控制轉(zhuǎn)移指令本章教學(xué)內(nèi)容(1)指令格式(2)尋址方式(3)數(shù)據(jù)傳送指令(4)算術(shù)指令(5)邏輯指令(6)轉(zhuǎn)移指令(7)調(diào)用子程序及返回、位操作指令基本要求熟悉單片機(jī)指令格式和尋址方式掌握數(shù)據(jù)傳送指令、算術(shù)指令、邏輯指令和轉(zhuǎn)移指令掌握調(diào)用子程序及返回指令、位操作指令機(jī)器語言、匯編語言和高級(jí)語言用于程序設(shè)計(jì)的語言基本上分為3種:機(jī)器語言、匯編語言和高級(jí)語言。

1.機(jī)器語言:二進(jìn)制代碼表示指令、數(shù)字和符號(hào)簡稱為機(jī)器語言,機(jī)器識(shí)別、分析和執(zhí)行。2.匯編語言:描述計(jì)算機(jī)功能及尋址方式的英文助記符表示指令稱為符號(hào)語言或匯編語言。將匯編語言程序轉(zhuǎn)換成為二進(jìn)制代碼表示的機(jī)器語言的程序稱為匯編程序。經(jīng)匯編程序“匯編(翻譯)”得到的機(jī)器語言程序稱目標(biāo)程序,原匯編語言程序稱源程序。匯編語言和機(jī)器語言都脫離不開具體機(jī)器的硬件,均是面向“機(jī)器”的語言,缺乏通用性。3.高級(jí)語言不受具體機(jī)器的限制,使用了許多數(shù)學(xué)公式和數(shù)學(xué)計(jì)算上的習(xí)慣用語,非常擅長于科學(xué)計(jì)算。常用的如BASIC、FORTRAN以及C語言等。使用C語言(C51)語言來進(jìn)行MCS-51的應(yīng)用程序設(shè)計(jì)。

3-1匯編指令格式一、

兩種基本類型:指令語句和偽指令語句(1)指令語句每一條指令語句在匯編時(shí)都產(chǎn)生一個(gè)機(jī)器代碼(2)偽指令語句

在匯編時(shí)沒有機(jī)器代碼與之對(duì)應(yīng)。

[標(biāo)號(hào):]操作碼[操作數(shù)1],[操作數(shù)2][;注釋]例3-1LOOP:MOVA,#40H;40H->A

1.標(biāo)號(hào):是語句所在地址的標(biāo)志符號(hào),子程序調(diào)用、轉(zhuǎn)移轉(zhuǎn)入和調(diào)試。(1)以字母開始,跟1~8個(gè)字母、數(shù)字或“_”。(2)惟一性。(3)不能使用匯編保留字。2.操作碼:2~5個(gè)字母。唯一不能缺。3.操作數(shù):有單、雙、三和無操作數(shù)三種。(1)十六進(jìn)制、二進(jìn)制和十進(jìn)制形式的操作數(shù)(2)工作寄存器和特殊功能寄存器的表示采用代號(hào)或地址表示。A(或Acc)也可用0E0H。(3)美元符號(hào)$用于表示該轉(zhuǎn)移指令操作碼所在的地址。

例2HERE:SJMPHERE可寫為:SJMP$

JNBF0,$與如下指令是等價(jià)的:

HERE:JNBF0,HERE

再如:

4.注釋字段

3.1.3

偽指令

向匯編程序發(fā)出的指示信息,告訴它如何完成匯編工作,匯編時(shí)不產(chǎn)生機(jī)器碼.1.定位偽指令:ORGm機(jī)器指令在程序存儲(chǔ)器中的16位地址。

例3-3

ORG0000H START:SJMP MAIN… ORG 0030HMAIN: MOV SP,#30H地址必須由小到大排列,地址不能交叉、重疊。2.結(jié)束偽指令:END;唯一

3.定義字節(jié)偽指令:DBX1,X2,…Xn在程序存儲(chǔ)器的連續(xù)單元中定義字節(jié)數(shù)據(jù)(常數(shù)表)。

例3-4

ORG 7F00HTAB:DB 01110010B,16H,45,‘9’,‘A’匯編后存貯單元內(nèi)容為:(7F00H)=72H (7F01H)=16H (7F02H)=2DH(7F03H)=39H(7F04H)=41H4.定義字偽指令:DWY1,Y2,…,Yn

定義16位地址表(高位在前,低位在后);ORG 0F00HTAB:DW 1234H,45H,161匯編后存貯單元內(nèi)容為:(0F00H)=12H (0F01H)=34H (0F02H)=00H(0F03H)=45H(7F04H)=00H(7F05H)=0A1H

5.定義空間偽指令:DS 表達(dá)式

例3-6

ORG 0F00H DS 10H DB 20H,40H

匯編后,得(0F10H)=20H,(0F11H)=40H。DB、DW、DS只對(duì)程序存貯器起作用。6.等值偽指令:字符名EQU數(shù)據(jù)或匯編符

數(shù)據(jù)或匯編符賦給字符名;先賦后用;例3-7

ORG 8500H AA EQU R1 A10 EQU 10H DELAY EQU 87E6H MOV R0,A10 ;R0←(10H)MOV A,AA ;A←(R1)LCALL DELAY;調(diào)起始地址87E6H的END子程序

7.?dāng)?shù)據(jù)地址賦值偽指令:

字符名DATA表達(dá)式;不可為匯編符

FIRSTDATA22HSECONDDATA21H8.位地址賦值偽指令:

字符名BIT

位地址

A1BIT

ACC.1USERBITPSW.53-2指令尋址方式(共7種尋址方式)尋找操作數(shù)的方法叫尋址方式。1.立即尋址方式指令中直接給出操作數(shù),前面加前綴“#”例如:MOVA,#40H

MOVDPTR,#1234H2.寄存器尋址方式

操作數(shù)在寄存器中

MOVA,Rn

;(Rn)→A,n=0~7

表示把寄存器Rn的內(nèi)容傳送給累加器A。尋址范圍:(1)4組通用工作寄存區(qū)共32個(gè)工作寄存器。(2)部分特殊功能寄存器,例如A以及數(shù)據(jù)指針寄存器DPTR和C等。例:CLRAINCDPTRMOVR5,#50HINCR0;3.直接尋址:以單元地址的形式給出操作數(shù)1)SFR(只能用直接尋址)以單元地址或寄存器符號(hào)的形式給出;MOV90H,#40H等價(jià)于MOVP1,#40H2)內(nèi)部RAM的低128字節(jié)(有高128字節(jié)的單片機(jī),只能用寄存器間址);

MOVR0,#90HMOV@R0,#40H

MOVA,3AH4.寄存器間接尋址

寄存器中存放操作數(shù)的地址,加前綴標(biāo)志“@”

例如:MOVA,@Ri

;i=0或1;尋址范圍:(1)訪問內(nèi)部RAM低128個(gè)單元,其通用形式為@RiMOVA,@R0;p34(2)對(duì)片外數(shù)據(jù)存儲(chǔ)器的64K字節(jié)的間接尋址,例如: MOVXA,@DPTR(3)提供外部數(shù)據(jù)存儲(chǔ)器低8位地址例如:MOVXA,@R1;A←外部RAM(P2R1)(4)堆棧區(qū)堆棧操作指令PUSH(壓棧)和POP(出棧)使用堆棧指針(SP)作間址寄存器ANLA,@R1R1寄存器的內(nèi)容是60H5.基址寄存器加變址寄存器間址尋址以DPTR或PC為基址,A做變址,以兩者內(nèi)容相加,形成16位程序存儲(chǔ)器地址作為操作數(shù)地址。例如:

MOVCA,@A+DPTR(A)=54H,(DPTR)=1256H指令執(zhí)行的結(jié)果是把程序存儲(chǔ)器12AAH單元的內(nèi)容傳送給A。圖3–6變址尋址示意圖

(A)=54H,(DPTR)=1256H

特點(diǎn):⑴變址尋址方式只能對(duì)程序存儲(chǔ)器進(jìn)行尋址,⑵變址尋址指令只有三條程序存儲(chǔ)器讀指令MOVCA,@A+DPTR MOVCA,@A+PC無條件轉(zhuǎn)移指令JMP@A+DPTR⑶這三條指令都是單字節(jié)指令。⑷變址尋址方式用于查表操作。6.位尋址方式:指令給出位地址例如: MOVC,40H

尋址范圍包括:(1)片內(nèi)RAM中的位尋址區(qū)字節(jié)地址20H~2FH,位地址是00H~7FH。例如MOVC,2BH;25H.3(2)可位尋址的特殊功能寄存器位可供位尋址的SFR有11個(gè),有尋址位83位。可尋址位在指令中表示方法1)直接使用位尋址空間的位地址MOVC,00H2)采用第幾字節(jié)單元第幾位的表示法MOVC,20H.03)SFR采用寄存器名加位數(shù)

MOVC,PSW.54)SFR中某些可尋址位具有位名稱

MOVC,F05)經(jīng)偽指令定義過的字符名稱

USERBITPSW.5MOVC,USER7.相對(duì)尋址方式

例:1005HSJMP 80H ;相對(duì)轉(zhuǎn)移以PC作基地址,加上偏移量,所得結(jié)果作為轉(zhuǎn)移地址送PC。目的地址=轉(zhuǎn)移指令所在地址+轉(zhuǎn)移指令字節(jié)數(shù)+rel偏移量在-128~+127之間,是一帶符號(hào)的8位二進(jìn)制數(shù)補(bǔ)碼數(shù)。則轉(zhuǎn)移地址是0F87H

例如:JC80H若C為0,PC內(nèi)容不變,不轉(zhuǎn)移;若C為1,PC當(dāng)前值為基地址,加80H作為目的地址。指令操作碼在1000H單元,偏移量在1001H單元。執(zhí)行該指令,PC指向1002H(即當(dāng)前值)

3.3MCS-51指令系統(tǒng)分類介紹111條指令,按功能分類,分5大類:(1)數(shù)據(jù)傳送類(28條)

(2)算術(shù)操作類(24條)(3)邏輯運(yùn)算類(25條)

(4)控制轉(zhuǎn)移類(17條)

(5)位操作類(17條)指令中符號(hào)的意義:Rn

當(dāng)前寄存器區(qū)8個(gè)工作寄存器R0~R7(n=0~7)。Ri

當(dāng)前寄存器區(qū)可作間接尋址的R0、R1(i=0,1)。Direct

直接地址,即8位內(nèi)部RAM單元或SFR地址。#data

8位立即數(shù)。#data1616位立即數(shù)。rel

相對(duì)轉(zhuǎn)移指令偏移量,為8位帶符號(hào)補(bǔ)碼數(shù)DPTR

數(shù)據(jù)指針,可用作16位的數(shù)據(jù)地址寄存器。bit

內(nèi)部RAM或特殊功能寄存器中的直接尋址位。C(或Cy)

進(jìn)位標(biāo)志位或位處理機(jī)中的累加器。addr11

11位目的地址addr16

16位目的地址@間接尋址寄存器前綴,如@Ri,@A+DPTR(X)X中的內(nèi)容。3.3.1數(shù)據(jù)傳送類指令

使用最頻繁的一類指令,通用格式:

MOV<目的操作數(shù)>,<源操作數(shù)>屬“復(fù)制”性質(zhì),而不是“搬家”不影響標(biāo)志位Cy、Ac和OV,但根據(jù)A影響標(biāo)志P。說明:

1.一條指令中不能同時(shí)出現(xiàn)兩個(gè)工作寄存器,工作寄存器范圍R0~R7;

非法指令: MOVR1,R2

MOVR2,@R02.@Ri間址寄存器只能使用R0、R1。

非法指令:MOVA,@R23.SFR區(qū)只能直接尋址,不能寄存器間址。

非法指令:MOVR0,#80H

MOVA,@R04.目的操作數(shù)不能采用立即尋址非法指令:

MOV#30H,40H圖3–7數(shù)據(jù)傳送指令示意圖

1.以累加器為目的操作數(shù)的指令MOVA,#data;#data→AMOVA,direct;direct→AMOVA,Rn;Rn→A,n=0~7MOVA,@Ri;(Ri)→A,i=0,1例如:MOVA,#78H;78H→A,立即尋址MOVA,70H;70H→A,直接尋址MOVA,R6;R6→A,寄存器尋址

MOVA,@R0;(R0)→A,間接尋址

2.以Rn為目的操作數(shù)的指令

MOVRn,#data;#data→Rn,n=0~7MOVRn,direct;direct→Rn,n=0~7MOVRn,A;A→Rn,n=0~73.以直接地址direct為目的操作數(shù)的指令

MOV direct,#data;#data→direct

MOVdirect1,direct2;MOVdirect,A;A→directMOVdirect,Rn;Rn→direct,n=0~7MOVdirect,@Ri;(Ri)→direct

4.以寄存器間接地址為目的操作數(shù)的指令MOV@Ri,#data;#data→(Ri)MOV@Ri,direct;direct→(Ri)MOV@Ri,A;A→(Ri),i=0,15.16位數(shù)傳送指令

MOVDPTR,#data16;#data16→DPTR唯一的16位數(shù)據(jù)的傳送指令,立即數(shù)的高8位送入DPH,立即數(shù)的低8位送入DPL。6.堆棧操作指令

堆棧指針SP指出堆棧的棧頂位置。(1)進(jìn)棧指令

PUSHdirect例:SP=60H,A=30H,B=70H時(shí),

PUSHACC ;(SP)+1=61H→SP,A→61H

PUSHB ;(SP)+1=62H→SP,B→62H

結(jié)果:61H=30H,62H=70H,SP=62H(2)出棧指令

POPdirect例如:

當(dāng)SP=62H,62H=70H,61H=30H,

執(zhí)行:

POPDPH;(SP)→DPH,SP-1→SPPOPDPL;(SP)→DPL,(SP)-1→SP

結(jié)果:DPTR=7030H,SP=60H7.查表指令

共兩條,用于讀程序存儲(chǔ)器中的數(shù)據(jù)表格,采用基址寄存器加變址寄存器間接尋址方式。(1)MOVCA,@A+PC

PC作基址,A為無符號(hào)整數(shù)和PC中指令地址相加得到地址的內(nèi)容送到A。注意:PSEN信號(hào)有效。(2)MOVCA,@A+DPTRDPTR作基址,A作為無符號(hào)數(shù)和DPTR相加得到地址單元內(nèi)容送到A.0F00HMOVA,#50H0F02HMOVCA,@A+PC…0F50HDB3FH,7BH,4DH,0FF,0EFH結(jié)果:A0FFH缺點(diǎn):表格只能存放在該條查表指令后面的256個(gè)字節(jié)單元之內(nèi).例如

DPTR=8100HA=40H執(zhí)行指令

MOVCA,@A+DPTR表格大小和位置可在64K程序存儲(chǔ)器中任意。例3:求平方數(shù)(遠(yuǎn)程查表法)MOVDPTR,#TABLE ;指向表首址

MOVCA,@A+DPTR ;查表得到平方數(shù)

MOV20H,A ;存平方數(shù)

HERE:SJMPHERETABLE∶DB00H,01H,04H,09H;平方表DB16H,25H,36HDB49H,64H,81H例4:求平方數(shù)(近程查表)ADDA,#rel

;修正偏移量MOVCA,@A+PC ;查表得到平方數(shù)MOV20H,A ;存平方數(shù)HERE∶SJMPHERETABLE∶DB00H,01H,04H,09H,16H; DB25H,36H,49H,64H,81H 注∶rel=TABLE-(查表指令地址+1);MOVC指令為單字節(jié)。8.累加器A與外部數(shù)據(jù)存儲(chǔ)器傳送指令MOVXA,@DPTR;(DPTR)→A,讀外部RAM/IOMOVXA,@Ri;(P2Ri)→A,讀外部RAM/IOMOVX@DPTR,A;A→(DPTR),寫外部RAM/IOMOVX@Ri,A;A→(P2Ri),寫外部RAM/IO注意:RD或WR信號(hào)有效。采用DPTR間接尋址,高8位地址(DPH)由P2口輸出,低8位地址(DPL)由P0口輸出。采用Ri(i=0,1)間接尋址,提供外部數(shù)據(jù)存儲(chǔ)器低8位地址由P0口輸出。例:片外數(shù)據(jù)存儲(chǔ)器傳送(2000H)?(2100H)。

MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A

;DPTR=2000H ;A=X ;DPTR=2100H ;(2100H)=X片外數(shù)據(jù)存儲(chǔ)器不能直接尋址。非法指令:

MOVXA,2000HMOVX2100H,2000H例:將內(nèi)部RAM80H單元內(nèi)容送外部RAM70H單元MOVR0,#80HMOVA,@R0MOVDPTR,#70HMOVX@DPTR,A寄存器間接尋址寄存器間接尋址例如:A=30H,執(zhí)行地址1000H處的指令

1000H:MOVCA,@A+PC

本指令占用一個(gè)字節(jié),執(zhí)行結(jié)果將程序存儲(chǔ)器中1031H的內(nèi)容送入A。9.字節(jié)交換指令

XCHA,direct

XCHA,RnXCHA,@Ri例如:A=80H,R7=08H,40H=F0HR0=30H,30H=OFH執(zhí)行下列指令:XCHA,R7;A與R7互換

XCHA,40H;A與40H互換

XCHA,@R0;A與(R0)互換結(jié)果:A=0FH,R7=80H,40H=08H,30H=F0H10.半字節(jié)交換指令

XCHDA,@RiSWAPA

累加器的低4位與內(nèi)部RAM低4位交換。例如:

R0=60H,(60H)=3EH,A=59H執(zhí)行完XCHDA,@RO

指令,則A=5EH,60H=39H。比較下列指令1)MOVA,30H;MOVA,#30H2)MOV90H,#40HMOVP1,#40HMOVR0,#90HMOV@R0,#40H3)MOVA,60H;字節(jié)數(shù)2;1個(gè)機(jī)器周期MOV0E0H,60H;字節(jié)數(shù)3,2個(gè)機(jī)器周期MOV09H,#40H;字節(jié)數(shù)3,2個(gè)機(jī)器周期MOVR1,#40H;字節(jié)數(shù)2;1個(gè)機(jī)器周期結(jié)論:用寄存器尋址可提高存儲(chǔ)效率和執(zhí)行速度。內(nèi)部RAM高128B必須間接尋址SFR必須直接尋址3.3.2算術(shù)操作類指令單字節(jié)的加、減、乘、除法指令,是針對(duì)8位二進(jìn)制無符號(hào)數(shù)。執(zhí)行的結(jié)果對(duì)Cy、Ac、OV三種標(biāo)志位有影響。但增1和減1指令不影響上述標(biāo)志。助記符為:ADD、ADDC、INC、DA、SUBB、DEC、MUL、DIV等8種。

6).PSW程序狀態(tài)字:8位,D0H

CY:進(jìn)位標(biāo)志。有進(jìn)位/借位時(shí)CY=1,否則CY=0;AC:半進(jìn)位標(biāo)志。當(dāng)D3位向D4位產(chǎn)生進(jìn)位/借位時(shí)AC=1,常用于十進(jìn)制調(diào)整運(yùn)算中;F0:用戶設(shè)定的標(biāo)志位,可置位/復(fù)位,可供測(cè)試。RS1、RS0:四個(gè)通用寄存器組的選擇位,該兩位的四種組合狀態(tài)用來選擇0~3寄存器組。OV:溢出標(biāo)志。當(dāng)帶符號(hào)數(shù)運(yùn)算結(jié)果超出-128~+127范圍時(shí)OV=1,否則OV=0。當(dāng)無符號(hào)數(shù)乘法結(jié)果超過255時(shí),或當(dāng)無符號(hào)數(shù)除法的除數(shù)為0時(shí),OV=1。P:奇偶校驗(yàn)標(biāo)志。每條指令執(zhí)行完,若A中“1”的個(gè)數(shù)為奇數(shù)時(shí)P=1,否則P=0,即奇校驗(yàn)方式。1.加法指令

共有4條加法運(yùn)算指令:

ADDA,#data;A+#data→AADDA,direct;A+direct→A

ADDA,Rn;A+Rn→A,n=0~7ADDA,@Ri;A+(Ri)→A,i=0,1

影響標(biāo)志位AC、CY、OV、P。和第3位有進(jìn)位AC=1;和第7位有進(jìn)位CY=1。和第7位與第6位進(jìn)位異或確定OV。(OV)=1表示兩個(gè)正數(shù)相加,和為負(fù)數(shù);或兩個(gè)負(fù)數(shù)相加而和為正數(shù)的錯(cuò)誤結(jié)果。

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

執(zhí)行指令:ADDA,R011000011B

+10101010B01101101B(A)=6DH,(CY)=1,(OV)=1,(AC)=0。P=1

2.帶進(jìn)位加法指令標(biāo)志位Cy參加運(yùn)算,因此是三個(gè)數(shù)相加。共4條:

ADDC A,#data ;A+#data+C→A

ADDC A,direct ;A+direct+C→A

ADDC A,Rn ;A+Rn+C→A,n=0~7ADDC A,@Ri ;A+(Ri)+C→A,i=0,1

例:A=85H,(20H)=FFH,Cy=1,執(zhí)行指令:

ADDCA,20H結(jié)果為:A=85H,Cy=1,Ac=1,OV=0,P=13.增1指令

5條:INCAINCRn;n=0~7 INCdirectINC@Ri;i=0,1INCDPTR不影響PSW中的任何標(biāo)志。例:(R0)=7EH,(7EH)=FFH.(7FH)=40H。INC @R0;FFH+1=00H仍存入7EH單元INCR0 ;7EH+1=7FH存入(R0)INC @R0 ;40H+1=41H存入(7FH)(R0)=7FH,(7EH)=00H.(7FH)=41H4.十進(jìn)制調(diào)整指令用于對(duì)BCD碼十進(jìn)制數(shù)加法運(yùn)算結(jié)果的內(nèi)容修正。

指令格式:DAA兩個(gè)壓縮BCD碼按二進(jìn)制相加之后,必須經(jīng)本指令的調(diào)整,才能得到正確的BCD碼的和數(shù)。例如:(a)3+6=90011+0110=1001運(yùn)算結(jié)果正確(b)7+8=150111+1000=1111運(yùn)算結(jié)果不正確(c)9+8=171001+1000=0001C=1結(jié)果不正確十進(jìn)制調(diào)整的方法:累加器低(高)4位大于9或Ac=1(Cy=1),則低(高)

4位加6修正。具體是通過執(zhí)行指令:DAA來自動(dòng)實(shí)現(xiàn)的。例

A=56H,R5=67H,把它們看作為兩個(gè)壓縮的BCD數(shù),進(jìn)行BCD數(shù)的加法。執(zhí)行指令:

ADDA,R5;A=BDH,Cy=0DAA

結(jié)果為:A=23H,Cy=1

可見,56+67=123,結(jié)果是正確的.例7:二個(gè)多字節(jié)無符號(hào)數(shù)相加兩個(gè)四位BCD碼分別存在內(nèi)部RAM50H、51H和60H、61H單元中,求兩個(gè)數(shù)之和,存入內(nèi)部40H、41H。MOVR0,#50H ;被加數(shù)首址MOVR1,#60H ;加數(shù)首址MOVA,@R0 ;取被加數(shù)ADDA,@R1 ;與加數(shù)相加DAA ;二-十進(jìn)制調(diào)整MOV40H,A ;存和

INCR0 ;高位相加INCR1MOVA,@R0ADDCA,@R1DAAMOV41H,A

5.帶借位的減法指令

SUBBA,#data;A-#data-Cy→A

SUBBA,direct;A-direct-Cy→ASUBBA,Rn;A-Rn-Cy→A,n=0~7SUBBA,@Ri;A-(Ri)-Cy→A,i=0,1位7借位置“1”Cy,位3借位置“1”Ac,位6位7借位情況則置“1”O(jiān)V。例

A=C9H,R2=54H,Cy=1,執(zhí)行指令:SUBBA,R2

結(jié)果:A=74H,Cy=0,Ac=0,OV=1

6.減1指令

4條指令:

DECA ;A-1→A DECRn

;Rn-1→Rn,n=0~7 DECdirect ;direct-1→direct DEC@Ri

;(Ri)-1→(Ri),i=0,1減1指令不影響標(biāo)志位。

7.乘法指令MULAB;A×B→BA功能:A和B兩個(gè)無符號(hào)8位二進(jìn)制數(shù)相乘,積低8位存于A,高8位存于B。積大于255,OV置位;CY總是清0。例:A=50H(80D),B=A0H(160D)。執(zhí)行指令:MULAB 即80×160=12800=3200HA=00H,B=32H,OV=1,CY=0。8.除法指令

DIVAB;A/B→A(商),余數(shù)→B

功能:A中無符號(hào)數(shù)除以B中無符號(hào)數(shù),商存A,余數(shù)存B,CY和OV置0。當(dāng)除數(shù)B=0時(shí),OV置1。例:A=FBH(251D),B=12H(18D)。執(zhí)行指令:DIVAB結(jié)果:A=0DH(商13),B=11H(余數(shù)I7),OV=0,CY=0。 例:碼制轉(zhuǎn)換。把A中無符號(hào)二進(jìn)制整數(shù)(00-FFH)轉(zhuǎn)換為三位壓縮BCD碼(0~255),并存入內(nèi)存30H和31H單元。BINBCD:MOVB,#100DIVAB;百位數(shù)在A,余數(shù)在B MOV30H,A ;百位數(shù)送30HMOVA,B MOVB,#0AHDIVAB;十位在A,個(gè)位數(shù)在B SWAPA;十位數(shù)放A的高四位

ADDA,B ;十位和個(gè)位組合后送31H MOV31H,A RET3.3.3邏輯運(yùn)算指令邏輯運(yùn)算類指令包括:與、或、異或、清除、求反、移位等操作。助記符有ANL、ORL、XRL、RL、RLC、RR、RRC、CPL、CLR等九種。只按位進(jìn)行邏輯運(yùn)算,結(jié)果不影響PSW中標(biāo)志位(RLC、RRC除外)。

1.簡單邏輯操作指令(1)CLRAA清“0”。不影響Cy、Ac、OV等標(biāo)志。(2)CPLAA內(nèi)容按位邏輯取反,不影響標(biāo)志。

2.左移指令

RLA3.帶進(jìn)位左移指令

RLCACy4.右移指令RRA5.帶進(jìn)位右移指令RRCA例:50H單元中有一個(gè)帶符號(hào)數(shù)X,求補(bǔ)。

MOVA,50HCPLAINCAMOV50H,ACy圖3–9循環(huán)移位指令示意圖例:設(shè)(A)=A6H(10100110),執(zhí)行RRA指令,結(jié)果=53H(01010011B)例:設(shè)(A)=B4H(10110100B),(CY)=1,執(zhí)行RRCA指令,結(jié)果:(A)=DAH(11011010B),(CY)=0例:設(shè)(A)=3AH(00111010B)執(zhí)行RLA,結(jié)果:(A)=74H(01110l00B)。例:設(shè)(A)=3AH(00111010B),(CY)=1,執(zhí)行RLCA指令,結(jié)果:(A)=75H(01110101B),(CY)=06.累加器半字節(jié)交換指令

SWAPA將累加器A的高半字節(jié)(Acc.7~Acc.4)和低半字節(jié)(Acc.3~Acc.0)互換。例

A=0C5H,執(zhí)行指令:

SWAPA

結(jié)果:A=5CH圖3–8半字節(jié)交換指令示意圖

7.邏輯與指令A(yù)NLA,#data;A∧#data→AANLA,direct;A∧direct→AANLA,Rn;A∧Rn→A,n=0~7ANLA,@Ri;A∧(Ri)→A,i=0~1ANLdirect,A;direct∧A→directANLdirect,#data;direct∧#data→direct邏輯“與”運(yùn)算指令用做清除或屏蔽某些位。例:設(shè)(A)=A3H(10100011B),

(R0)=AAH(10101010B)。執(zhí)行指令:ANLA,Rn執(zhí)行結(jié)果為(A)=A2H(10100010B)。例:設(shè)P1=FFH執(zhí)行指令:ANLP1,#0F0HP1=F0H,P1.7~P1.4位狀態(tài)不變,P1.3~P1.0位被清除。

8.邏輯或指令

ORLA,#data;A∨data→AORLA,direct;A∨direct→AORLA,Rn

;A∨Rn→A,n=0~7ORLA,@Ri

;A∨(Ri)→A,i=0,1ORLdirect,A;direct∨A→directORLdirect,#data;direct∨#data→direct指定位強(qiáng)迫置位。給某些位置1,合并二個(gè)數(shù)中“1”。

例:A=A3H(10100011B),

R0=45H(01000101B)。

指令:ORLA,R0

結(jié)果:(A)=E7H(11100111B)。

9.邏輯異或指令XRLA,#data;A⊕#data→A

XRLA,direct;A⊕direct→AXRLA,Rn;A⊕Rn→AXRLA,@Ri;A⊕(Ri)→A,i=0,1XRLdirect,A;direct⊕A→directXRLdirect,#data;direct⊕

#data→direct

用于對(duì)目的操作數(shù)的某些位取反,也可以判兩個(gè)數(shù)是否相等,若相等則結(jié)果為0。例:設(shè)(A)=A3H(10100011B),(R0)=45H(01000l0lB)。執(zhí)行指令為XRL A,R0 10100011

⊕ 01000101 11100110

執(zhí)行結(jié)果為(A)=E6H(111001l0B)。

例10:

數(shù)據(jù)的拆分與拼裝要求:從30H==x7x6x5x4x3x2x1x0取出高5位,從31H=y7y6y5y4y3y2y1y0取出低3位,拼裝后存40H=Y2Y1Y0X7X6X5X4X3 地址 機(jī)器碼ORG0000H0000E530MOVA,30H0002C4SWAPA;X3X2X1X0X7X6X5X4000323 RLA;X2X1X0X7X6X5X4X3左移了5位0004F540MOV40H,A0006 53401FANL40H,#00011111B0009 E531MOVA,31H000B 75F020MOVB,#20H000E A4 MULAB;Y2Y1Y000000左移了5位000F 54E0ANLA,#11100000B0011 4240 ORL40H,A0013 2113HERE:AJMPHERE注:實(shí)現(xiàn)左移5位,采用了兩種方法,即移位和乘法。3.3.4控制轉(zhuǎn)移類指令程序順序執(zhí)行由PC自動(dòng)加1來實(shí)現(xiàn),但執(zhí)行轉(zhuǎn)移類、調(diào)用子程序、中斷程序使PC轉(zhuǎn)移。8051控制轉(zhuǎn)移指令分為:無條件和條件轉(zhuǎn)移指令、循環(huán)轉(zhuǎn)移指令、子程序調(diào)用和返回指令及空操作指令等。但不包括布爾變量控制程序轉(zhuǎn)移指令。助記符:AJMP、LJMP、SJMP、JMP、JZ、JNZ、CJNE、DJNZ、ACALL、LCALL、RET、RETI、NOP等13種。

指令機(jī)器碼SJMPrel 80relAJMPaddr11 a10a9a800001a7~a0LJMPaddrl6 02addr15~8addr7~0JMP@A+DPTR 73功能是程序無條件地轉(zhuǎn)移到指定的目標(biāo)地址去執(zhí)行,不同的指令形成的目標(biāo)地址不同。1.無條件轉(zhuǎn)移指令

短轉(zhuǎn)移指令:SJMPrel

;當(dāng)前PC+rel→PCrel為8位帶符號(hào)數(shù)。10000000相對(duì)地址

指令可轉(zhuǎn)向指令前128B或指令后127B。rel=(目標(biāo)地址-當(dāng)前PC地址)的低八位

rel例1: 地址 源程序 1000HSJMP02 … 1004H …;轉(zhuǎn)移目的指令例2:LOOP: MOVA,R6

SJMPLOOP ┇匯編時(shí),由匯編程序自動(dòng)計(jì)算和填入偏移量。

CPU根據(jù)偏移量計(jì)算轉(zhuǎn)移的目的地址例3:在2100H地址上有SJMP指令:2100H SJMP 7FH當(dāng)前PC地址為2102H,偏移量rel=7FH2102H +007FH

2181H

例4:2100H SJMP 80H源地址2100H,當(dāng)前PC為2102H,偏移量rel=80H,執(zhí)行后,程序轉(zhuǎn)移至2082H去執(zhí)行。

2102H

+ FF80H 2082H例5:

HERE:SJMPHERE可寫為:SJMP$當(dāng)rel為FEH(-02)時(shí),SJMP實(shí)現(xiàn)原地轉(zhuǎn)圈。絕對(duì)轉(zhuǎn)移

AJMPaddrll2K字節(jié)范圍無條件跳轉(zhuǎn)指令,64K程序存儲(chǔ)器分為32個(gè)區(qū),每區(qū)2K字節(jié),目標(biāo)地址必須與AJMP下一指令地址高5位A15~A11相同。執(zhí)行指令時(shí),先PC加2,然后PC.15~PC.11保持不變,把a(bǔ)ddrll送入PC.10~PC.0,程序轉(zhuǎn)移到目標(biāo)地址。A10A9A800001A7A6A5A4A3A2A1A0例1:PC=0456H,標(biāo)號(hào)JMPADR為0123H。執(zhí)行指令∶AJMPJMPADR 機(jī)器碼為00100001

00100011執(zhí)行結(jié)果程序轉(zhuǎn)向?yàn)椋≒C)=0123H。例:0000H2111AJMP0111H ;轉(zhuǎn)移有效

07FEH8110AJMP0C10H;轉(zhuǎn)移有效

0100HAJMP0B11H;轉(zhuǎn)移無效思考:AJMP指令首地址為27FOH,能否轉(zhuǎn)移到2800H處?如果轉(zhuǎn)移到2001H處能否實(shí)現(xiàn)?長跳轉(zhuǎn)指令

LJMPaddr16無條件地轉(zhuǎn)向addr16指出目標(biāo)地址。可以在64K程序存儲(chǔ)器地址空間任何位置。例1:PC=0123H,標(biāo)號(hào)ADR單元地址為3456H。

LJMPADR

執(zhí)行結(jié)果為PC=3456H

間接轉(zhuǎn)移指令JMP @A+DPTR當(dāng)DPTR的值固定,給A賦不同值,即可實(shí)現(xiàn)程序的多分支轉(zhuǎn)移。如實(shí)現(xiàn)鍵盤譯碼散轉(zhuǎn)功能。

例1:設(shè)A=5,DPTR=4567H。

JMP@A+DPTR

執(zhí)行結(jié)果為: PC=05H+4567H=456CH

程序轉(zhuǎn)向456CH單元執(zhí)行。

例2:要求不同功能鍵執(zhí)行不同程序段。鍵值X已存入片內(nèi)RAM的40H單元中。KEY:MOVDPTR,#KTABMOVA,40HADDA,40H

JMP@A+DPTRKTAB:AJMPFUNC0

AJMPFUNC1 …FUNC0:… FUNC1:…例3:散轉(zhuǎn)程序設(shè)計(jì),根據(jù)A中的數(shù)值實(shí)現(xiàn)程序散轉(zhuǎn)MOVR1,A;(A)×3RL AADDA,R1MOVDPTR,#TABLE;散轉(zhuǎn)表首地址送DPTRJMP @A+DPTRTABLE:

LJMPPM0 ;轉(zhuǎn)程序PM0TABLE+3:LJMPPM1;轉(zhuǎn)程序PM1 ------PM0:-----LJMP是一個(gè)三字節(jié)指令,因此轉(zhuǎn)移指令入口地址相隔3個(gè)字節(jié),A中內(nèi)容需是3的倍數(shù)。

滿足規(guī)定的條件(如累加器內(nèi)容是否為零,兩個(gè)操作數(shù)是否相等)時(shí)才執(zhí)行轉(zhuǎn)移;否則程序順序執(zhí)行。

6條指令可分為判零轉(zhuǎn)移指令和比較轉(zhuǎn)移指令兩部分。3.5.2條件轉(zhuǎn)移指令2.條件轉(zhuǎn)移指令A(yù)為零或非零轉(zhuǎn)移JZrel;累加器為“0”,則轉(zhuǎn)移JNZrel;累加器非“0”,則轉(zhuǎn)移當(dāng)條件滿足時(shí),目標(biāo)地址為相對(duì)偏移量rel加到新PC.例:A=01H執(zhí)行程序

JZLABEL1

DECA JZLABEL2

LABEL1:------LABEL2:------比較不相等轉(zhuǎn)移指令

CJNEA,#data,rel

CJNEA,direct,rel CJNERn,#data,rel CJNE@Ri,#data,rel比較兩個(gè)操作數(shù)大小,值不相等則轉(zhuǎn)移。程序轉(zhuǎn)移的范圍是從(PC)+3為起始的+127~一128B的單元地址。根據(jù)第一、第二操作數(shù)借位關(guān)系置位Cy。10111rrr

#data

rel比較結(jié)果不改變兩操作數(shù)值,僅影響CY。若不等,程序轉(zhuǎn)移到(PC)十3加上8位偏移量(rel)所指向的目標(biāo)地址;若(操作數(shù)1)>(操作數(shù)2),清CY。

若(操作數(shù)1)<(操作數(shù)2),則置位CY。

值相等,程序繼續(xù)執(zhí)行。CJNERn,#data,rel指令的編碼為

減1不為0轉(zhuǎn)移指令

DJNZRn,rel ;n=0~7 DJNZdirect,rel

將源操作數(shù)(Rn或direct)減1,結(jié)果回送到Rn寄存器或direct中去。結(jié)果不為0則轉(zhuǎn)移。主要用于控制循環(huán)程序。例:從P1.7引腳輸出5個(gè)方波MOVR2,#10 ;5方波,10個(gè)狀態(tài)LOP:CPLP1.7

;P1.7變反DJNZR2,LOP

例12:將2000H單元開始的數(shù)據(jù)傳送到從3000H開始的單元中,數(shù)據(jù)長度在內(nèi)部RAM30H中。MOVDPTR,#2000H;源數(shù)據(jù)區(qū)首址PUSHDPL ;源數(shù)據(jù)區(qū)首址壓棧保護(hù)PUSHDPHMOVDPTR,#3000H;目的數(shù)據(jù)區(qū)首址MOVR6,DPL;目的數(shù)據(jù)區(qū)首址存入寄存器MOVR7,DPHLP:POPDPH ;取數(shù)據(jù)區(qū)地址指針POPDPL

MOVXA,@DPTR;取源數(shù)INCDPTRPUSHDPLPUSHDPHMOVDPL,R6;取目的數(shù)據(jù)區(qū)地址指針MOVDPH,R7MOVX@DPTR,A;存入目的數(shù)據(jù)區(qū)INCDPTRMOVR6,DPLMOVR7,DPHDJNZ30H,LP;若數(shù)據(jù)塊未移完,則繼續(xù)

3.3.5調(diào)用子程序指令及返回指令(1)短調(diào)用指令A(yù)CALLaddrll(SP)+1→SPPCL→(SP)

,(SP)+1→SPPCH→(SP);

addrll

→PC0-10(2)長調(diào)用指令

LCALLaddr16(SP)+1→SPPCL→(SP)

,(SP)+1→SPPCH→(SP);addrl6→PC0-15所調(diào)用的子程序的首地址必須與ACALL后面指令的第一個(gè)字節(jié)在同一個(gè)2KB區(qū)域內(nèi)。例:設(shè)SP=60H,PC=0123H,子程序SUBR的首地址為0456H。

執(zhí)行ACALLSUBR

執(zhí)行結(jié)果為PC+2=0125H→(PC)將PC=0125H壓入堆棧:25H壓入(SP)+1=61H,01H壓入(SP)十l=62H,

addr11送PC10–0, PC=0456H(3)子程序的返回指令

RET (SP)→PCH,然后(SP)-1→SP

(SP)→PCL,然后(SP)-1→SP(4)中斷返回指令

RETI(SP)→PCH,然后(SP)-1→SP

(SP)→PCL,然后(SP)-1→SP用于中斷服務(wù)程序,清除被置“1”的MCS-51內(nèi)部中斷優(yōu)先級(jí)寄存器IP的優(yōu)先級(jí)狀態(tài)。CPU執(zhí)行RETI指令后至少再執(zhí)行一條指令,才能響應(yīng)新的中斷請(qǐng)求。利用這一特點(diǎn),可用來實(shí)現(xiàn)單片微機(jī)的單步操作。例:設(shè)SP=62H,中斷時(shí)斷點(diǎn)是0123H,RAM中的(62H)=0lH,(61H)=23H。執(zhí)行指令RETI結(jié)果為:(SP)=60H,PC=0123H

3.3.6位操作指令

8051內(nèi)部有一個(gè)布爾(位)處理器,具有較強(qiáng)的布爾變量處理能力。布爾處理器是一位微處理機(jī),以CY作位累加器,以內(nèi)部RAM20H至2FH單元及部分SFR為位存儲(chǔ)器,以P0、P1、P2、P3為位I/O。對(duì)位地址空間具有豐富的位操作指令,包括傳送、狀態(tài)控制、位邏輯操作及位條件轉(zhuǎn)移。助記符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC等11種。1.數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論