單片機(jī)31教學(xué)講解課件_第1頁(yè)
單片機(jī)31教學(xué)講解課件_第2頁(yè)
單片機(jī)31教學(xué)講解課件_第3頁(yè)
單片機(jī)31教學(xué)講解課件_第4頁(yè)
單片機(jī)31教學(xué)講解課件_第5頁(yè)
已閱讀5頁(yè),還剩349頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章89C51單片機(jī)指令系統(tǒng)Exit§3.389C51單片機(jī)指令系統(tǒng)§3.1匯編語(yǔ)言§3.2尋址方式§3.4程序設(shè)計(jì)舉例第三章89C51單片機(jī)指令系統(tǒng)Exit§3.381指令學(xué)習(xí)要點(diǎn)了解指令的操作了解指令的尋址格式了解指令對(duì)程序狀態(tài)字的影響合理使用指令指令學(xué)習(xí)要點(diǎn)2§3.1匯編語(yǔ)言§3.1.1指令和程序設(shè)計(jì)語(yǔ)言§3.1.2指令格式BACK§3.1匯編語(yǔ)言§3.1.1指令和程序設(shè)計(jì)語(yǔ)3§3.1匯編語(yǔ)言計(jì)算機(jī)指令系統(tǒng)是一套控制計(jì)算機(jī)操作的編碼,稱為機(jī)器語(yǔ)言。計(jì)算機(jī)只能識(shí)別和執(zhí)行機(jī)器語(yǔ)言的指令。為了便于記憶和使用,通常用符號(hào)指令(即匯編語(yǔ)言)來(lái)描述計(jì)算機(jī)的指令系統(tǒng)。不同的計(jì)算機(jī)有不同的匯編語(yǔ)言。BACK§3.1匯編語(yǔ)言計(jì)算機(jī)指令系統(tǒng)是一套控制計(jì)算機(jī)操作的4§3.1.1指令和程序設(shè)計(jì)語(yǔ)言指令:

是CPU根據(jù)人的意圖來(lái)執(zhí)行某種操作的

命令。指令系統(tǒng):

一臺(tái)計(jì)算機(jī)所能執(zhí)行的全部指令的集合。要使計(jì)算機(jī)按照人的思維完成一項(xiàng)工作,就必須讓CPU按順序執(zhí)行各種操作。

即一步步地執(zhí)行一條條的指令?!?.1.1指令和程序設(shè)計(jì)語(yǔ)言指令:

是CPU根5§3.1.1指令和程序設(shè)計(jì)語(yǔ)言程序:

按人的要求編排的指令操作序列稱為

程序。

程序設(shè)計(jì):

編寫(xiě)程序的過(guò)程就叫作程序設(shè)計(jì)。§3.1.1指令和程序設(shè)計(jì)語(yǔ)言程序:

按人的要求編排的6§3.1.1指令和程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言是實(shí)現(xiàn)人機(jī)交換信息的基本工具,分為:

機(jī)器語(yǔ)言

匯編語(yǔ)言

高級(jí)語(yǔ)言§3.1.1指令和程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言是實(shí)現(xiàn)人機(jī)交換信7§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言:用二進(jìn)制編碼表示每條指令,是計(jì)算機(jī)能

直接識(shí)別和執(zhí)行的語(yǔ)言。用機(jī)器語(yǔ)言編寫(xiě)的程序稱為機(jī)器語(yǔ)言程序或指令程序(機(jī)器碼程序)。因?yàn)闄C(jī)器只能直接識(shí)別機(jī)器碼程序,所以又稱它為目標(biāo)程序。§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言:8§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言舉例:

要做“10+20”的加法,在MCS-51中可用機(jī)器碼指令編程:

0111010000001010把10放到累加器A中;

0010010000010100A加20,結(jié)果仍放在A中

為了便于書(shū)寫(xiě)和記憶,可采用十六進(jìn)制表示指令碼:740AH

2414H§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言舉例:

要做“109§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言特點(diǎn):

用機(jī)器語(yǔ)言編寫(xiě)程序不易記憶,不易

查錯(cuò),不易修改?!?.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言特點(diǎn):

用機(jī)器語(yǔ)10§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言:用助記符、符號(hào)和數(shù)字等來(lái)表示指令的程序設(shè)計(jì)語(yǔ)言。它與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的。它與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的。

§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言:11§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言舉例:

例如:“10+20”例子可寫(xiě)成:

匯編語(yǔ)言程序

機(jī)器語(yǔ)言程序

MOVA,#0AH

740AH

ADDA,#14H

2414H§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言舉例:

例如:“112§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言特點(diǎn):用與CPU的硬件結(jié)構(gòu)緊密相關(guān)。不同的CPU其匯編語(yǔ)言是不同的。匯編語(yǔ)言程序不能移植,使用不便。用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)必須了解所使用的CPU硬件的結(jié)的與性能,對(duì)程序設(shè)計(jì)人員有較高的要求?!?.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言特點(diǎn):13§3.1.1指令和程序設(shè)計(jì)語(yǔ)言高級(jí)語(yǔ)言:

脫離具體機(jī)器的語(yǔ)言?!?.1.1指令和程序設(shè)計(jì)語(yǔ)言高級(jí)語(yǔ)言:

脫離具體機(jī)14§3.1.2指令格式89C51匯編語(yǔ)言指令由

操作碼助記符字段和操作數(shù)字段兩部分組成。指令格式如下:

操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]

例如:

MOVA,#00H

§3.1.2指令格式89C51匯編語(yǔ)言指令由

操作碼15§3.1.2指令格式操作碼部分規(guī)定了指令所實(shí)現(xiàn)的操作功能,由2--5個(gè)英文字母表示。

例如,JB,

MOV,

DJNZ,

LCALL等?!?.1.2指令格式操作碼部分16§3.1.2指令格式操作數(shù)部分

指出了參與操作的數(shù)據(jù)來(lái)源和操作結(jié)果存放的目的單元。

操作數(shù)可以直接是一個(gè)數(shù)(立即數(shù)),或者是一個(gè)數(shù)據(jù)所在的空間地址,即在執(zhí)行指令時(shí)從指定的地址空間取出操作數(shù)。§3.1.2指令格式操作數(shù)部分

17§3.1.2指令格式操作碼和操作數(shù)都有對(duì)應(yīng)的二進(jìn)制代碼,指令代碼由若干字節(jié)組成。對(duì)于不同的指令,指令的字節(jié)數(shù)不同。

89C51指令系統(tǒng)中,有:

1、單字節(jié)指令

2、雙字節(jié)指令

3、三字節(jié)指令。

§3.1.2指令格式操作碼和操作數(shù)都有對(duì)應(yīng)的二進(jìn)制代181、單字節(jié)指令單字節(jié)指令中的8位二進(jìn)制代碼既包含操作碼的信息,也包含操作數(shù)的信息。

這種指令有兩種情況。1)指令碼中隱含著對(duì)某一種寄存器的操作2)由指令中的rrr三位的不同編碼指定某一

寄存器1、單字節(jié)指令單字節(jié)指令中的8位二進(jìn)制代碼既包含操作碼的信19101000111、單字節(jié)指令1)指令碼中隱含著對(duì)某一種寄存器的操作

INCDPTR

指令代碼:

A3H=101000111、單字節(jié)指令1)指令碼中隱含著對(duì)某一種寄存2011101rrr1、單字節(jié)指令2)由指令中的rrr三位的不同編碼指定某一

寄存器

MOVA,Rn

指令代碼:11101rrr1、單字節(jié)指令2)由指令中的r212、雙字節(jié)指令用一個(gè)字節(jié)表示操作碼,另一個(gè)字節(jié)表示操作數(shù)或操作數(shù)所在的地址。

格式為:操作碼立即數(shù)或地址2、雙字節(jié)指令用一個(gè)字節(jié)表示操作碼,另一個(gè)字節(jié)表示操作數(shù)或操223、三字節(jié)指令一個(gè)字節(jié)操作碼,兩個(gè)字節(jié)操作數(shù)。

格式為:操作碼立即數(shù)或地址立即數(shù)或地址3、三字節(jié)指令一個(gè)字節(jié)操作碼,兩個(gè)字節(jié)操作數(shù)。

操作碼立即數(shù)23§3.2

尋址方式§3.2.0尋址的概念§3.2.1尋址方式的種類§3.2.2尋址空間及符號(hào)注釋§3.2尋址方式§3.2.0尋址的概念24§3.2.0尋址的概念尋址:

就是尋找指令中操作數(shù)或操作數(shù)所在地址。尋址方式:

就是如何找到存放操作數(shù)的地址,把操作數(shù)提取出來(lái)的方法。尋址方式是計(jì)算機(jī)的重要性能指標(biāo)之一,也是匯編語(yǔ)言程序設(shè)計(jì)中最基本的內(nèi)容之一,必須十分熟悉,牢固掌握?!?.2.0尋址的概念尋址:

就是尋找指令中操作數(shù)或操作25§3.2.1尋址方式的種類1、寄存器尋址2、直接尋址3、立即數(shù)尋址4、寄存器間接尋址5、變址尋址6、相對(duì)尋址7、位尋址§3.2.1尋址方式的種類1、寄存器尋址261、寄存器尋址由指令指出寄存器組R0~R7中的某一個(gè)或其他寄存器(A,B,DPTR等)的內(nèi)容作為操作數(shù)。例如:

MOVA,R0;(R0)→AMOVP1,A;(A)→P1口ADDA,R0;(A)+(R0)→A1、寄存器尋址由指令指出寄存器組R0~R7中的某一個(gè)或其他寄272、直接尋址在指令中直接給出操作數(shù)所在存儲(chǔ)單元的地址。指令中操作數(shù)部分是操作數(shù)所在地址。例如:

MOVA,3AH;(3A)→AMOVA,P1;(P1口)→A或:MOVA,90H;90H是P1口的地址2、直接尋址在指令中直接給出操作數(shù)所在存儲(chǔ)單元的地址。指令中282、直接尋址直接尋址方式可訪問(wèn):

片內(nèi)RAM的128個(gè)單元、所有的SFR。

對(duì)于SFR,既可以使用它們的地址,也可以使用它們的名字。

直接尋址的地址占一字節(jié),所以,一條直接尋址方式的指令至少占內(nèi)存兩個(gè)單元。

2、直接尋址直接尋址方式可訪問(wèn):

片內(nèi)RAM的128個(gè)單元292、直接尋址注意下面指令的區(qū)別:

MOVA,20H

MOVC,20H2、直接尋址注意下面指令的區(qū)別:

MOVA,20H

M303、立即數(shù)尋址指令操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù),用“#”號(hào)表示,以區(qū)別直接地址。例如:

MOVA,3AH;(3AH)→AMOVA,#3AH;3AH→AMOVDPTR,#2000H;2000H→DPTR

;(DPH)=20H

;(DPL)=00H3、立即數(shù)尋址指令操作碼后面緊跟的是一字節(jié)或兩字節(jié)操作數(shù),用314、寄存器間接尋址

操作數(shù)的地址事先存放在某個(gè)寄存器中,寄存器間接尋址是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。89C51規(guī)定R0、R1為間接尋址寄存器,它可尋址內(nèi)部地址RAM低位的128B單元內(nèi)容。還可采用DPTR作為間接尋址寄存器,尋址外部數(shù)據(jù)存儲(chǔ)器的64KB空間。例如4、寄存器間接尋址操作數(shù)的地址事先存放在某個(gè)寄存器中,32例如:將片內(nèi)RAM65H單元內(nèi)容47H送A,可執(zhí)行指令“MOVA,@R0”。其中R0內(nèi)容為65H。如圖所示:65H47HR0A47H數(shù)據(jù)存儲(chǔ)器地址┋┋65H①②以指令中所指定的R0內(nèi)容(65H)為指針將片內(nèi)RAM65H單元內(nèi)容47H送A例如:將片內(nèi)RAM65H單元內(nèi)容47H送A,可執(zhí)行指令“M335、變址尋址(基址寄存器+變址寄存器間接尋址)以某個(gè)寄存器的內(nèi)容為基地址,在這個(gè)基地址的基礎(chǔ)上加上地址偏移量形成真正的操作數(shù)地址。89C51中沒(méi)有專門(mén)的變址寄存器。而是采用DPTR或PC為變址寄存器,A的內(nèi)容為地址偏移量。變址尋址只能訪問(wèn)程序存儲(chǔ)器,訪問(wèn)范圍為64KB。例如5、變址尋址(基址寄存器+變址寄存器間接尋址)以某個(gè)寄存器的34例如:MOVCA,@A+DPTR1EH0302HROMDPTRAA02F1H11H1EH+①②DPTR內(nèi)容與A的內(nèi)容之和為程序存儲(chǔ)器地址程序存儲(chǔ)器內(nèi)容送A例如:MOVCA,@A+DPTR1EH0302HROMD356、相對(duì)尋址

相對(duì)尋址只出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。以當(dāng)前的PC值加上指令中規(guī)定的偏移量rel而形成實(shí)際的轉(zhuǎn)移地址。當(dāng)前的PC值是指執(zhí)行完相對(duì)指令后的PC值;相對(duì)轉(zhuǎn)移指令操作碼所在地址稱為源地址;轉(zhuǎn)移后的地址稱為目的地址。6、相對(duì)尋址相對(duì)尋址只出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。366、相對(duì)尋址

目的地址=源地址+相對(duì)轉(zhuǎn)移指令字節(jié)數(shù)+relrel為補(bǔ)碼表示的有符號(hào)數(shù)。6、相對(duì)尋址目的地址=源地址+相對(duì)轉(zhuǎn)移指令字節(jié)數(shù)+rel377、位尋址采用位尋址方式的指令的操作數(shù)是8位二進(jìn)制數(shù)中的某一位,指令中給出的是位地址。位地址在指令中用bit表示。

例如:CLRbit;位地址的兩種表示方法:

直接使用位地址,如D3H;

直接用寄存器名字加位數(shù),如PSW.3。7、位尋址采用位尋址方式的指令的操作數(shù)是8位二進(jìn)制數(shù)中的某一387、位尋址位尋址空間:片內(nèi)RAM的20H-2FH的16個(gè)字節(jié)單元中的128位(位地址:00H~FFH)部分SFR(字節(jié)地址能被8整除的SFR)7、位尋址位尋址空間:39§3.2.2尋址空間及符號(hào)注釋1、尋址空間2、符號(hào)注釋§3.2.2尋址空間及符號(hào)注釋1、尋址空間401、尋址空間1、尋址空間412、符號(hào)注釋Rn(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指

令中。2、符號(hào)注釋Rn(n=0-7):當(dāng)前選中的工作寄存器組R0-422、符號(hào)注釋rel:補(bǔ)碼表示的8位地址偏移量。

范圍:-128~+127D。bit:片內(nèi)RAM或SFR的直接尋址位地址。@:間接寄存器的符號(hào)。/:位操作指令中對(duì)該位先取反再參與操作,不影響原值。(×):×中的內(nèi)容。((×)):×指出的地址單元中的內(nèi)容。→:指令操作流程方向。2、符號(hào)注釋rel:補(bǔ)碼表示的8位地址偏移量。

43§3.389C51單片機(jī)指令系統(tǒng)3.3.0緒3.3.1數(shù)據(jù)傳送指令3.3.2算術(shù)運(yùn)算指令3.3.3邏輯運(yùn)算及移位指令3.3.4控制程序轉(zhuǎn)移指令3.3.5位操作指令(布爾操作)§3.389C51單片機(jī)指令系統(tǒng)3.3.0緒443.3.0緒89C51指令系統(tǒng)由111條指令組成。單字節(jié)指令49條,雙字節(jié)指令45條,三字

節(jié)指令17條。單周期指令64條,雙周期45條,

只有乘、除指令為4個(gè)周期。3.3.0緒89C51指令系統(tǒng)由111條指令組成。453.3.0緒指令系統(tǒng)可分為五大類:

數(shù)據(jù)傳送指令:28條算術(shù)運(yùn)算指令:24條邏輯運(yùn)算及移位指令:25條控制轉(zhuǎn)移指令:17條位操作指令(布爾操作):17條3.3.0緒指令系統(tǒng)可分為五大類:

46§3.3.1數(shù)據(jù)傳送指令1.以累加器A為目的操作數(shù)的指令

(4條,即4種尋址方式)2.以寄存器Rn為目的操作數(shù)的指令(3條)3.以直接地址為目的操作數(shù)的指令(5條)4.以間接地址為目的操作數(shù)的指令(3條)最基本、最重要的操作。

§3.3.1數(shù)據(jù)傳送指令1.以累加器A為目的操作數(shù)的47§3.3.1數(shù)據(jù)傳送指令5.十六位數(shù)據(jù)傳送指令(1條)6.查表指令(2條)7.累加器A與片外RAM傳送指令(4條)8.棧操作指令(2條)9.交換指令(4條)§3.3.1數(shù)據(jù)傳送指令5.十六位數(shù)據(jù)傳送指令(1條481、以累加器A為目的操作數(shù)的指令(4條,即4種尋址方式)MOVA,RnMOVA,directMOVA,@RiMOVA,#data1、以累加器A為目的操作數(shù)的指令MOVA,Rn49例:(30H)=11H,(R1)=30HMOVA,#30H;(A)=30HMOVA,30H;(A)=11HMOVA,@R1;(A)=11HMOVA,R1;(A)=30H例:(30H)=11H,(R1)=30H50

2、以寄存器Rn為目的操作數(shù)的指令(3條)MOVRn,AMOVRn,directMOVRn,#data注意:

在8051指令系統(tǒng)中沒(méi)有

“MOVRn,Rn”傳送指令。2、以寄存器Rn為目的操作數(shù)的指令(3條)MOVRn51例如:(A)=78H,(R5)=47H,

(70H)=F2H,執(zhí)行指令:MOVR5,A ;(R5)=78HMOVR5,70H;(R5)=F2HMOVR5,#A3H;(R5)=A3H例如:(A)=78H,(R5)=47H,

(70H)=523、以直接地址為目的操作數(shù)的指令(5條)MOVdirect,AMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#data3、以直接地址為目的操作數(shù)的指令(5條)MOVdire53這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入由直接地址direct所指出的片內(nèi)存儲(chǔ)單元中。源操作數(shù)有寄存器尋址,直接尋址,寄存器間接尋址和立即尋址等方式。3、以直接地址為目的操作數(shù)的指令(5條)這組指令的功能是把源操作數(shù)所指定的內(nèi)容送入由直接地址dire544、以間接地址為目的操作數(shù)的指令(3條)MOV@Ri,AMOV@Ri,directMOV@Ri,#data(Ri)表示Ri中的內(nèi)容為指定的RAM單元。Ri為R0,R1

4、以間接地址為目的操作數(shù)的指令(3條)MOV@Ri,555、十六位數(shù)據(jù)傳送指令(1條)這條指令的功能是把16位常數(shù)送入DPTR。DPTR由DPH和DPL組成。MOVDPTR,#data165、十六位數(shù)據(jù)傳送指令(1條)這條指令的功能是把16位常數(shù)56例:MOVDPTR,#1000H

(DPTR)=1000H,

(DPH)=10H,(DPL)=00H

5、十六位數(shù)據(jù)傳送指令(1條)例:5、十六位數(shù)據(jù)傳送指令(1條)576、查表指令(2條)MOVCA,@A+DPTR;

先(PC)+1→PC,

后((A)+(DPTR))→A

(遠(yuǎn)程查表)MOVCA,@A+PC;

先(PC)+1→PC,

后((A)+(PC))→A

(近程查表)6、查表指令(2條)MOVCA,@A+DPTR;

58基地址寄存器+變址寄存器間接尋址@PC+A(程序存儲(chǔ)器0-64K)基地址寄存器+變址寄存器間接尋址@DPTR+A(程序存儲(chǔ)器0-64K)A寄存器程序存貯器傳送基地址寄存器+變址寄基地址寄存器+變址寄存A寄存器程序存貯器59例1:若初始ROM內(nèi)容為:

1010H02H1011H04H1012H06H1013H08H1000H74

0DMOVA,#0DH (A)=0DH1002H83MOVCA,@A+PC(PC)=1002+1=1003H(A)=((A)+(PC))==(0D+1003)=(1010H)(A)=02H1003HF8MOVR0,A(R0)=(A)=02H執(zhí)行程序:例1:若初始ROM內(nèi)容為:1010H02H1011H04H60

所以,最后結(jié)果為:

(A)=02(R0)=02(PC)=1004H所以,最后結(jié)果為:

(A)=02(R0)=61例2:若初始ROM內(nèi)容為:

7010H02H7011H04H7012H06H7013H08H執(zhí)行程序:例2:若初始ROM內(nèi)容為:7010H02H7011H04H621000HMOVA,#10H 1002HPUSHDPH1004HPUSHDPL1006HMOVDPTR,#7000H1009HMOVCA,@A+DPTR(10H+7000H)→A100AHPOPDPL100CHPOPDPH

所以,最后結(jié)果為:

(A)=02(PC)=100EH(DPTR)=原值1000HMOVA,#10H 1002HPUSHDP637、累加器A與片外RAM傳送指令(4條)MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A7、累加器A與片外RAM傳送指令(4條)MOVXA,64在8051指令系統(tǒng)中,CPU對(duì)片外RAM的訪問(wèn)只

能用寄存器間接尋址的方式,且僅有四條指令.第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ù)。上述四條指令的操作如圖7、累加器A與片外RAM傳送指令(4條)在8051指令系統(tǒng)中,CPU對(duì)片外RAM的訪問(wèn)只

能用65累加器寄存器間接尋址

@R1、@R0

(片外RAM0-255字節(jié))寄存器間接尋址@DPTR

(片外RAM0-64KB)外部數(shù)據(jù)存儲(chǔ)器傳送操作累加器寄存器間接尋址

@R1、@R0

(片外RAM0-25566MOVR1,#30H; (R1)=30H

MOVXA,@R1; (A)=02H

MOVR0,A ; (R0)=(A)=02H

MOVA,@R1 ; (A)=((R1))=01H

MOVR2,A ; (R2)=(A)=01H例:若:片內(nèi)RAM(30H)=01H,片外RAM(30H)=02H,執(zhí)行下面程序段后的結(jié)果如何。MOVR1,#30H; (R1)=30H

MOVX67

8、棧操作指令(2條)PUSHdirect;先(SP)+1→(SP)

后(direct)→((SP))

POPdirect;先((SP))→(direct)

后(SP)-1→(SP)8、棧操作指令(2條)PUSHdirect;68

8、棧操作指令(2條)片內(nèi)RAM128B單元中,可設(shè)定一個(gè)區(qū)域作為堆棧一般可設(shè)在30H--7FH單元中,棧頂由堆棧指針SP指出。89C51復(fù)位后,(SP)=07H,若要更改則需重新

給SP賦值。本操作不影響標(biāo)志位。堆棧中數(shù)據(jù)的壓入和彈出遵循“先進(jìn)后出”規(guī)則。8、棧操作指令(2條)片內(nèi)RAM128B單元中,可設(shè)定一69例:設(shè)(SP)=60H,(ACC)=40H,

(B)=80H執(zhí)行下面指令:

PUSHACC

PUSHB結(jié)果:(61H)=40H,(62H)=80H,

(SP)=62H例:設(shè)(SP)=60H,(ACC)=40H,

70例:設(shè)(SP)=62H,(61H)=40H,

(62H)=80H執(zhí)行下面指令:

POPDPH

POPDPL

結(jié)果:(DPTR)=8040H,(SP)=60H例:設(shè)(SP)=62H,(61H)=40H,

71例:例:72繼續(xù)上例:繼續(xù)上例:73

9、交換指令(4條)XCHA,RnXCHA,directXCHA,@Ri(1)字節(jié)交換指令將第二操作數(shù)所指定的工作寄存器Rn(R0~R7),直接尋址和間接尋址的單元內(nèi)容與累加器A中內(nèi)容互換.9、交換指令(4條)XCHA,Rn(1)字節(jié)交換指74

9、交換指令(4條)XCHDA,@Ri(2)半字節(jié)交換指令Ri間接尋址的單元內(nèi)容與累加器A中內(nèi)容的低4位互換,高4位內(nèi)容不變。該指令影響標(biāo)志位P。

9、交換指令(4條)XCHDA,@Ri(2)半字節(jié)75例:例:76例:設(shè)(A)=16H,(R0)=40H,(40H)=35H執(zhí)行下面指令:

XCHDA,@R0

結(jié)果:(A)=15H,(40H)=36HA:

00010110

(40H):00110101

00010101(15H)

00110110(36H)例:設(shè)(A)=16H,(R0)=40H,(40H)=35H77§3.3.2算術(shù)運(yùn)算指令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條)§3.3.2算術(shù)運(yùn)算指令1、不帶進(jìn)位加法指令(4條781、不帶進(jìn)位加法指令(4條)ADDA,Rn;(A)+(Rn)→AADDA,direct;(A)+(direct)→AADDA,@Ri;(A)+((Ri))→AADDA,#data;(A)+#data→A1、不帶進(jìn)位加法指令(4條)ADDA,Rn;791、不帶進(jìn)位加法指令(4條)這些指令是將工作寄存器、內(nèi)部RAM單元內(nèi)容或立即數(shù)的8位無(wú)符號(hào)二進(jìn)制數(shù)和累加器A中的數(shù)相加,所得的“和”存放于累加器A中。當(dāng)“和”的第3位或第7位有進(jìn)位時(shí),分別將AC,CY標(biāo)志位置1,否則為0。上述指令的執(zhí)行將影響標(biāo)志位AC,CY,OV,P。溢出標(biāo)志OV只有帶符號(hào)數(shù)運(yùn)算時(shí)才有用。1、不帶進(jìn)位加法指令(4條)這些指令是將工作寄存器、內(nèi)部RA80例:例:812、帶進(jìn)位加法指令(4條)ADDCA,Rn;(A)+CY+(Rn)→AADDCA,direct;(A)+CY+(direct)→AADDCA,@Ri;(A)+((Ri))+CY→AADDCA,#data;(A)+#data+CY→A2、帶進(jìn)位加法指令(4條)ADDCA,Rn;(A822、帶進(jìn)位加法指令(4條)這組指令的功能是同時(shí)把源操作數(shù)所指出的內(nèi)容和進(jìn)位標(biāo)志位CY都加到累加器A中,結(jié)果存放在A中,其余功能和ADD指令相同。當(dāng)運(yùn)算結(jié)果第3,7位產(chǎn)生進(jìn)位或溢出時(shí),分別置位AC,CY和OV標(biāo)志位。本指令的執(zhí)行將影響標(biāo)志位AC,CY,OV,P。本指令常用于多字節(jié)加法。2、帶進(jìn)位加法指令(4條)這組指令的功能是同時(shí)把源操作數(shù)所指83例:設(shè)(A)=0C3H,(R0)=0AAH, (CY)=1。

執(zhí)行指令“ADDCA,R0”

后的結(jié)果及標(biāo)志位如何?

例:設(shè)(A)=0C3H,(R0)=0AAH, (CY)=1。84單片機(jī)31教學(xué)講解課件85例:編程,將(30H),(31H)單元中的數(shù)與(40H),(41H)單元中的數(shù)相加,結(jié)果存于(30H),(31H)單元中。例:編程,將(30H),(31H)單元中的數(shù)與(40H863、帶借位減法指令(4條)SUBBA,Rn;(A)-CY-(Rn)→ASUBBA,direct;(A)-CY-(direct)→ASUBBA,@Ri;(A)-CY-((Ri))→ASUBBA,#data;(A)-CY-#data→A3、帶借位減法指令(4條)SUBBA,Rn;873、帶借位減法指令(4條)這組指令的功能是,從累加器A中減去源操作數(shù)所指出的內(nèi)容及進(jìn)位位CY的值,差保留在累加器A中。由于89C51指令系統(tǒng)中沒(méi)有不帶借值的減法指令,如需要的話,可以在“SUBB”指令前用“CLRC”指令將CY清0。兩個(gè)數(shù)相減,如果位7有借位,則CY置1,否則清0若位3有借位,則AC置1,否則清0。兩個(gè)帶符號(hào)數(shù)相減,還要考查OV標(biāo)志,若OV為l,表示差數(shù)溢出,即破壞了正確結(jié)果的符號(hào)位。3、帶借位減法指令(4條)這組指令的功能是,從累加器A中減88例:設(shè)(A)=0C9H,(R2)=54H,Cy=1。

執(zhí)行指令“SUBBA,R2”的結(jié)果如何?例:設(shè)(A)=0C9H,(R2)=54H,Cy=1。

執(zhí)行89

4、乘法指令(1條)指令的功能是,把累加器A和寄存器B中兩個(gè)8位無(wú)符號(hào)數(shù)相乘,所得16位積的低字節(jié)存放在A中,高字節(jié)存放在B中。若乘積大于0FFH,則OV置1,否則清0(即B的內(nèi)容為0)。CY總是被清0。

MULAB4、乘法指令(1條)指令的功能是,把累加器A和寄存器B90例:(A)=4EH,(B)=5DH,

執(zhí)行指令“MULAB”后結(jié)果如何?例:(A)=4EH,(B)=5DH,

執(zhí)行指915、除法指令(1條)DIVAB功能是進(jìn)行A除以B的運(yùn)算,A和B的內(nèi)容均為8

位無(wú)符號(hào)整數(shù)。指令操作后,整數(shù)商存于A中,余數(shù)存于B中,

CY和OV均被清0。若原(B)=00H,則結(jié)果無(wú)法確定,用OV=l表

示,而CY仍為0。5、除法指令(1條)DIVAB功能是進(jìn)行A除以B的運(yùn)算92單片機(jī)31教學(xué)講解課件93

6、加1指令(5條)INCA;(A)+1→AINCRnINCdirectINC@RiINCDPTR

6、加1指令(5條)INCA;94

6、加1指令(5條)指令功能是將操作數(shù)所指定的單元內(nèi)容加1.其操作不影響PSW。若原單元內(nèi)容為FFH,加1后溢出為00H,

也不會(huì)影響PSW標(biāo)志。6、加1指令(5條)指令功能是將操作數(shù)所指定的單元內(nèi)容加95單片機(jī)31教學(xué)講解課件96

7、減1指令(4條)DECA;(A)-1→ADECRnDECdirectDEC@Ri(沒(méi)有)DECDPTR

7、減1指令(4條)DECA;97

7、減1指令(4條)指令的功能是將操作數(shù)所指的單元內(nèi)容減1其操作不影響標(biāo)志位CY。

7、減1指令(4條)指令的功能是將操作數(shù)所指的單元內(nèi)容減988、十進(jìn)制調(diào)整指令(1條)調(diào)整累加器內(nèi)容為BCD碼。這條指令跟在ADD或ADDC指令后,將相加后存

放在累加器A中的結(jié)果進(jìn)行十進(jìn)制調(diào)整,完成十

進(jìn)制加法運(yùn)算功能。兩個(gè)壓縮型BCD碼按二進(jìn)制數(shù)相加后,必須經(jīng)本

指令調(diào)整才能得到壓縮型BCD碼的和的正確值。DAA8、十進(jìn)制調(diào)整指令(1條)調(diào)整累加器內(nèi)容為BCD碼。D998、十進(jìn)制調(diào)整指令(1條)若(A0~3)>9或AC=l,則(A0~3)+6→A0~3若(A4~7)>9或CY=l,則(A4~7)+6→A4~7。8、十進(jìn)制調(diào)整指令(1條)若(A0~3)>9或AC=l,1008、十進(jìn)制調(diào)整指令(1條)執(zhí)行DAA后,CPU根據(jù)累加器A的原始數(shù)值和

PSW的狀態(tài),由硬件自動(dòng)對(duì)累加器A進(jìn)行加06H,

60H或66H的操作。必須注意,本指令不能簡(jiǎn)單地把累加器A中的16進(jìn)

制數(shù)變換成BCD碼。也不能用于十進(jìn)制減法的調(diào)整。

8、十進(jìn)制調(diào)整指令(1條)執(zhí)行DAA后,CPU根據(jù)累加101例:

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

ADDCA,R3

DAA例:設(shè)累加器A內(nèi)容為:01010110B(56的BCD碼)102單片機(jī)31教學(xué)講解課件1033.3.3邏輯運(yùn)算及移位指令

1.累加器清零、取反指令(2條)

2.移位指令(4條)

3.累加器半字節(jié)交換指令(1條)

4.邏輯“與”指令(6條)

5.邏輯“或”指令(6條)

6.邏輯“異或”指令(6條)3.3.3邏輯運(yùn)算及移位指令1.累加器清零、取反指令(1041.累加器清零、取反指令(2條)CLRA;0→A,

清0累加器A,只影響標(biāo)志位P。CPLA;A→A

,

累加器A逐位取反,不影響標(biāo)志位。

1.累加器清零、取反指令(2條)CLRA;0→105例:設(shè)(A)=01010101B=55H,

執(zhí)行指令:

CPLA

結(jié)果:(A)=10101010B=0AAH例:設(shè)(A)=01010101B=55H,

執(zhí)行指令:

1062.移位指令(4條)RLA;累加器A循環(huán)左移RRA;累加器A循環(huán)右移RLCA;累加器A連同進(jìn)位位循環(huán)左移RRCA;累加器A連同進(jìn)位位循環(huán)右移

2.移位指令(4條)RLA;累加器A循107前兩條指令的功能分別是,將累加器A的內(nèi)容循環(huán)左

移或右移一位,后兩條指令的功能分別是,將累加器A的內(nèi)容連同進(jìn)

位位CY一起循環(huán)左移或右移一位。通常用"RLCA"指令將累加器A的內(nèi)容做乘2運(yùn)算。2.移位指令(4條)前兩條指令的功能分別是,將累加器A的內(nèi)容循環(huán)左

移或右1082.移位指令(4條)a7a0a7a0RLARRA2.移位指令(4條)a71092.移位指令(4條)RLCARRCAa7a0CYa7a0CY2.移位指令(4條)RLCARRCAa7110單片機(jī)31教學(xué)講解課件1113.累加器半字節(jié)交換指令(1條)

SWAPA指令功能:將累加器A的高低兩半字節(jié)交換。

例:(A)=FAH。執(zhí)行指令“SWAPA”

結(jié)果:為(A)=AFH"。

3.累加器半字節(jié)交換指令(1條)SWAPA指令功能:112

4.邏輯“與”指令(6條)ANLA,RnANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data4.邏輯“與”指令(6條)ANLA,Rn113這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存放在A中。后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進(jìn)行邏輯“與”,結(jié)果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫(xiě)”操作。

4.邏輯“與”指令(6條)這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按114例:設(shè)(A)=07H,(R0)=0FEH,執(zhí)行指令:

ANLA,R0結(jié)果:(A)=06H

00000111

(07H)

11111110

(FEH)

00000110

(06H)

4.邏輯“與”指令(6條)例:設(shè)(A)=07H,(R0)=0FEH,4.邏輯“與”115

5.邏輯“或”指令(6條)ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data5.邏輯“或”指令(6條)ORLA,Rn116這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進(jìn)行邏輯“或”,結(jié)果存放在A中。后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進(jìn)行邏輯“或”,結(jié)果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫(xiě)”操作。

5.邏輯“或”指令(6條)這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按117例:設(shè)(P1)=04H,(A)=33H,執(zhí)行指令:

ORLP1,A結(jié)果:(P1)=37H

00000100

(04H)

00110011

(33H)

00110111

(37H)

5.邏輯“或”指令(6條)例:設(shè)(P1)=04H,(A)=33H,5.邏輯“或”指118

6.邏輯“異或”指令(6條)XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data6.邏輯“異或”指令(6條)XRLA,Rn119這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按位進(jìn)行邏輯“異或”,結(jié)果存放在A中。后兩條指令是將直接地址單元中的內(nèi)容和操作數(shù)所指出的單元的內(nèi)容按位進(jìn)行邏輯“異或”,結(jié)果存入直接地址單元中。若直接地址正好是I/O端口,則為“讀——改——寫(xiě)”操作。

6.邏輯“異或”指令(6條)這組指令中前四條指令是將累加器A的內(nèi)容和操作數(shù)所指出的內(nèi)容按120例:設(shè)(A)=91H,(R3)=73H,執(zhí)行指令:

XRLA,R3結(jié)果:(A)=0E2H

10010001

(91H)

01110011

(73H)

11100010

(E2H)

6.邏輯“異或”指令(6條)例:設(shè)(A)=91H,(R3)=73H,6.邏輯“異或”121上述邏輯操作類指令操作均只影響標(biāo)志位P。

上述邏輯操作類指令操作122§3.3.4控制程序轉(zhuǎn)移類指令

1.無(wú)條件轉(zhuǎn)移指令(4條)2.空操作指令(1條)3.條件轉(zhuǎn)移指令(8條)4.調(diào)用和返回指令(4條)§3.3.4控制程序轉(zhuǎn)移類指令1.無(wú)條件轉(zhuǎn)移指12389C51單片機(jī)有豐富的轉(zhuǎn)移類指令(17

條)。包括無(wú)條件轉(zhuǎn)移、條件轉(zhuǎn)移和調(diào)用指令

及返回指令等。所有這些指令的目標(biāo)地址都是在64K字節(jié)

程序存儲(chǔ)器地址空間范圍內(nèi)。89C51單片機(jī)有豐富的轉(zhuǎn)移類指令(17

條)。1241、無(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、無(wú)條件轉(zhuǎn)移指令(4條)無(wú)條件轉(zhuǎn)移指令是當(dāng)程序執(zhí)行到該指令1251、無(wú)條件轉(zhuǎn)移指令(4條)短轉(zhuǎn)移指令A(yù)JMPaddrll長(zhǎng)轉(zhuǎn)移指令LJMPaddrl6相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)指令SJMPrel間接轉(zhuǎn)移指令JMP@A+DPTR

1、無(wú)條件轉(zhuǎn)移指令(4條)短轉(zhuǎn)移指令A(yù)JMPaddrll126短轉(zhuǎn)移指令A(yù)JMPaddrll

先(PC)+2→PC,addrll→PC10~0,(PC15~11)不變這條指令提供了11位地址,可在2K范圍內(nèi)無(wú)條件轉(zhuǎn)移到由a10-a0所指出的地址單元中。因?yàn)楦?位為原PC11-15位值,因此,轉(zhuǎn)移的目標(biāo)地址必須在AJMP指令后面指令的第一個(gè)字節(jié)開(kāi)始的同一2K字節(jié)范圍內(nèi)。短轉(zhuǎn)移指令A(yù)JMPaddrll先(PC)+2→PC,127②長(zhǎng)轉(zhuǎn)移指令LJMPaddrl6

addr16→PC指令直接提供16位目標(biāo)地址,所以程序可轉(zhuǎn)向64KB程序存儲(chǔ)器地址空間的任何單元。

3字節(jié)指令②長(zhǎng)轉(zhuǎn)移指令LJMPaddrl6addr16→PC128③相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)指令SJMPrel先(PC)+2→PC,后(PC)+rel→PC指令的操

作數(shù)是相對(duì)地址,rel是一個(gè)帶符號(hào)的偏移字節(jié)數(shù)(2的補(bǔ)碼),

其范圍為-128~+12700H~7FH對(duì)應(yīng)表示0~+127,80H~FFH對(duì)應(yīng)表示-128~-1。③相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)指令SJMPrel先(PC)+2→129③相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)指令SJMPrel負(fù)數(shù)表示反向轉(zhuǎn)移,正數(shù)表示正向轉(zhuǎn)移。該指令為雙字節(jié)指令,執(zhí)行時(shí)先將PC內(nèi)容

加2,再加相對(duì)地址rel,就得到了轉(zhuǎn)移目標(biāo)地址。③相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移)指令SJMPrel負(fù)數(shù)表示反向轉(zhuǎn)移130例如,在(PC)=0100H地址單元有條

“SJMPrel”指令,

若rel=55H(正數(shù)),則正向轉(zhuǎn)移到

0102H+0055H=0157H地址上;若rel=F6H(負(fù)數(shù))則反向轉(zhuǎn)移到

0102H+FFF6H=00F8H地址上。

(-10)例如,在(PC)=0100H地址單元有條

131編寫(xiě)程序時(shí),rel可以是一個(gè)轉(zhuǎn)移目的地址的標(biāo)號(hào),由匯編程序在匯編過(guò)程中自動(dòng)計(jì)算偏

移地址,并且填入指令代碼中。

在手工匯編時(shí),我們可用轉(zhuǎn)移目的地址減轉(zhuǎn)

移指令所在源地址,再減轉(zhuǎn)移指令字節(jié)數(shù)2

得到偏移字節(jié)數(shù)rel。編寫(xiě)程序時(shí),rel可以是一個(gè)轉(zhuǎn)移目的地址的標(biāo)號(hào),由匯編程序在132④間接轉(zhuǎn)移指令JMP@A+DPTR

(A)+(DPTR)→PC

該指令的轉(zhuǎn)移地址由數(shù)據(jù)指針DPTR的16位

數(shù)和累加器A的8位數(shù)進(jìn)行無(wú)符號(hào)數(shù)相加形

成,并直接送入PC。指令執(zhí)行過(guò)程對(duì)DPTR,A和標(biāo)志位均無(wú)影響這條指令可代替眾多的判別跳轉(zhuǎn)指令,具有

散轉(zhuǎn)功能(又稱散轉(zhuǎn)指令)。④間接轉(zhuǎn)移指令JMP@A+DPTR(A)+(133單片機(jī)31教學(xué)講解課件134從程序中看出,

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

1352、空操作指令(1條)NOP;(PC)+l→PC這是一條單字節(jié)指令,除PC加l外,不影響其

他寄存器和標(biāo)志位。"NOP"指令常用來(lái)產(chǎn)生一個(gè)機(jī)器周期的延遲2、空操作指令(1條)NOP;(PC1363、條件轉(zhuǎn)移指令(8條)(1)判零轉(zhuǎn)移指令(2條)(2)比較轉(zhuǎn)移指令(4條)(3)循環(huán)轉(zhuǎn)移指令(2條)3、條件轉(zhuǎn)移指令(8條)(1)判零轉(zhuǎn)移指令(2條)137(1)判零轉(zhuǎn)移指令JZ和JNZ指令分別對(duì)累加器A的內(nèi)容為全零和不為全零進(jìn)行檢測(cè)并轉(zhuǎn)移,JZrel

;(PC)+2→PC。...。JNZrel(1)判零轉(zhuǎn)移指令JZ和JNZ指令分別對(duì)累加器A的內(nèi)容為全138(1)判零轉(zhuǎn)移指令當(dāng)不滿足條件時(shí),程序繼續(xù)往下執(zhí)行;當(dāng)滿足條件時(shí),程序轉(zhuǎn)移向指定的目標(biāo)地址其目標(biāo)地址是以下一條指令第一個(gè)字節(jié)的地

址為基礎(chǔ),加上指令的第二個(gè)字節(jié)中的相對(duì)

偏移量。相對(duì)偏移量為一個(gè)帶符號(hào)的8位數(shù)。本指令

不改變累加器A的內(nèi)容;也不影響任何標(biāo)志

位。(1)判零轉(zhuǎn)移指令當(dāng)不滿足條件時(shí),程序繼續(xù)往下執(zhí)行;139(2)比較轉(zhuǎn)移指令(4條)對(duì)指定的目的字節(jié)和源字節(jié)進(jìn)行比較。若它們的值不相等,則轉(zhuǎn)移。轉(zhuǎn)移的目標(biāo)地址為當(dāng)前的PC值加3后,再加指令

的第三字節(jié)偏移量(rel)CJNE(目的字節(jié)),(源字節(jié)),rel;三字節(jié)指令(2)比較轉(zhuǎn)移指令(4條)對(duì)指定的目的字節(jié)和源字節(jié)進(jìn)行比較。140(2)比較轉(zhuǎn)移指令(4條)若目的字節(jié)內(nèi)的數(shù)大于源字節(jié)內(nèi)的數(shù),則清0進(jìn)

位標(biāo)志位CY;若目的字節(jié)數(shù)小于源字節(jié)數(shù),則置位進(jìn)位標(biāo)志位

CY;若二者相等,則往下執(zhí)行。本指令執(zhí)行后不影響任何操作數(shù)。這類指令有四種尋址方式,即4條指令:(2)比較轉(zhuǎn)移指令(4條)若目的字節(jié)內(nèi)的數(shù)大于源字節(jié)內(nèi)的數(shù),141(2)比較轉(zhuǎn)移指令(4條)CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel(2)比較轉(zhuǎn)移指令(4條)CJNEA,direct,142(2)比較轉(zhuǎn)移指令(4條)CJNEA,direct,rel

;(PC)+3→PC

;若(direct)<(A),則(PC)+rel→PC,且0→CY;

;若(direct)>(A),則(PC)+rel→PC,且1→CY;

;若(direct)=(A),則順序執(zhí)行,且0→CY;(2)比較轉(zhuǎn)移指令(4條)CJNEA,direct,143(2)比較轉(zhuǎn)移指令(4條)CJNEA,#data,rel

;(PC)+3→PC

;若#data<(A),則(PC)+rel→PC,且0→CY;

;若#data>(A),則(PC)+rel→PC,且1→CY;

;若#data=(A),則順序執(zhí)行,且0→CY;(2)比較轉(zhuǎn)移指令(4條)CJNEA,#data,r144(2)比較轉(zhuǎn)移指令(4條)CJNERn,#data,rel

;(PC)+3→PC

;若#data<(Rn),則(PC)+rel→PC,且0→CY;

;若#data>(Rn),則(PC)+rel→PC,且1→CY;

;若#data=(Rn),則順序執(zhí)行,且0→CY;(2)比較轉(zhuǎn)移指令(4條)CJNERn,#data,145(2)比較轉(zhuǎn)移指令(4條)CJNE@Ri,#data,rel

;(PC)+3→PC

;若#data<((Ri)),則(PC)+rel→PC,且0→CY;

;若#data>((Ri)),則(PC)+rel→PC,且1→CY;

;若#data=((Ri)),則順序執(zhí)行,且0→CY;(2)比較轉(zhuǎn)移指令(4條)CJNE@Ri,#data,146(3)循環(huán)轉(zhuǎn)移指令(2條)程序每執(zhí)行一次本指令,將第1操作數(shù)的字

節(jié)變量減1,并判字節(jié)變量是否為0。若不為0,則繼續(xù)執(zhí)行循環(huán)程序段;若為0,則終止循環(huán)程序段的執(zhí)行,程序往

下執(zhí)行。DJNZRn,relDJNZdirect,rel(3)循環(huán)轉(zhuǎn)移指令(2條)程序每執(zhí)行一次本指令,將第1操作數(shù)147(3)循環(huán)轉(zhuǎn)移指令(2條)

DJNZRn,rel

;(PC)+2→PC,(Rn)-l→Rn;

;當(dāng)(Rn)≠0時(shí),則(PC)+rel→PC;

;當(dāng)(Rn)=0時(shí),則結(jié)束循環(huán),程序往下執(zhí)行。(3)循環(huán)轉(zhuǎn)移指令(2條)DJNZRn,148(3)循環(huán)轉(zhuǎn)移指令(2條)

DJNZdirect,rel

;(PC)+2→PC,(direct)-l→direct;

;當(dāng)(dierct)≠0時(shí),則(PC)+rel→PC;

;當(dāng)(direct)=0時(shí),則結(jié)束循環(huán),程序往下執(zhí)行(3)循環(huán)轉(zhuǎn)移指令(2條)DJNZdir1494、調(diào)用和返回指令程序設(shè)計(jì),有時(shí)需反復(fù)執(zhí)行某段程序,這段程序能被公用。這樣可減少程序編寫(xiě)工作量,于是引進(jìn)了主程序和子程序的概念。通常把具有一定功能的公用程序段作為子程序,指令系統(tǒng)中一般都有主程序調(diào)用子程序的指令和從

子程序返回主程序的指令。子程序的最后一條指令為返回主程序指令(RET)4、調(diào)用和返回指令程序設(shè)計(jì),有時(shí)需反復(fù)執(zhí)行某段程序,1504、調(diào)用和返回指令短調(diào)用指令

ACALLaddr11

長(zhǎng)調(diào)用指令LCALLaddr16返回指令RET返回指令RETI4、調(diào)用和返回指令短調(diào)用指令

ACALLaddr1151①短調(diào)用指令

ACALLaddr11

;(PC)+2→PC

;(SP)+1→SP;(PC0~7)→(SP);

;(SP)+1→SP;(PC8~15)→(SP);

;addr0~10→PC0~10;(PC11~15)不變①短調(diào)用指令A(yù)CALLaddr11

152①短調(diào)用指令短調(diào)用指令提供11位目標(biāo)地址,限定在2KB地址空間內(nèi)調(diào)用。雙字節(jié)、雙周期指令。執(zhí)行完本指令,程序計(jì)數(shù)器內(nèi)容先加2,指向下一條指令的地址;然后將PC值壓入堆棧保存,棧指針(SP)加2;接著將11位目標(biāo)地址(addr0~10)送程序計(jì)數(shù)器的低11位(PC0~10),PC值的高5位(PC11~15)不變。①短調(diào)用指令短調(diào)用指令提供11位目標(biāo)地址,限定在2KB地址空153例如:設(shè)符號(hào)地址“SUBRTN”所對(duì)應(yīng)的程 序存儲(chǔ)器實(shí)際地址為0345H,在 (PC)=0123H處

執(zhí)行指令A(yù)CALLSUBRTN例如:設(shè)符號(hào)地址“SUBRTN”所對(duì)應(yīng)的程 序存儲(chǔ)器154(SP)=09H,SUBRTN=0345H送PC,(PC)=0345H,程序轉(zhuǎn)向子程序首地址0345H單元開(kāi)始執(zhí)行。這里PC值得高5為內(nèi)容不變,僅把123H變成345H。尋址在0125H為起始地址的同一個(gè)2K字節(jié)范圍內(nèi)。(SP)=09H,155①長(zhǎng)調(diào)用指令

LCALLaddr16

;(PC)+3→PC

;(SP)+1→SP;(PC0~7)→(SP);

;(SP)+1→SP;(PC8~15)→(SP);

;addr0~15→PC0~15;①長(zhǎng)調(diào)用指令LCALLaddr16

156例如:設(shè)(SP)=07H,符號(hào)地址“SUBRTUN”指向程序存儲(chǔ)器的5678H(PC)=0123H。從0123H處執(zhí)行指令

LCALLSUBRTUN例如:設(shè)(SP)=07H,符號(hào)地址“SUBRTUN”指向程157③返回指令

RET;((SP))→PC8~15,(SP)-l→SP,

;((SP))→PC0~7,(SP)-l→SP。

從子程序返回指令。當(dāng)程序執(zhí)行到本指令時(shí),表示子程序結(jié)束返回調(diào)用指令(ACALL或LCALL)的下一條指令處(斷點(diǎn))繼續(xù)往下執(zhí)行。③返回指令RET158④返回指令(中斷)RETI;((SP))→PC8~15,(SP)-l→SP,

;((SP))→PC0~7,(SP)-l→SP。

RETI指令是中斷返回指令,

除具有RET指令的功能外,還將開(kāi)放中斷邏輯。④返回指令(中斷)RETI1593.3.5位操作指令(布爾操作)0、緒1、位數(shù)據(jù)傳送指令(2條)2、位修正指令(6條)3、邏輯運(yùn)算指令(4條)4、位條件轉(zhuǎn)移類指令(5條)3.3.5位操作指令(布爾操作)0、緒16089C51硬件結(jié)構(gòu)中有個(gè)位處理機(jī)(布爾處理機(jī)),它具有一套處理位變量的指令集,包括位變量傳送、邏輯運(yùn)算、控制程序轉(zhuǎn)移等指令。在進(jìn)行位操作時(shí),位累加器C即為進(jìn)位標(biāo)志CY

0、緒89C51硬件結(jié)構(gòu)中有個(gè)位處理機(jī)(布爾處理機(jī)),0、緒161位尋址區(qū):

片內(nèi)RAM字節(jié)地址20H--2FH單元中連續(xù)的128個(gè)位(位地址00H--7FH)和SFR中字節(jié)地址能被8整除的特殊功能寄存器。

0、緒位尋址區(qū):

片內(nèi)RAM字節(jié)地址20H--2FH單元中連續(xù)的1162在匯編語(yǔ)言中,位地址的表達(dá)方式有:直接(位)地址方式,如D4H點(diǎn)操作符號(hào)方式,如PSW.4位名稱方式,如RS1用戶定義名方式,如用偽指令bit

SUB.REGbitRS1經(jīng)定義后,允許指令中用SUB.REG代替RS1。

上面四種方式都可表示PSW(D0H)中的第4位。0、緒在匯編語(yǔ)言中,位地址的表達(dá)方式有:0、緒1631、位數(shù)據(jù)傳送指令(2條)上述指令把源操作數(shù)指定的位變量傳送到目

的操作數(shù)指定的位單元中。一個(gè)操作數(shù)為位地址,另一個(gè)必定為布爾累

加器C(即進(jìn)位標(biāo)志位CY)。MOVC,bitMOVbit,C1、位數(shù)據(jù)傳送指令(2條)上述指令把源操作數(shù)指定的位變量1641、位數(shù)據(jù)傳送指令(2條)此指令不影響其他寄存器或標(biāo)志位。位地址bit若為00H--7FH,則位地址在片內(nèi)

RAM(20H--2FH單元)中共128位。bit若為80H--FFH,則位地址在11個(gè)特殊功

能寄存器中。4個(gè)8位并行I/O口,每位均可單獨(dú)進(jìn)行操作因此,布爾I/O口共有32個(gè):P0.0--P0.7,P

1.0--P1.7,P2.0--2.7,P3.0--P3.7。1、位數(shù)據(jù)傳送指令(2條)此指令不影響其他寄存器或標(biāo)志位1652、位修正指令(6條)CLRC;位清0指令CLRbit;位清0指令SETBC;位置l指令SETBbit;位置l指令CPLC;位取反指令CPLbit;位取反指令2、位修正指令(6條)CLRC;位166這類指令的功能分別是清除、取反、置位

進(jìn)位標(biāo)志C或直接尋址位,執(zhí)行結(jié)果不影響其他標(biāo)志位。當(dāng)直接位地址為端口中某一位時(shí),具有“

讀--改--寫(xiě)"功能。2、位修正指令(6條)這類指令的功能分別是清除、取反、置位

進(jìn)位標(biāo)志C或直接1673、邏輯運(yùn)算指令(4條)(2)位邏輯“或”指令ORLC,bitORLC,/bit(1)位邏輯“與”指令A(yù)NLC,bitANLC,/bit3、邏輯運(yùn)算指令(4條)(2)位邏輯“或”指令(1)位邏1683、邏輯運(yùn)算指令(4條)這組指令的功能是,把位累加器C的內(nèi)容

與直接位地址的內(nèi)容進(jìn)行邏輯“與”、

“或”操作,結(jié)果再送回C中。斜杠“/”表示對(duì)該位取反后再參與運(yùn)算,

但不改變?cè)瓉?lái)的數(shù)值。3、邏輯運(yùn)算指令(4條)這組指令的功能是,把位累加器C的169單片機(jī)31教學(xué)講解課件1704、位條件轉(zhuǎn)移類指令(5條)(1)判布爾累加器C轉(zhuǎn)移指令

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

1714、位條件轉(zhuǎn)移類指令(5條)分別對(duì)進(jìn)位標(biāo)志位C進(jìn)行檢測(cè),當(dāng)(C)=1(前一條)或(C)=0(后一條)時(shí),程序轉(zhuǎn)向目標(biāo)地址;否則,順序執(zhí)行下一條指令。目標(biāo)地址是(PC)+2后的PC當(dāng)前值(指向下一

條指令)加上指令的第二字節(jié)中帶符號(hào)的相對(duì)

地址(rel)之和。(1)判布爾累加器C轉(zhuǎn)移指令4、位條件轉(zhuǎn)移類指令(5條)分別對(duì)進(jìn)位標(biāo)志位C進(jìn)行檢測(cè),(11724、位條件轉(zhuǎn)移類指令(5條)(2)判位變量轉(zhuǎn)移指令

JBbit,relJNBbit,rel4、位條件轉(zhuǎn)移類指令(5條)(2)判位變量轉(zhuǎn)移指令

1734、位條件轉(zhuǎn)移類指令(5條)檢測(cè)指定位,若位變量為1(前一條指令)或位

變量為0(后一條指令),則程序轉(zhuǎn)向目標(biāo)地址去執(zhí)行;否則,順序執(zhí)行下一條指令。對(duì)該位變量進(jìn)行測(cè)試時(shí),不影響原變量值,

也不影響標(biāo)志位。目標(biāo)地址為(PC)+3后的PC當(dāng)前值(指向下一

條指令)加帶符號(hào)的相對(duì)偏移量之和。(2)判位變量轉(zhuǎn)移指令4、位條件轉(zhuǎn)移類指令(5條)檢測(cè)指定位,若位變量為1(前一條1744、位條件轉(zhuǎn)移類指令(5條)(3)判位變量并清0轉(zhuǎn)移指令

JBCbit,rel;(PC)+3→PC

;若(bit)=1則(PC)+rel→PC,0→bit

;若(bit)=0,則順序往下執(zhí)行。4、位條件轉(zhuǎn)移類指令(5條)(3)判位變量并清0轉(zhuǎn)移指令1754、位條件轉(zhuǎn)移類指令(5條)本指令對(duì)指定位變量檢測(cè),若位變量值為1,則清0該位,程序轉(zhuǎn)向目

標(biāo)地址去執(zhí)行;否則,順序往下執(zhí)行。注意,不管該位變量為何值,在進(jìn)行檢測(cè)

后即清0。目標(biāo)地址為(PC)+3后的PC當(dāng)前值加上指令

的第三字節(jié)中帶符號(hào)的8位偏移量。4、位條件轉(zhuǎn)移類指令(5條)本指令對(duì)指定位變量檢測(cè),176指令系統(tǒng)是熟悉單片機(jī)功能、開(kāi)發(fā)與應(yīng)用單片機(jī)的基礎(chǔ)。掌握指令系統(tǒng)必須與單片機(jī)的CPU結(jié)構(gòu)、存儲(chǔ)空間的分布、I/O端口的分布結(jié)合起來(lái),真正理解符號(hào)指令的操作含義,結(jié)合實(shí)際問(wèn)題多作程序分析和簡(jiǎn)單程序設(shè)計(jì),以便能達(dá)到好的效果。指令系統(tǒng)是熟悉單片機(jī)功能、開(kāi)發(fā)與應(yīng)用單片機(jī)的基礎(chǔ)。177第三章89C51單片機(jī)指令系統(tǒng)Exit§3.389C51單片機(jī)指令系統(tǒng)§3.1匯編語(yǔ)言§3.2尋址方式§3.4程序設(shè)計(jì)舉例第三章89C51單片機(jī)指令系統(tǒng)Exit§3.38178指令學(xué)習(xí)要點(diǎn)了解指令的操作了解指令的尋址格式了解指令對(duì)程序狀態(tài)字的影響合理使用指令指令學(xué)習(xí)要點(diǎn)179§3.1匯編語(yǔ)言§3.1.1指令和程序設(shè)計(jì)語(yǔ)言§3.1.2指令格式BACK§3.1匯編語(yǔ)言§3.1.1指令和程序設(shè)計(jì)語(yǔ)180§3.1匯編語(yǔ)言計(jì)算機(jī)指令系統(tǒng)是一套控制計(jì)算機(jī)操作的編碼,稱為機(jī)器語(yǔ)言。計(jì)算機(jī)只能識(shí)別和執(zhí)行機(jī)器語(yǔ)言的指令。為了便于記憶和使用,通常用符號(hào)指令(即匯編語(yǔ)言)來(lái)描述計(jì)算機(jī)的指令系統(tǒng)。不同的計(jì)算機(jī)有不同的匯編語(yǔ)言。BACK§3.1匯編語(yǔ)言計(jì)算機(jī)指令系統(tǒng)是一套控制計(jì)算機(jī)操作的181§3.1.1指令和程序設(shè)計(jì)語(yǔ)言指令:

是CPU根據(jù)人的意圖來(lái)執(zhí)行某種操作的

命令。指令系統(tǒng):

一臺(tái)計(jì)算機(jī)所能執(zhí)行的全部指令的集合。要使計(jì)算機(jī)按照人的思維完成一項(xiàng)工作,就必須讓CPU按順序執(zhí)行各種操作。

即一步步地執(zhí)行一條條的指令?!?.1.1指令和程序設(shè)計(jì)語(yǔ)言指令:

是CPU根182§3.1.1指令和程序設(shè)計(jì)語(yǔ)言程序:

按人的要求編排的指令操作序列稱為

程序。

程序設(shè)計(jì):

編寫(xiě)程序的過(guò)程就叫作程序設(shè)計(jì)?!?.1.1指令和程序設(shè)計(jì)語(yǔ)言程序:

按人的要求編排的183§3.1.1指令和程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言是實(shí)現(xiàn)人機(jī)交換信息的基本工具,分為:

機(jī)器語(yǔ)言

匯編語(yǔ)言

高級(jí)語(yǔ)言§3.1.1指令和程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言是實(shí)現(xiàn)人機(jī)交換信184§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言:用二進(jìn)制編碼表示每條指令,是計(jì)算機(jī)能

直接識(shí)別和執(zhí)行的語(yǔ)言。用機(jī)器語(yǔ)言編寫(xiě)的程序稱為機(jī)器語(yǔ)言程序或指令程序(機(jī)器碼程序)。因?yàn)闄C(jī)器只能直接識(shí)別機(jī)器碼程序,所以又稱它為目標(biāo)程序?!?.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言:185§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言舉例:

要做“10+20”的加法,在MCS-51中可用機(jī)器碼指令編程:

0111010000001010把10放到累加器A中;

0010010000010100A加20,結(jié)果仍放在A中

為了便于書(shū)寫(xiě)和記憶,可采用十六進(jìn)制表示指令碼:740AH

2414H§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言舉例:

要做“10186§3.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言特點(diǎn):

用機(jī)器語(yǔ)言編寫(xiě)程序不易記憶,不易

查錯(cuò),不易修改?!?.1.1指令和程序設(shè)計(jì)語(yǔ)言機(jī)器語(yǔ)言特點(diǎn):

用機(jī)器語(yǔ)187§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言:用助記符、符號(hào)和數(shù)字等來(lái)表示指令的程序設(shè)計(jì)語(yǔ)言。它與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的。它與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的。

§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言:188§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言舉例:

例如:“10+20”例子可寫(xiě)成:

匯編語(yǔ)言程序

機(jī)器語(yǔ)言程序

MOVA,#0AH

740AH

ADDA,#14H

2414H§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言舉例:

例如:“1189§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言特點(diǎn):用與CPU的硬件結(jié)構(gòu)緊密相關(guān)。不同的CPU其匯編語(yǔ)言是不同的。匯編語(yǔ)言程序不能移植,使用不便。用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)必須了解所使用的CPU硬件的結(jié)的與性能,對(duì)程序設(shè)計(jì)人員有較高的要求。§3.1.1指令和程序設(shè)計(jì)語(yǔ)言匯編語(yǔ)言特點(diǎn):190§3.1.1指令和程序設(shè)計(jì)語(yǔ)言高級(jí)語(yǔ)言:

脫離具體機(jī)器的語(yǔ)言。§3.1.1指令和程序設(shè)計(jì)語(yǔ)言高級(jí)語(yǔ)言:

脫離具體機(jī)191§3.1.2指令格式89C51匯編語(yǔ)言指令由

操作碼助記符字段和操作數(shù)字段兩部分組成。指令格式如下:

操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]

例如:

MOVA,#00H

§3.1.2指令格式89C51匯編語(yǔ)言指令由

操作碼192§3.1.2指令格式操作碼部分規(guī)定了指令所實(shí)現(xiàn)的操作功能,由2--5個(gè)英文字母表示。

例如,JB,

MOV,

DJNZ,

LCALL等?!?.1.2指令格式操作碼部分193§3.1.2指令格式操作數(shù)部分

指出了參與操作的數(shù)據(jù)來(lái)源和操作結(jié)果存放的目的單元。

操作數(shù)可以直接是一個(gè)數(shù)(立即數(shù)),或者是一個(gè)數(shù)據(jù)所在的空間地址,即在執(zhí)行指令時(shí)從指定的地址空間取出操作數(shù)。§3.1.2指令格式操作數(shù)部分

194§3.1.2指令格式操作碼和操作數(shù)都有對(duì)應(yīng)的二進(jìn)制代碼,指令代碼由若干字節(jié)組成。對(duì)于不同的指令,指令的字節(jié)數(shù)不同。

89C51指令系統(tǒng)中,有:

1、單字節(jié)指令

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論