單片微機(jī)原理與應(yīng)用 教學(xué)課件 作者 羅印升 素材包 第3章 51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法_第1頁(yè)
單片微機(jī)原理與應(yīng)用 教學(xué)課件 作者 羅印升 素材包 第3章 51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法_第2頁(yè)
單片微機(jī)原理與應(yīng)用 教學(xué)課件 作者 羅印升 素材包 第3章 51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法_第3頁(yè)
單片微機(jī)原理與應(yīng)用 教學(xué)課件 作者 羅印升 素材包 第3章 51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法_第4頁(yè)
單片微機(jī)原理與應(yīng)用 教學(xué)課件 作者 羅印升 素材包 第3章 51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法_第5頁(yè)
已閱讀5頁(yè),還剩303頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法(1)理解指令的尋址方式及相應(yīng)的尋址空間。

(2)理解51系列單片機(jī)的111條基本指令的含義,熟練掌握其應(yīng)用方法。

(3)了解機(jī)器語言、匯編語言和高級(jí)語言的特點(diǎn)、匯編語言程序設(shè)計(jì)步驟。

(4)掌握匯編語言的基本格式,熟練掌握匯編語言的程序設(shè)計(jì)思想和設(shè)計(jì)方法。

(5)理解子程序的特點(diǎn),掌握子程序的設(shè)計(jì)方法和設(shè)計(jì)中應(yīng)該注意的問題。

3.1指令系統(tǒng)概述

3.2尋址方式

3.3數(shù)據(jù)傳送類指令

5.16位數(shù)據(jù)的傳遞指令(1條)

3.4算術(shù)運(yùn)算類指令第3章51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法(1)理解指第3章51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法3.5邏輯運(yùn)算類指令

3.6位操作類指令

3.7控制轉(zhuǎn)移類指令

3.8匯編語言程序設(shè)計(jì)第3章51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法3.5邏輯運(yùn)3.1指令系統(tǒng)概述3.1.1指令分類

3.1.2指令格式

3.1.3指令中常用縮寫符號(hào)的意義3.1指令系統(tǒng)概述3.1.1指令分類

3.1.2指令格3.1.1指令分類1.按指令功能可分為五類

2.按指令執(zhí)行所需要的時(shí)間可分為三類

3.按指令所占的字節(jié)數(shù)可分為三類3.1.1指令分類1.按指令功能可分為五類

2.按指令執(zhí)行1.按指令功能可分為五類1)數(shù)據(jù)傳送類指令(29條):內(nèi)部8位數(shù)據(jù)傳送指令15條,內(nèi)部16位數(shù)據(jù)傳送指令1條,外部數(shù)據(jù)傳送指令4條,交換、查表和堆棧操作指令9條。

2)算術(shù)傳送類指令(24條):加法指令14條(包括BCD碼調(diào)整指令1條),減法指令8條,乘/除法指令各1條。

3)邏輯運(yùn)算類指令(24條):邏輯運(yùn)算指令20條,循環(huán)移位指令4條。

4)位操作指令(12條):位傳送指令2條,位置位、位清“0”和位取反指令6條,位運(yùn)算指令4條。

5)控制轉(zhuǎn)移類指令(22條):無條件轉(zhuǎn)移指令4條,條件轉(zhuǎn)移指令8條,調(diào)用和返回指令5條,位測(cè)試轉(zhuǎn)移指令3條,判別CY標(biāo)志轉(zhuǎn)移指令2條。1.按指令功能可分為五類1)數(shù)據(jù)傳送類指令(29條):內(nèi)部82.按指令執(zhí)行所需要的時(shí)間可分為三類1)單周期指令(64條)。

2)雙周期指令(45條)。

3)四周期指令(2條)。2.按指令執(zhí)行所需要的時(shí)間可分為三類1)單周期指令(64條)3.按指令所占的字節(jié)數(shù)可分為三類1)單字節(jié)指令(49條)。

2)雙字節(jié)指令(46條)。

3)三字節(jié)指令(16條)。3.按指令所占的字節(jié)數(shù)可分為三類1)單字節(jié)指令(49條)。

3.1.2指令格式1.指令格式介紹

2.指令中數(shù)據(jù)的表示3.1.2指令格式1.指令格式介紹

2.指令中數(shù)據(jù)的表示1.指令格式介紹1)匯編語言語句由標(biāo)號(hào)、操作碼、操作數(shù)和注釋四部分組成。

2)標(biāo)號(hào)位于語句的開始,由1~8個(gè)ASCII字符組成,第一個(gè)字符必須是字母。

3)操作碼是用英文縮寫的指令功能助記符。

4)操作數(shù)在操作碼之后,兩者用空格分開。

5)注釋在語句的最后,以分號(hào)“;”開始,是說明性的文字,與語句的具體功能無關(guān),但是能增加程序的可閱讀性,便于程序的調(diào)試與交流。1.指令格式介紹1)匯編語言語句由標(biāo)號(hào)、操作碼、操作數(shù)和注釋2.指令中數(shù)據(jù)的表示1)十進(jìn)制數(shù)以D結(jié)尾,也可以省略,如55D或55。

2)十六進(jìn)制數(shù)以H結(jié)尾,如55H。

3)二進(jìn)制數(shù)以B結(jié)尾,如00110011B。

4)八進(jìn)制數(shù)以O(shè)或Q結(jié)尾,如55O或55Q。

5)字符串用“”括起來,如′M′表示字符M的ASCII碼。2.指令中數(shù)據(jù)的表示1)十進(jìn)制數(shù)以D結(jié)尾,也可以省略,如553.1.3指令中常用縮寫符號(hào)的意義1)#data:8位立即數(shù)。

2)#data16:16位立即數(shù)。

3)Rn:工作寄存器,R0~R7,n=0~7。

4)Ri:工作寄存器,i=0或1。

5)@:間接地址符號(hào)。

6)direct:8位直接地址,可以是特殊功能寄存器(SFR)的地址或片內(nèi)RAM單元地址。

7)addr11:11位目的地址。

8)addr16:16位目的地址。

9)rel:有符號(hào)的8位偏移地址,主要用于所有的條件轉(zhuǎn)移指令和SJMP指令。

10)bit:位地址。

11)/:位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反,如/bit。3.1.3指令中常用縮寫符號(hào)的意義1)#data:8位立即3.1.3指令中常用縮寫符號(hào)的意義12):當(dāng)前指令存放的地址。

13)(X):表示由X所指定的某寄存器或某單元中的內(nèi)容。

14)((X)):表示由X間接尋址單元中的內(nèi)容。

15)B:通用寄存器,常用于乘法MUL和除法DIV的指令。

16)C:進(jìn)位標(biāo)志位或者布爾處理器中的累加器。

17)←:表示指令的操作結(jié)果是將箭頭右邊的內(nèi)容傳送到左邊。3.1.3指令中常用縮寫符號(hào)的意義12):當(dāng)前指令存放的地3.2尋址方式3.2.1立即尋址

3.2.2直接尋址

3.2.3寄存器尋址

3.2.4寄存器間接尋址

3.2.5變址尋址

3.2.6相對(duì)尋址

3.2.7位尋址3.2尋址方式3.2.1立即尋址

3.2.2直接尋址

3.2.1立即尋址立即尋址是指指令中直接給出操作數(shù)的尋址方式。立即數(shù)用前面加有#號(hào)的8位或16位數(shù)來表示。立即數(shù)是指令代碼的一部分,只能作源操作數(shù)。這種尋址方式主要用于對(duì)特殊功能寄存器和指定的存儲(chǔ)單元賦初值。3.2.1立即尋址立即尋址是指指令中直接給出操作數(shù)的尋址方3.2.2直接尋址1)特殊功能寄存器(SFR):直接尋址是唯一的訪問形式。

2)片內(nèi)RAM低128B單元(地址范圍00H~7FH)。

3)221個(gè)位地址空間。3.2.2直接尋址1)特殊功能寄存器(SFR):直接尋址3.2.3寄存器尋址寄存器尋址是指操作數(shù)存放于寄存器中(Rn、A、B、DPTR、CY)的尋址方式。例如:MOV

A,R7;(A)←(R7)其功能是把寄存器R7內(nèi)的操作數(shù)傳送到累加器A中。由于操作數(shù)在R7中,因此在指令中指定了R7,就能從中取得操作數(shù)。3.2.3寄存器尋址寄存器尋址是指操作數(shù)存放于寄存器中(R3.2.4寄存器間接尋址圖3-1寄存器間接尋址示意圖3.2.4寄存器間接尋址圖3-1寄存器間接尋址示意圖3.2.5變址尋址圖3-2變址尋址示意圖3.2.5變址尋址圖3-2變址尋址示意圖3.2.6相對(duì)尋址1)當(dāng)前PC值是指相對(duì)轉(zhuǎn)移指令所在地址(一般稱為源地址)加上轉(zhuǎn)移指令字節(jié)數(shù),即當(dāng)前PC值=源地址+轉(zhuǎn)移指令字節(jié)數(shù)。

2)偏移量rel是有符號(hào)的單字節(jié)數(shù),以補(bǔ)碼表示,其相對(duì)值的范圍是-128~+127,負(fù)數(shù)表示從當(dāng)前地址向地址減小的方向轉(zhuǎn)移,正數(shù)表示從當(dāng)前地址向地址增大的方向轉(zhuǎn)移。3.2.6相對(duì)尋址1)當(dāng)前PC值是指相對(duì)轉(zhuǎn)移指令所在地址(圖3-3相對(duì)尋址示意圖

a)指令JZ08H尋址示意圖b)指令JZ0F4H尋址示意圖圖3-3相對(duì)尋址示意圖

a)指令JZ08H尋址示意圖b3.2.7位尋址1)直接使用位地址。

2)位名稱表示方法。

3)單元地址加位數(shù)的表示方法。

4)專用寄存器符號(hào)加位數(shù)的表示方法。3.2.7位尋址1)直接使用位地址。

2)位名稱表示方法。表3-17種尋址方式及尋址空間序號(hào)尋址方式尋址空間范圍1寄存器尋址R0~R7,A,B,CY,DPTR寄存器2立即尋址程序存儲(chǔ)器3寄存器間址片內(nèi)RAM的00H~0FFH,片外RAM4直接尋址片內(nèi)RAM的00H~7FH,SFR5變址尋址程序存儲(chǔ)器6相對(duì)尋址程序存儲(chǔ)器7位尋址片內(nèi)RAM的20H~2FH的128位,SFR中的93位表3-17種尋址方式及尋址空間序號(hào)尋址方式尋址空間范圍13.3數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令3.3數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令1.以累加器為目的操作數(shù)的指令(4條)

2.以寄存器Rn為目的操作數(shù)的指令(3條)

3.以直接地址為目的操作數(shù)的指令(5條)

4.以間接地址為目的操作數(shù)的指令(3條)3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令1.以累加器為目的操作數(shù)3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令圖3-4片內(nèi)RAM間數(shù)據(jù)傳遞關(guān)系3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令圖3-4片內(nèi)RAM間數(shù)1.以累加器為目的操作數(shù)的指令(4條)MOV

A,Rn;(A)←(Rn),(n=0~7)MOV

A,direct;(A)←(direct)MOV

A,@Ri;(A)←((Ri))(i=0、1)MOV

A,#data;(A)←data這組指令的目的操作數(shù)都是累加器A,源操作數(shù)的尋址方式采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址。1.以累加器為目的操作數(shù)的指令(4條)MOVA,Rn2.以寄存器Rn為目的操作數(shù)的指令(3條)MOV

Rn,A;(Rn)←(A),(n=0~7)MOV

Rn,direct;(Rn)←(direct),(n=0~7)MOV

Rn,#data;(Rn)←data,(n=0~7)這組指令都是以工作寄存器為目的操作數(shù),源操作數(shù)的尋址方式采用寄存器尋址、直接尋址和立即尋址。2.以寄存器Rn為目的操作數(shù)的指令(3條)MOVRn,A;3.以直接地址為目的操作數(shù)的指令(5條)MOV

direct,A;(direct)←(A)MOV

direct,Rn;(direct)←(Rn),(n=0~7)MOV

directl,direct2;(direct1)←(direct2)MOV

direct,@Ri;(direct)←((Ri)),(i=0、1)MOV

direct,#data;(direct)←data這組指令的目的操作數(shù)都是直接尋址單元,源操作數(shù)采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址。3.以直接地址為目的操作數(shù)的指令(5條)MOVdirect4.以間接地址為目的操作數(shù)的指令(3條)MOV

@Ri,A;((Ri))←(A)MOV

@Ri,direct;((Ri))←(direct)MOV

@Ri,#data;((Ri))←data這組指令的目的操作數(shù)都是間接尋址單元,源操作數(shù)可采用寄存器尋址、直接尋址和立即尋址方式。4.以間接地址為目的操作數(shù)的指令(3條)MOV@Ri,A5.16位數(shù)據(jù)的傳遞指令(1條)(1)MOVA,R0和MOVA,@R0

(2)MOVA,#40H和MOVA,40H

3.3.2片外RAM數(shù)據(jù)傳送類指令

3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令

3.3.4數(shù)據(jù)交換類指令

3.3.5堆棧操作類指令5.16位數(shù)據(jù)的傳遞指令(1條)(1)MOVA,R0和(2)MOVA,#40H和MOVA,40H解:它們的執(zhí)行結(jié)果為

解:運(yùn)行結(jié)果為

解:上述指令均是錯(cuò)誤的。

解法一:MOV55H,15H

解法二:MOVR6,15H

解法三:MOVR1,#15H

解法四:MOVA,15H

解:30H和40H單元中都裝有數(shù)據(jù),要想把其中的內(nèi)容相交換必須尋求第三個(gè)存儲(chǔ)單元對(duì)其中的一個(gè)數(shù)進(jìn)行緩沖,這個(gè)存儲(chǔ)單元若選為累加器A,則相應(yīng)程序如下:(2)MOVA,#40H和MOVA,40H解:它3.3.2片外RAM數(shù)據(jù)傳送類指令1)要訪問片外RAM,必須知道片外RAM單元的地址,在后兩條指令中,地址是被直接放在DPTR中,可尋址片外RAM的64KB空間。

2)使用訪問片外RAM數(shù)據(jù)傳送指令時(shí),應(yīng)當(dāng)首先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀或者寫命令。

3)也可以由P2與R0或P2與R1組成16位地址指針,尋址片外RAM的64KB空間。3.3.2片外RAM數(shù)據(jù)傳送類指令1)要訪問片外RAM,必3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令1)MOVCA,@A+DPTR:這條指令的執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址無關(guān)。

2)MOVCA,@A+PC:這條指令的優(yōu)點(diǎn)是不改變SFR和PC的狀態(tài),只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令1)MOVC3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令圖3-5查表指令3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令圖3-5查表圖3-60~9二次方值表圖3-60~9二次方值表3.3.4數(shù)據(jù)交換類指令1.字節(jié)交換指令(Exchange,XCH

2.半字節(jié)交換指令(1條)

3.累加器A高低半字節(jié)交換指令(1條)3.3.4數(shù)據(jù)交換類指令1.字節(jié)交換指令(Exchange1.字節(jié)交換指令(Exchange,XCHXCH

A,Rn;(A)←→(Rn)XCH

A,@Ri;(A)←→((Ri))XCH

A,direct;(A)←→(direct)指令功能:將累加器A的內(nèi)容與源操作數(shù)(Rn、direct或@Ri)所指定單元的內(nèi)容相互交換。1.字節(jié)交換指令(Exchange,XCHXCHA,Rn2.半字節(jié)交換指令(1條)XCHDA,@Ri;(A)3~0←→((Ri))3~0指令功能:將累加器A中的內(nèi)容的低4位與Ri所指的片內(nèi)RAM單元中的低4位互換,但它們的高4位均不變。例如,設(shè)(A)=0ABH,(R0)=30H,(30H)=12H,執(zhí)行指令“XCHDA,@R0”后,(A)=0A2H,(30H)=1BH。2.半字節(jié)交換指令(1條)XCHDA,@Ri;(A)3.累加器A高低半字節(jié)交換指令(1條)解:本題是一個(gè)字節(jié)交換問題,故可以采用3條字節(jié)交換指令中的任何一條。若采用第三條字節(jié)交換指令,則相應(yīng)程序?yàn)?/p>

解:0~9的ASCII碼為30H~39H。進(jìn)行比較后發(fā)現(xiàn),兩者之間僅相差30H,故可以利用半字節(jié)指令把0~9的數(shù)裝配成相應(yīng)的ASCII碼。程序如下:3.累加器A高低半字節(jié)交換指令(1條)解:本題是一個(gè)字節(jié)交換3.3.5堆棧操作類指令1)PUSH稱為壓棧指令,將指定的直接尋址單元的內(nèi)容壓入堆棧。

2)POP稱為出棧指令,它是將當(dāng)前堆棧指針SP所指示的單元內(nèi)容彈出到指定的片內(nèi)RAM單元中,然后再將SP減1。3.3.5堆棧操作類指令1)PUSH稱為壓棧指令,將指定的圖3-7堆棧指令執(zhí)行過程

a)指令“PUSH40H”操作示意圖b)指令“POP30H”操作示意圖圖3-7堆棧指令執(zhí)行過程

a)指令“PUSH40H”操3.4算術(shù)運(yùn)算類指令3.4.1加法指令

3.4.2減法指令

3.4.3乘法指令

3.4.4除法指令3.4算術(shù)運(yùn)算類指令3.4.1加法指令

3.4.2減法3.4.1加法指令1.不帶進(jìn)位位的加法指令(Addition,ADD

100110100

2.帶進(jìn)位加法指令(Addition

3.增量指令(Increase,INC

4.十進(jìn)制調(diào)整指令(Decimal3.4.1加法指令1.不帶進(jìn)位位的加法指令(Additio1.不帶進(jìn)位位的加法指令(Addition,ADD解:100001011.不帶進(jìn)位位的加法指令(Addition,ADD解:2.帶進(jìn)位加法指令(Addition解:參考程序如下:2.帶進(jìn)位加法指令(Addition解:參考程序如下:3.增量指令(Increase,INC解:3.增量指令(Increase,INC解:4.十進(jìn)制調(diào)整指令(Decimal1)這條指令必須緊跟在ADD或ADDC指令之后,對(duì)加法指令的結(jié)果進(jìn)行調(diào)整,且這里的ADD或ADDC的操作是對(duì)壓縮的BCD碼表示的數(shù)進(jìn)行運(yùn)算。

2)DA指令不影響溢出標(biāo)志。4.十進(jìn)制調(diào)整指令(Decimal1)這條指令必須緊跟在AD1W4.TIF1W4.TIF3.4.2減法指令1.帶借位減法指令(Subtract

2.減1指令(Decrease,DEC3.4.2減法指令1.帶借位減法指令(Subtract

21.帶借位減法指令(Subtract圖3-8例題3-19程序

流程圖1.帶借位減法指令(Subtract圖3-8例題3-19程2.減1指令(Decrease,DEC解:首先要考慮到“DAA”指令只能對(duì)加法調(diào)整,故必須先化BCD減法為加法,關(guān)鍵是求兩位十進(jìn)制減數(shù)的補(bǔ)碼(9AH-減數(shù)),如圖3-8所示。2.減1指令(Decrease,DEC解:首先要考慮到“DA1W5.TIF1W5.TIF1W6.TIF1W6.TIF3.4.3乘法指令1)若乘積大于255,(OV)=1;否則(OV)=0。

2)CY總是為“0”。

3)P受累加器A中的內(nèi)容影響。3.4.3乘法指令1)若乘積大于255,(OV)=1;否則圖3-9例題3-20

程序流程圖圖3-9例題3-20

程序流程圖1W7.TIF1W7.TIF3.4.4除法指令1)CY、OV,清“0”。

2)若(B)=0,(OV)=1。

3)P受累加器A中的內(nèi)容影響。

1)將要轉(zhuǎn)換的二進(jìn)制數(shù)除以100,商即為百位數(shù),余數(shù)再除以10,商和余數(shù)分別為十位和個(gè)位數(shù)。

2)通過SWAP、ADD指令組成一個(gè)壓縮的BCD數(shù),其中十位數(shù)放在A7~4,個(gè)位數(shù)放在A3~0。

1)乘法指令和除法指令需要4個(gè)機(jī)器周期,是指令系統(tǒng)中執(zhí)行時(shí)間最長(zhǎng)的指令。

2)在進(jìn)行8位數(shù)乘除法運(yùn)算時(shí),必須將相應(yīng)的被乘數(shù)和乘數(shù)、被除數(shù)和除數(shù)分別放入累加器A和寄存器B中,才能進(jìn)行計(jì)算。

3)在51單片機(jī)中,乘法和除法指令僅適用于8位數(shù)乘法和除法運(yùn)算。3.4.4除法指令1)CY、OV,清“0”。

2)若(B3.4.4除法指令圖3-10例3-21流程圖3.4.4除法指令圖3-10例3-21流程圖3.5邏輯運(yùn)算類指令3.5.1累加器A的邏輯運(yùn)算指令

3.5.2兩個(gè)操作數(shù)的邏輯操作運(yùn)算指令3.5邏輯運(yùn)算類指令3.5.1累加器A的邏輯運(yùn)算指令

33.5.1累加器A的邏輯運(yùn)算指令1.累加器清“0”2.累加器按位取反指令

3.循環(huán)移位指令(4條)3.5.1累加器A的邏輯運(yùn)算指令1.累加器清“0”1W8.TIF1W10.TIF1W8.TIF1W10.TIF3.循環(huán)移位指令(4條)1W11.TIF1W9.TIF3.循環(huán)移位指令(4條)1W11.TIF1W9.TIF3.5.2兩個(gè)操作數(shù)的邏輯操作運(yùn)算指令1.邏輯“與”操作指令(And

2.邏輯“或”操作指令(Or

3.邏輯“異或”指令(6條)3.5.2兩個(gè)操作數(shù)的邏輯操作運(yùn)算指令1.邏輯“與”操作指1.邏輯“與”操作指令

ANL

A,Rn;(A)←(A)∧(Rn)ANL

A,direct;(A)←(A)∧(direct)ANL

A,@Ri;(A)←(A)∧((Ri))ANL

A,#data;(A)←(A)∧dataANL

direct,A;(direct)←(direct)∧(A)ANL

direct,#data;(direct)←(direct)∧data指令功能:將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯“與”操作,并將結(jié)果送回目的操作數(shù)的單元中。利用“與”操作可屏蔽一些位或影響標(biāo)志位。例如,要將一個(gè)字節(jié)中的高4位清“0”,可用0FH進(jìn)行“與”操作。1.邏輯“與”操作指令

ANLA,Rn;(A2.邏輯“或”操作指令ORL

A,Rn;(A)←(A)∨(Rn)ORL

A,direct;(A)←(A)∨(direct)ORL

A,@Ri;(A)←(A)∨((Ri))ORL

A,#data;(A)←(A)∨dataORL

direct,A;(direct)←(direct)∨(A)ORL

direct,#data;(direct)←(direct)∨data指令功能:將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯“或”操作,并將結(jié)果送回目的操作數(shù)的單元中。利用“或”操作可進(jìn)行數(shù)位的組合。例如,要把數(shù)字轉(zhuǎn)換成ASCII碼,可用30H進(jìn)行或操作。2.邏輯“或”操作指令ORLA,Rn;(A)3.邏輯“異或”指令(6條)解:完成本題有多種求解方法,現(xiàn)介紹其中兩種。

(1)利用MOVX

(2)利用MOVX3.邏輯“異或”指令(6條)解:完成本題有多種求解方法,現(xiàn)介(1)利用MOVX1W12.TIF(1)利用MOVX1W12.TIF(2)利用MOVX1)選用工作寄存器組中0區(qū)為工作區(qū)。

2)利用移位指令實(shí)現(xiàn)累加器A的內(nèi)容乘6。

1)ANLPSW,#11100111B;PSW的D4、D3位為00

2)CLRC(2)利用MOVX1)選用工作寄存器組中0區(qū)為工作區(qū)。

2)3.6位操作類指令3.6.1位變量傳送指令

3.6.2位變量修改指令

3.6.3位變量邏輯操作指令3.6位操作類指令3.6.1位變量傳送指令

3.6.23.6.1位變量傳送指令位變量傳送指令有互逆的2條,可實(shí)現(xiàn)進(jìn)位位C與某直接尋址位bit間內(nèi)容的傳送。MOV

C,bit;(CY)←(bit)MOV

bit,C;(bit)←(CY)指令功能:把源操作數(shù)的布爾變量送到目的操作數(shù)指定的位地址單元,其中一個(gè)操作數(shù)必須為進(jìn)位標(biāo)志CY,另一個(gè)操作數(shù)可以是任何可直接尋址位。3.6.1位變量傳送指令位變量傳送指令有互逆的2條,可實(shí)現(xiàn)3.6.2位變量修改指令位變量修改指令共有6條,分別是對(duì)位進(jìn)行清“0”、置“1”和取反指令,不影響其他標(biāo)志。CLR

C;(CY)←0CLR

bit;(bit)←0CPL

C;(CY)←(/CY)CPL

bit;(bit)←(/bit)SETB

C;(CY)←1SETB

bit;(bit)←13.6.2位變量修改指令位變量修改指令共有6條,分別是對(duì)位3.6.3位變量邏輯操作指令位變量邏輯操作指令包括位變量邏輯“與”和邏輯“或”,共有4條指令。ANL

C,bit;(CY)←(CY)∧(bit)ANL

C,/bit;(CY)←(CY)∧(/bit)ORL

C,bit;(CY)←(CY)∨(bit)ORL

C,/bit;(CY)←(CY)∨(/bit)【注意】位變量邏輯運(yùn)算指令中無邏輯“異或”(XRL)。3.6.3位變量邏輯操作指令位變量邏輯操作指令包括位變量邏3.6.3位變量邏輯操作指令圖3-11例3-29硬件邏輯電路3.6.3位變量邏輯操作指令圖3-11例3-29硬件邏輯3.7控制轉(zhuǎn)移類指令3.7.1無條件轉(zhuǎn)移指令

3.7.2條件轉(zhuǎn)移指令

3.7.3調(diào)用與返回指令3.7控制轉(zhuǎn)移類指令3.7.1無條件轉(zhuǎn)移指令

3.7.23.7.1無條件轉(zhuǎn)移指令1.絕對(duì)轉(zhuǎn)移指令(Absolute

2.相對(duì)轉(zhuǎn)移指令(Short

3.長(zhǎng)轉(zhuǎn)移指令(Long

4.間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)3.7.1無條件轉(zhuǎn)移指令1.絕對(duì)轉(zhuǎn)移指令(Absolute1.絕對(duì)轉(zhuǎn)移指令(Absolute1W13.TIF1.絕對(duì)轉(zhuǎn)移指令(Absolute1W13.TIF1.絕對(duì)轉(zhuǎn)移指令(Absolute1W14.TIF1.絕對(duì)轉(zhuǎn)移指令(Absolute1W14.TIF2.相對(duì)轉(zhuǎn)移指令

SJMP

rel;(PC)←(PC)+2+rel轉(zhuǎn)移范圍為當(dāng)前PC值的-128~+127范圍內(nèi),共256個(gè)單元。若偏移量rel取值為0FEH(-2的補(bǔ)碼),則目標(biāo)地址等于源地址,相當(dāng)于動(dòng)態(tài)停機(jī),程序終止在這條指令上,停機(jī)指令在調(diào)試程序時(shí)很有用。51系列單片機(jī)沒有專用的停機(jī)指令,若要求動(dòng)態(tài)停機(jī)可用SJMP指令來實(shí)現(xiàn):HERE:SJMP

HERE;動(dòng)態(tài)停機(jī)2.相對(duì)轉(zhuǎn)移指令

SJMPrel;(PC)←(PC)+23.長(zhǎng)轉(zhuǎn)移指令

LJMP

addr16;(PC)←addr16執(zhí)行該指令時(shí),將16位目標(biāo)地址addr16裝入PC,程序無條件轉(zhuǎn)向指定的目標(biāo)地址。轉(zhuǎn)移指令的目標(biāo)地址可在64KB程序存儲(chǔ)器地址空間的任何地方,不影響任何標(biāo)志。4.間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)JMP

@A+DPTR;(PC)←(A)+(DPTR)3.長(zhǎng)轉(zhuǎn)移指令

LJMPaddr16;(PC)←addr4.間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)JMP

@A+DPTR;(PC)←(A)+(DPTR)指令功能:把累加器A中的8位無符號(hào)數(shù)與數(shù)據(jù)指針DPTR的16位數(shù)相加,其和作為下一條指令的地址送入PC,不影響標(biāo)志位。間接轉(zhuǎn)移指令采用變址方式實(shí)現(xiàn)無條件轉(zhuǎn)移,其特點(diǎn)是轉(zhuǎn)移地址可以在程序運(yùn)行中加以改變。例如,把DPTR作為基地址時(shí),根據(jù)A的不同值就可以實(shí)現(xiàn)多分支轉(zhuǎn)移,故一條指令可完成多條條件判斷轉(zhuǎn)移指令功能。這種功能稱為散轉(zhuǎn)功能,所以間接指令又稱為散轉(zhuǎn)指令。4.間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)JMP@A+DPTR;(PC3.7.2條件轉(zhuǎn)移指令1.進(jìn)位/無進(jìn)位轉(zhuǎn)移指令

2.累加器內(nèi)容為零/非零轉(zhuǎn)移指令3.比較不相等轉(zhuǎn)移指令4.減1不為零轉(zhuǎn)移指令5.位測(cè)試指令3.7.2條件轉(zhuǎn)移指令1.進(jìn)位/無進(jìn)位轉(zhuǎn)移指令

2.累加器1.進(jìn)位/無進(jìn)位轉(zhuǎn)移指令JC

rel;(CY)=1,則(PC)←(PC)+2+rel

;(CY)=0,則(PC)←(PC)+2JNC

rel;(CY)=0,則(PC)←(PC)+2+rel

;(CY)=1,則(PC)←(PC)+2指令功能:第一條指令執(zhí)行時(shí),先判斷CY中的值。若CY=1,則程序發(fā)生轉(zhuǎn)移;若(CY)=0,則程序不轉(zhuǎn)移,繼續(xù)執(zhí)行原程序。第二條指令執(zhí)行時(shí)的情況與第一條指令恰好相反:若(CY)=0,則程序發(fā)生轉(zhuǎn)移;若(CY)=1,則程序不轉(zhuǎn)移,繼續(xù)執(zhí)行原程序。1.進(jìn)位/無進(jìn)位轉(zhuǎn)移指令JCrel;(CY)=1,則2.累加器內(nèi)容為零/非零轉(zhuǎn)移指令圖3-12JZ和JNZ指令執(zhí)行示意圖

a)JZrel指令b)JNZrel指令2.累加器內(nèi)容為零/非零轉(zhuǎn)移指令圖3-12JZ和JNZ指令3.比較不相等轉(zhuǎn)移指令1)這4條指令都是三字節(jié)指令,指令執(zhí)行時(shí)PC3次加1,然后再加地址偏移量rel。

2)指令執(zhí)行過程中的比較操作實(shí)際上是減法操作,但不保存兩數(shù)之差,產(chǎn)生CY標(biāo)志。

3)若參加比較的兩個(gè)操作數(shù)X和Y是無符號(hào)數(shù),則可以直接根據(jù)指令執(zhí)行后產(chǎn)生的CY來判斷兩個(gè)操作數(shù)的大小。

4)若參加比較的兩個(gè)操作數(shù)X和Y是有符號(hào)數(shù)補(bǔ)碼。3.比較不相等轉(zhuǎn)移指令1)這4條指令都是三字節(jié)指令,指令執(zhí)圖3-13帶符號(hào)數(shù)的比較方法圖3-13帶符號(hào)數(shù)的比較方法4.減1不為零轉(zhuǎn)移指令DJNZ

Rn,rel;兩字節(jié)指令DJNZ

direct,rel;三字節(jié)指令,direct可以是片內(nèi)RAM任意字節(jié)地址指令功能:把源操作數(shù)減1,結(jié)果回送到源操作數(shù)中去,如果結(jié)果不為0則轉(zhuǎn)移?!咀⒁狻窟@兩條指令均可以構(gòu)成循環(huán)結(jié)構(gòu)程序。4.減1不為零轉(zhuǎn)移指令DJNZRn,rel;兩字節(jié)指令5.位測(cè)試指令JB

bit,rel;(bit)=1,則(PC)←(PC)+3+rel

;(bit)=0,則(PC)←(PC)+3JNB

bit,rel;(bit)=0,則(PC)←(PC)+3+rel

;(bit)=1,則(PC)←(PC)+3JBC

bit,rel;(bit)=1,則(PC)←(PC)+3+rel且(bit)←0

;(bit)=0,則(PC)←(PC)+3指令功能:當(dāng)某一特定條件滿足時(shí),執(zhí)行轉(zhuǎn)移操作指令(相當(dāng)于一條相對(duì)轉(zhuǎn)移指令);條件不滿足時(shí),順序執(zhí)行下面的一條指令。5.位測(cè)試指令JBbit,rel;(解:程序如下:圖3-14按鍵連接圖及流程圖解:程序如下:圖3-14按鍵連接圖及流程圖解:程序如下。圖3-15主程序與子程序結(jié)構(gòu)

a)二次調(diào)用b)二級(jí)子程序嵌套解:程序如下。圖3-15主程序與子程序結(jié)構(gòu)

a)二次調(diào)用3.7.3調(diào)用與返回指令1.絕對(duì)調(diào)用指令(Absolute

2.長(zhǎng)調(diào)用指令(Long

3.返回指令(2條)

4.空操作指令(1條)3.7.3調(diào)用與返回指令1.絕對(duì)調(diào)用指令(Absolute3.7.3調(diào)用與返回指令圖3-16二級(jí)子程序嵌套及斷點(diǎn)地址存放

a)二級(jí)子程序嵌套示意圖b)轉(zhuǎn)入子程序2時(shí)的堆棧3.7.3調(diào)用與返回指令圖3-16二級(jí)子程序嵌套及斷點(diǎn)地1.絕對(duì)調(diào)用指令(Absolute1)(PC)+2→(PC),并壓入堆棧,先壓入PC低8位,后壓入PC高8位。

2)PC15~11a10~0→PC,獲得子程序起始地址。1.絕對(duì)調(diào)用指令(Absolute1)(PC)+2→(P圖3-17例3-36圖圖3-17例3-36圖2.長(zhǎng)調(diào)用指令(Long1)(PC)+3→(PC),并壓入堆棧,先壓入PC的低8位,后壓入PC的高8位。

2)addr16→PC,獲得子程序起始地址。

3)可調(diào)用64KB地址范圍內(nèi)的任意子程序。

1)轉(zhuǎn)移指令不保存返回地址,而子程序調(diào)用指令在轉(zhuǎn)向目的地址的同時(shí),必須保留返回地址(也稱為斷點(diǎn)地址),以便執(zhí)行返回指令時(shí)回到主程序斷點(diǎn)的位置。

2)堆棧是片內(nèi)RAM中一片存儲(chǔ)區(qū),采用先進(jìn)后出的原則存取數(shù)據(jù),調(diào)用時(shí)保護(hù)斷點(diǎn)的工作由調(diào)用指令完成,調(diào)用后恢復(fù)斷點(diǎn)的工作由返回指令完成。2.長(zhǎng)調(diào)用指令(Long1)(PC)+3→(PC),并壓3.返回指令(2條)(1)子程序的返回

(2)中斷返回指令3.返回指令(2條)(1)子程序的返回

(2)中斷返回指(1)子程序的返回RET;PC15~PC8←(SP),(SP)←(SP)-1

;PC7~PC0←(SP),(SP)←(SP)-1指令功能:RET(Return)指令從堆棧中取出16位斷點(diǎn)地址送回PC,使子程序返回主程序。(1)子程序的返回RET;PC15~PC8←(SP),(2)中斷返回指令RETI;PC15~PC8←(SP),(SP)←(SP)-1

;PC7~PC0←(SP),(SP)←(SP)-1指令功能:RETI(ReturnforInterrupt)將堆棧頂部2字節(jié)的內(nèi)容送到PC中,該指令用于中斷服務(wù)程序的末尾。與RET指令不同之處:RETI指令還具有清除中斷優(yōu)先級(jí)觸發(fā)器狀態(tài)、恢復(fù)中斷邏輯等功能。(2)中斷返回指令RETI;PC15~PC8←(SP),((2)中斷返回指令圖3-18紅綠燈和P1口連接圖(2)中斷返回指令圖3-18紅綠燈和P1口連接圖4.空操作指令(1條)1)該指令不執(zhí)行任何操作,僅僅將PC加1,使程序繼續(xù)向下執(zhí)行。

2)該指令為單周期指令,所以在時(shí)間上占用一個(gè)機(jī)器周期,常用于程序的等待或時(shí)間的延遲。4.空操作指令(1條)1)該指令不執(zhí)行任何操作,僅僅將PC3.8匯編語言程序設(shè)計(jì)3.8.1匯編語言程序設(shè)計(jì)概述

3.8.2常用偽指令

3.8.3順序結(jié)構(gòu)程序設(shè)計(jì)

3.8.4分支結(jié)構(gòu)程序設(shè)計(jì)

3.8.5循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

3.8.6子程序設(shè)計(jì)

3.8.7綜合編程舉例3.8匯編語言程序設(shè)計(jì)3.8.1匯編語言程序設(shè)計(jì)概述

33.8.1匯編語言程序設(shè)計(jì)概述1.程序設(shè)計(jì)的三種語言

2.匯編語言程序設(shè)計(jì)思路3.8.1匯編語言程序設(shè)計(jì)概述1.程序設(shè)計(jì)的三種語言

2.1.程序設(shè)計(jì)的三種語言(1)機(jī)器語言

(2)匯編語言

(3)高級(jí)語言1.程序設(shè)計(jì)的三種語言(1)機(jī)器語言

(2)匯編語言

((1)機(jī)器語言在計(jì)算機(jī)中,用二進(jìn)制代碼表示的指令、數(shù)字和符號(hào)簡(jiǎn)稱為機(jī)器語言。直接用機(jī)器語言編寫的程序稱為機(jī)器語言程序。但是用機(jī)器語言編制的程序不易看懂,難于編寫、難于查錯(cuò)和難于交流,容易出錯(cuò)。(1)機(jī)器語言在計(jì)算機(jī)中,用二進(jìn)制代碼表示的指令、數(shù)字和符(2)匯編語言匯編語言是一種面向機(jī)器的程序設(shè)計(jì)語言,它用英文字符來代替對(duì)應(yīng)的機(jī)器語言。例如,用ADD代替機(jī)器語言中的加法運(yùn)算,這些英文字符被稱為助記符。(2)匯編語言匯編語言是一種面向機(jī)器的程序設(shè)計(jì)語言,它用英(3)高級(jí)語言計(jì)算機(jī)高級(jí)語言是一種面向算法、過程和對(duì)象的程序設(shè)計(jì)語言,它采用更接近人們習(xí)慣的自然語言和數(shù)學(xué)語言描述算法、過程和對(duì)象,如BASIC、C、Java等都是常用的高級(jí)語言。(3)高級(jí)語言計(jì)算機(jī)高級(jí)語言是一種面向算法、過程和對(duì)象的程2.匯編語言程序設(shè)計(jì)思路(1)分析問題,確定算法

(2)畫程序流程圖

(3)編寫源程序

(4)匯編和調(diào)試2.匯編語言程序設(shè)計(jì)思路(1)分析問題,確定算法

(2)(1)分析問題,確定算法先對(duì)所需解決的問題進(jìn)行分析,明確目的和任務(wù),了解現(xiàn)有條件和目標(biāo)要求后再確定解決該問題的方法和步驟,即通常所說的算法。對(duì)于一個(gè)問題,一般有多種不同的解決方案,通過比較從中挑選最優(yōu)方案。(1)分析問題,確定算法先對(duì)所需解決的問題進(jìn)行分析,明確目(2)畫程序流程圖把算法用流程圖描述出來,即用流程圖中的各種圖形、符號(hào)、流向線等來描述程序設(shè)計(jì)的過程,它可以清晰表達(dá)程序的設(shè)計(jì)思路。起止框:開始和結(jié)束框,在程序的開始和結(jié)束時(shí)使用。判斷框:進(jìn)行條件判斷,以決定程序的流向。處理框:表示各種處理和運(yùn)算。流向線:表示程序執(zhí)行的流向。連接點(diǎn):圈中標(biāo)注相同數(shù)字或符號(hào)的,表示連接在一起。(2)畫程序流程圖把算法用流程圖描述出來,即用流程圖中的(3)編寫源程序根據(jù)流程圖中各部分的功能,選取合適的指令和結(jié)構(gòu)編寫出具體程序。(3)編寫源程序根據(jù)流程圖中各部分的功能,選取合適的指令和(4)匯編和調(diào)試對(duì)已編寫好的程序,先進(jìn)行匯編。在匯編過程中,若還有語法錯(cuò)誤,需要對(duì)源程序進(jìn)行修改。匯編工作完成后,上機(jī)調(diào)試運(yùn)行。先輸入給定的數(shù)據(jù),運(yùn)行程序,檢查運(yùn)行結(jié)果是否正確,若發(fā)現(xiàn)錯(cuò)誤,通過分析,再對(duì)源程序進(jìn)行修改。(4)匯編和調(diào)試對(duì)已編寫好的程序,先進(jìn)行匯編。在匯編過程中3.8.2常用偽指令1.匯編起始地址偽指令

2.匯編結(jié)束偽指令

3.定義字節(jié)數(shù)據(jù)偽指令

4.定義字?jǐn)?shù)據(jù)偽指令

5.賦值偽指令

6.數(shù)據(jù)地址賦值偽指令

7.位地址符號(hào)定義偽指令3.8.2常用偽指令1.匯編起始地址偽指令

2.匯編結(jié)束偽1.匯編起始地址偽指令對(duì)已編寫好的程序,先進(jìn)行匯編。在匯編過程中,若還有語法錯(cuò)誤,需要對(duì)源程序進(jìn)行修改。匯編工作完成后,上機(jī)調(diào)試運(yùn)行。先輸入給定的數(shù)據(jù),運(yùn)行程序,檢查運(yùn)行結(jié)果是否正確,若發(fā)現(xiàn)錯(cuò)誤,通過分析,再對(duì)源程序進(jìn)行修改。1.匯編起始地址偽指令對(duì)已編寫好的程序,先進(jìn)行匯編。在匯編過2.匯編結(jié)束偽指令格式:END指令功能:END是匯編源程序的結(jié)束標(biāo)志,在整個(gè)源程序中只能有一條END命令,且位于程序的最后。如果END命令出現(xiàn)在中間,則其后的源程序匯編時(shí)將不予處理。2.匯編結(jié)束偽指令格式:3.定義字節(jié)數(shù)據(jù)偽指令格式:[標(biāo)號(hào):]DB

8位字?jǐn)?shù)據(jù)表指令功能:DB(DefinitionByte)命令用于定義從指定的地址開始,在程序存儲(chǔ)器的連續(xù)單元中定義字?jǐn)?shù)據(jù)。常用于存放數(shù)據(jù)表格。說明:字節(jié)數(shù)據(jù)可以是一字節(jié)常數(shù)或字符,或用逗號(hào)分開的字符串,或用引號(hào)括起來的字符串。3.定義字節(jié)數(shù)據(jù)偽指令格式:4.定義字?jǐn)?shù)據(jù)偽指令格式:[標(biāo)號(hào):]DW

16位字?jǐn)?shù)據(jù)表指令功能:DW(DefinitionWord)命令用于定義從指定地址開始,在程序存儲(chǔ)器的連續(xù)單元中定義16位的字?jǐn)?shù)據(jù)。說明:存放時(shí),數(shù)據(jù)的高8位在前(低地址),低8位在后(高地址)。4.定義字?jǐn)?shù)據(jù)偽指令格式:5.賦值偽指令格式:字符名稱EQU賦值項(xiàng)指令功能:EQU(Equate)用于給字符名稱賦值。賦值后,其符號(hào)值在整個(gè)程序中有效。說明:賦值項(xiàng)可以是常數(shù)、地址、標(biāo)號(hào)或表達(dá)式。其值為8位或16位二進(jìn)制數(shù)。賦值以后的字符名稱既可以作立即數(shù)使用,也可以作地址使用。必須先定義后使用,放在程序開頭。5.賦值偽指令格式:6.數(shù)據(jù)地址賦值偽指令1)EQU指令可以把一個(gè)匯編符號(hào)賦給一個(gè)字符名稱,而DATA指令不能。

2)EQU指令應(yīng)先定義后使用,而DATA指令可以先使用后定義。6.數(shù)據(jù)地址賦值偽指令1)EQU指令可以把一個(gè)匯編符號(hào)賦給7.位地址符號(hào)定義偽指令格式:字符名稱BIT位地址指令功能:用于給字符名稱賦以位地址。說明:位地址可以是絕對(duì)地址,也可以是符號(hào)地址(即位符號(hào)名稱)。例如:KEY0

BIT

P1.0表示把P1.0的位地址賦給變量KEY0,在其后的編程過程中,KEY0就可以作為位地址(P1.0)使用。7.位地址符號(hào)定義偽指令格式:3.8.3順序結(jié)構(gòu)程序設(shè)計(jì)解:兩位壓縮BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)的算法為:(a1a0)BCD=10×a1+a0,程序流程圖如圖3-19所示。3.8.3順序結(jié)構(gòu)程序設(shè)計(jì)解:兩位壓縮BCD碼轉(zhuǎn)換成二進(jìn)制3.8.3順序結(jié)構(gòu)程序設(shè)計(jì)圖3-19例3-38流程圖3.8.3順序結(jié)構(gòu)程序設(shè)計(jì)圖3-19例3-38流程圖3.8.4分支結(jié)構(gòu)程序設(shè)計(jì)1)建立測(cè)試條件。

2)選用合適的條件轉(zhuǎn)移指令。

3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號(hào)。

1.單分支程序

2.多分支程序3.8.4分支結(jié)構(gòu)程序設(shè)計(jì)1)建立測(cè)試條件。

2)選用3.8.4分支結(jié)構(gòu)程序設(shè)計(jì)圖3-20分支結(jié)構(gòu)圖3.8.4分支結(jié)構(gòu)程序設(shè)計(jì)圖3-20分支結(jié)構(gòu)圖圖3-21分支程序結(jié)構(gòu)圖

a)單分支結(jié)構(gòu)圖b)雙分支結(jié)構(gòu)圖c)多支結(jié)構(gòu)圖圖3-21分支程序結(jié)構(gòu)圖

a)單分支結(jié)構(gòu)圖b)雙分支結(jié)構(gòu)1.單分支程序單分支程序是通過條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件對(duì)程序的執(zhí)行結(jié)果進(jìn)行判斷,條件滿足則進(jìn)行程序轉(zhuǎn)移,條件不滿足則程序順序執(zhí)行。在51系列單片機(jī)指令系統(tǒng)中,可利用JZ、JNZ、CJNE、DJNZ、JC、JNC、JB、JNB、JBC等指令,完成為0、為1、為正、為負(fù)以及相等、不相等各種條件判斷。1.單分支程序單分支程序是通過條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件解:根據(jù)題意,程序流程如圖3-22所示。圖3-22例3-39流程圖解:根據(jù)題意,程序流程如圖3-22所示。圖3-22例3-32.多分支程序1)使用多條CJNE指令,通過逐次比較,實(shí)現(xiàn)多分支程序轉(zhuǎn)移。

2)使用查地址表方法實(shí)現(xiàn)多分支程序轉(zhuǎn)移。2.多分支程序1)使用多條CJNE指令,通過逐次比較,實(shí)現(xiàn)圖3-23例題3-41程序流程圖圖3-23例題3-41程序流程圖3.8.5循環(huán)結(jié)構(gòu)程序設(shè)計(jì)1)循環(huán)初始化。

2)循環(huán)體。

3)循環(huán)控制。

4)循環(huán)結(jié)束。

1.單重循環(huán)程序

2.多重循環(huán)程序3.8.5循環(huán)結(jié)構(gòu)程序設(shè)計(jì)1)循環(huán)初始化。

2)循環(huán)體圖3-24循環(huán)程序結(jié)構(gòu)

a)先處理后控制b)先控制后處理圖3-24循環(huán)程序結(jié)構(gòu)

a)先處理后控制b)先控制后處理圖3-25例3-42流程圖圖3-25例3-42流程圖圖3-26例3-43流程圖圖3-26例3-43流程圖圖3-27例3-44圖

a)硬件連線圖b)程序流程圖圖3-27例3-44圖

a)硬件連線圖b)程序流程圖3.8.6子程序設(shè)計(jì)1.子程序的調(diào)用與返回

2.保存與恢復(fù)寄存器內(nèi)容

3.子程序的參數(shù)傳遞

4.子程序的嵌套

5.典型子程序設(shè)計(jì)

0123456789ABCDEF3.8.6子程序設(shè)計(jì)1.子程序的調(diào)用與返回

2.保存與恢復(fù)1.子程序的調(diào)用與返回(1)子程序的調(diào)用

(2)子程序的返回1.子程序的調(diào)用與返回(1)子程序的調(diào)用

(2)子程序的2.保存與恢復(fù)寄存器內(nèi)容(1)保護(hù)現(xiàn)場(chǎng)

(2)恢復(fù)現(xiàn)場(chǎng)2.保存與恢復(fù)寄存器內(nèi)容(1)保護(hù)現(xiàn)場(chǎng)

(2)恢復(fù)現(xiàn)場(chǎng)3.子程序的參數(shù)傳遞1)應(yīng)用工作寄存器或累加器傳遞參數(shù)。

2)應(yīng)用內(nèi)存單元。

3)應(yīng)用堆棧傳遞參數(shù)。

4)利用位地址傳送子程序參數(shù)。3.子程序的參數(shù)傳遞1)應(yīng)用工作寄存器或累加器傳遞參數(shù)。

圖3-28子程序嵌套示意圖圖3-28子程序嵌套示意圖4.子程序的嵌套在子程序中若再調(diào)用子程序,稱為子程序的嵌套,如圖3-28所示。51系列單片機(jī)也允許多重嵌套。4.子程序的嵌套在子程序中若再調(diào)用子程序,稱為子程序的嵌套,5.典型子程序設(shè)計(jì)(1)延時(shí)程序

(2)查表程序

(3)代碼轉(zhuǎn)換程序5.典型子程序設(shè)計(jì)(1)延時(shí)程序

(2)查表程序

(3)(1)延時(shí)程序解:根據(jù)題意,延時(shí)子程序的時(shí)限可以有以下幾種方法。

1)單循環(huán)延時(shí),延時(shí)時(shí)間Δt=(2×10+1+2)μs=23μs

2)雙重循環(huán)延時(shí),延時(shí)時(shí)間Δt=[(2×100+2+1)×10+1+2]μs=2033μs

3)三重循環(huán)延時(shí),程序流程如圖3-29所示。(1)延時(shí)程序解:根據(jù)題意,延時(shí)子程序的時(shí)限可以有以下幾種(1)延時(shí)程序圖3-29延時(shí)子程序

流程圖(1)延時(shí)程序圖3-29延時(shí)子程序

流程圖(2)查表程序解:計(jì)算某數(shù)的二次方可采用查表的方法實(shí)現(xiàn),并編寫成子程序。只要兩次調(diào)用子程序,并求和就可得運(yùn)算結(jié)果。(2)查表程序解:計(jì)算某數(shù)的二次方可采用查表的方法實(shí)現(xiàn),并圖3-30例3-46流程圖圖3-30例3-46流程圖(3)代碼轉(zhuǎn)換程序解:在單片機(jī)匯編程序設(shè)計(jì)中,主要涉及十六進(jìn)制的16個(gè)符號(hào)“0~F”的ASCII碼及其數(shù)值的轉(zhuǎn)換。ASCII碼是有一定規(guī)律的,數(shù)字0~9的ASCII碼為該數(shù)值加上30H,而對(duì)于字母“A~F”的ASCII碼為該數(shù)值加上37H?!?~F”對(duì)應(yīng)的ASCII碼如下:(3)代碼轉(zhuǎn)換程序解:在單片機(jī)匯編程序設(shè)計(jì)中,主要涉及十六1)入口參數(shù)。

2)出口參數(shù)。

(4)算術(shù)運(yùn)算子程序1)入口參數(shù)。

2)出口參數(shù)。

(4)算術(shù)運(yùn)算子程序1W20.TIF1W20.TIF3.8.7綜合編程舉例1)輸入信號(hào)。

2)輸出信號(hào)。

(1)將累加器內(nèi)容送工作寄存器R0。

(2)將累加器內(nèi)容送片內(nèi)RAM的7BH單元。

(3)將累加器內(nèi)容送片外RAM的7BH單元。

(4)將累加器內(nèi)容送片外RAM的007BH單元。

(5)將片外ROM中007BH單元內(nèi)容送累加器。

(1)MOVA,#24H與MOVA,24H

(2)MOVA,R0與MOVA,@R0

(3)MOVA,@R0與MOVXA,@R0

(1)MOVR0,#30H

(2)MOVA,@R0

(3)MOVR1,A3.8.7綜合編程舉例1)輸入信號(hào)。

2)輸出信號(hào)。

3.8.7綜合編程舉例(4)MOVB,@Rl

(5)MOV@R0,P1

(6)MOVP3,P1

(7)MOV10H,#20H

(8)MOV30H,10H

(1)MOVR6,A

(2)MOV@R0,A

(3)MOVA,#90H

(4)MOVA,90H

(5)MOV80H,#81H

(6)MOVX@R0,A

(7)PUSHA

(8)SWAPA3.8.7綜合編程舉例(4)MOVB,@Rl

(5)3.8.7綜合編程舉例(9)XCHA,R0

(1)MOVA,@R1

(2)MOVX@DPTR,A

(3)MOVCA,@A+DPTR

(4)XCHDA,@R1

(1)ADDA,@R1

(2)ADDCA,78H

(3)SUBBA,#77H

(4)INCR1

(5)DEC78H

(6)MULAB

(7)DIVAB

(8)ANL78H,#78H3.8.7綜合編程舉例(9)XCHA,R0

(1)M3.8.7綜合編程舉例(9)ORLA,#0FH

(10)XRL80H,A3.8.7綜合編程舉例(9)ORLA,#0FH

(10圖3-31例3-49圖圖3-31例3-49圖圖3-32例3-50圖圖3-32例3-50圖圖3-33例題3-51程序流程圖圖3-33例題3-51程序流程圖(10)XRL80H,A圖3-34習(xí)題3-27圖(10)XRL80H,A圖3-34習(xí)題3-27圖第3章51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法(1)理解指令的尋址方式及相應(yīng)的尋址空間。

(2)理解51系列單片機(jī)的111條基本指令的含義,熟練掌握其應(yīng)用方法。

(3)了解機(jī)器語言、匯編語言和高級(jí)語言的特點(diǎn)、匯編語言程序設(shè)計(jì)步驟。

(4)掌握匯編語言的基本格式,熟練掌握匯編語言的程序設(shè)計(jì)思想和設(shè)計(jì)方法。

(5)理解子程序的特點(diǎn),掌握子程序的設(shè)計(jì)方法和設(shè)計(jì)中應(yīng)該注意的問題。

3.1指令系統(tǒng)概述

3.2尋址方式

3.3數(shù)據(jù)傳送類指令

5.16位數(shù)據(jù)的傳遞指令(1條)

3.4算術(shù)運(yùn)算類指令第3章51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法(1)理解指第3章51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法3.5邏輯運(yùn)算類指令

3.6位操作類指令

3.7控制轉(zhuǎn)移類指令

3.8匯編語言程序設(shè)計(jì)第3章51系列單片機(jī)的指令系統(tǒng)和程序設(shè)計(jì)方法3.5邏輯運(yùn)3.1指令系統(tǒng)概述3.1.1指令分類

3.1.2指令格式

3.1.3指令中常用縮寫符號(hào)的意義3.1指令系統(tǒng)概述3.1.1指令分類

3.1.2指令格3.1.1指令分類1.按指令功能可分為五類

2.按指令執(zhí)行所需要的時(shí)間可分為三類

3.按指令所占的字節(jié)數(shù)可分為三類3.1.1指令分類1.按指令功能可分為五類

2.按指令執(zhí)行1.按指令功能可分為五類1)數(shù)據(jù)傳送類指令(29條):內(nèi)部8位數(shù)據(jù)傳送指令15條,內(nèi)部16位數(shù)據(jù)傳送指令1條,外部數(shù)據(jù)傳送指令4條,交換、查表和堆棧操作指令9條。

2)算術(shù)傳送類指令(24條):加法指令14條(包括BCD碼調(diào)整指令1條),減法指令8條,乘/除法指令各1條。

3)邏輯運(yùn)算類指令(24條):邏輯運(yùn)算指令20條,循環(huán)移位指令4條。

4)位操作指令(12條):位傳送指令2條,位置位、位清“0”和位取反指令6條,位運(yùn)算指令4條。

5)控制轉(zhuǎn)移類指令(22條):無條件轉(zhuǎn)移指令4條,條件轉(zhuǎn)移指令8條,調(diào)用和返回指令5條,位測(cè)試轉(zhuǎn)移指令3條,判別CY標(biāo)志轉(zhuǎn)移指令2條。1.按指令功能可分為五類1)數(shù)據(jù)傳送類指令(29條):內(nèi)部82.按指令執(zhí)行所需要的時(shí)間可分為三類1)單周期指令(64條)。

2)雙周期指令(45條)。

3)四周期指令(2條)。2.按指令執(zhí)行所需要的時(shí)間可分為三類1)單周期指令(64條)3.按指令所占的字節(jié)數(shù)可分為三類1)單字節(jié)指令(49條)。

2)雙字節(jié)指令(46條)。

3)三字節(jié)指令(16條)。3.按指令所占的字節(jié)數(shù)可分為三類1)單字節(jié)指令(49條)。

3.1.2指令格式1.指令格式介紹

2.指令中數(shù)據(jù)的表示3.1.2指令格式1.指令格式介紹

2.指令中數(shù)據(jù)的表示1.指令格式介紹1)匯編語言語句由標(biāo)號(hào)、操作碼、操作數(shù)和注釋四部分組成。

2)標(biāo)號(hào)位于語句的開始,由1~8個(gè)ASCII字符組成,第一個(gè)字符必須是字母。

3)操作碼是用英文縮寫的指令功能助記符。

4)操作數(shù)在操作碼之后,兩者用空格分開。

5)注釋在語句的最后,以分號(hào)“;”開始,是說明性的文字,與語句的具體功能無關(guān),但是能增加程序的可閱讀性,便于程序的調(diào)試與交流。1.指令格式介紹1)匯編語言語句由標(biāo)號(hào)、操作碼、操作數(shù)和注釋2.指令中數(shù)據(jù)的表示1)十進(jìn)制數(shù)以D結(jié)尾,也可以省略,如55D或55。

2)十六進(jìn)制數(shù)以H結(jié)尾,如55H。

3)二進(jìn)制數(shù)以B結(jié)尾,如00110011B。

4)八進(jìn)制數(shù)以O(shè)或Q結(jié)尾,如55O或55Q。

5)字符串用“”括起來,如′M′表示字符M的ASCII碼。2.指令中數(shù)據(jù)的表示1)十進(jìn)制數(shù)以D結(jié)尾,也可以省略,如553.1.3指令中常用縮寫符號(hào)的意義1)#data:8位立即數(shù)。

2)#data16:16位立即數(shù)。

3)Rn:工作寄存器,R0~R7,n=0~7。

4)Ri:工作寄存器,i=0或1。

5)@:間接地址符號(hào)。

6)direct:8位直接地址,可以是特殊功能寄存器(SFR)的地址或片內(nèi)RAM單元地址。

7)addr11:11位目的地址。

8)addr16:16位目的地址。

9)rel:有符號(hào)的8位偏移地址,主要用于所有的條件轉(zhuǎn)移指令和SJMP指令。

10)bit:位地址。

11)/:位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反,如/bit。3.1.3指令中常用縮寫符號(hào)的意義1)#data:8位立即3.1.3指令中常用縮寫符號(hào)的意義12):當(dāng)前指令存放的地址。

13)(X):表示由X所指定的某寄存器或某單元中的內(nèi)容。

14)((X)):表示由X間接尋址單元中的內(nèi)容。

15)B:通用寄存器,常用于乘法MUL和除法DIV的指令。

16)C:進(jìn)位標(biāo)志位或者布爾處理器中的累加器。

17)←:表示指令的操作結(jié)果是將箭頭右邊的內(nèi)容傳送到左邊。3.1.3指令中常用縮寫符號(hào)的意義12):當(dāng)前指令存放的地3.2尋址方式3.2.1立即尋址

3.2.2直接尋址

3.2.3寄存器尋址

3.2.4寄存器間接尋址

3.2.5變址尋址

3.2.6相對(duì)尋址

3.2.7位尋址3.2尋址方式3.2.1立即尋址

3.2.2直接尋址

3.2.1立即尋址立即尋址是指指令中直接給出操作數(shù)的尋址方式。立即數(shù)用前面加有#號(hào)的8位或16位數(shù)來表示。立即數(shù)是指令代碼的一部分,只能作源操作數(shù)。這種尋址方式主要用于對(duì)特殊功能寄存器和指定的存儲(chǔ)單元賦初值。3.2.1立即尋址立即尋址是指指令中直接給出操作數(shù)的尋址方3.2.2直接尋址1)特殊功能寄存器(SFR):直接尋址是唯一的訪問形式。

2)片內(nèi)RAM低128B單元(地址范圍00H~7FH)。

3)221個(gè)位地址空間。3.2.2直接尋址1)特殊功能寄存器(SFR):直接尋址3.2.3寄存器尋址寄存器尋址是指操作數(shù)存放于寄存器中(Rn、A、B、DPTR、CY)的尋址方式。例如:MOV

A,R7;(A)←(R7)其功能是把寄存器R7內(nèi)的操作數(shù)傳送到累加器A中。由于操作數(shù)在R7中,因此在指令中指定了R7,就能從中取得操作數(shù)。3.2.3寄存器尋址寄存器尋址是指操作數(shù)存放于寄存器中(R3.2.4寄存器間接尋址圖3-1寄存器間接尋址示意圖3.2.4寄存器間接尋址圖3-1寄存器間接尋址示意圖3.2.5變址尋址圖3-2變址尋址示意圖3.2.5變址尋址圖3-2變址尋址示意圖3.2.6相對(duì)尋址1)當(dāng)前PC值是指相對(duì)轉(zhuǎn)移指令所在地址(一般稱為源地址)加上轉(zhuǎn)移指令字節(jié)數(shù),即當(dāng)前PC值=源地址+轉(zhuǎn)移指令字節(jié)數(shù)。

2)偏移量rel是有符號(hào)的單字節(jié)數(shù),以補(bǔ)碼表示,其相對(duì)值的范圍是-128~+127,負(fù)數(shù)表示從當(dāng)前地址向地址減小的方向轉(zhuǎn)移,正數(shù)表示從當(dāng)前地址向地址增大的方向轉(zhuǎn)移。3.2.6相對(duì)尋址1)當(dāng)前PC值是指相對(duì)轉(zhuǎn)移指令所在地址(圖3-3相對(duì)尋址示意圖

a)指令JZ08H尋址示意圖b)指令JZ0F4H尋址示意圖圖3-3相對(duì)尋址示意圖

a)指令JZ08H尋址示意圖b3.2.7位尋址1)直接使用位地址。

2)位名稱表示方法。

3)單元地址加位數(shù)的表示方法。

4)專用寄存器符號(hào)加位數(shù)的表示方法。3.2.7位尋址1)直接使用位地址。

2)位名稱表示方法。表3-17種尋址方式及尋址空間序號(hào)尋址方式尋址空間范圍1寄存器尋址R0~R7,A,B,CY,DPTR寄存器2立即尋址程序存儲(chǔ)器3寄存器間址片內(nèi)RAM的00H~0FFH,片外RAM4直接尋址片內(nèi)RAM的00H~7FH,SFR5變址尋址程序存儲(chǔ)器6相對(duì)尋址程序存儲(chǔ)器7位尋址片內(nèi)RAM的20H~2FH的128位,SFR中的93位表3-17種尋址方式及尋址空間序號(hào)尋址方式尋址空間范圍13.3數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令3.3數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令1.以累加器為目的操作數(shù)的指令(4條)

2.以寄存器Rn為目的操作數(shù)的指令(3條)

3.以直接地址為目的操作數(shù)的指令(5條)

4.以間接地址為目的操作數(shù)的指令(3條)3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令1.以累加器為目的操作數(shù)3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令圖3-4片內(nèi)RAM間數(shù)據(jù)傳遞關(guān)系3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令圖3-4片內(nèi)RAM間數(shù)1.以累加器為目的操作數(shù)的指令(4條)MOV

A,Rn;(A)←(Rn),(n=0~7)MOV

A,direct;(A)←(direct)MOV

A,@Ri;(A)←((Ri))(i=0、1)MOV

A,#data;(A)←data這組指令的目的操作數(shù)都是累加器A,源操作數(shù)的尋址方式采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址。1.以累加器為目的操作數(shù)的指令(4條)MOVA,Rn2.以寄存器Rn為目的操作數(shù)的指令(3條)MOV

Rn,A;(Rn)←(A),(n=0~7)MOV

Rn,direct;(Rn)←(direct),(n=0~7)MOV

Rn,#data;(Rn)←data,(n=0~7)這組指令都是以工作寄存器為目的操作數(shù),源操作數(shù)的尋址方式采用寄存器尋址、直接尋址和立即尋址。2.以寄存器Rn為目的操作數(shù)的指令(3條)MOVRn,A;3.以直接地址為目的操作數(shù)的指令(5條)MOV

direct,A;(direct)←(A)MOV

direct,Rn;(direct)←(Rn),(n=0~7)MOV

directl,direct2;(direct1)←(direct2)MOV

direct,@Ri;(direct)←((Ri)),(i=0、1)MOV

direct,#data;(direct)←data這組指令的目的操作數(shù)都是直接尋址單元,源操作數(shù)采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址。3.以直接地址為目的操作數(shù)的指令(5條)MOVdirect4.以間接地址為目的操作數(shù)的指令(3條)MOV

@Ri,A;((Ri))←(A)MOV

@Ri,direct;((Ri))←(direct)MOV

@Ri,#data;((Ri))←data這組指令的目的操作數(shù)都是間接尋址單元,源操作數(shù)可采用寄存器尋址、直接尋址和立即尋址方式。4.以間接地址為目的操作數(shù)的指令(3條)MOV@Ri,A5.16位數(shù)據(jù)的傳遞指令(1條)(1)MOVA,R0和MOVA,@R0

(2)MOVA,#40H和MOVA,40H

3.3.2片外RAM數(shù)據(jù)傳送類指令

3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令

3.3.4數(shù)據(jù)交換類指令

3.3.5堆棧操作類指令5.16位數(shù)據(jù)的傳遞指令(1條)(1)MOVA,R0和(2)MOVA,#40H和MOVA,40H解:它們的執(zhí)行結(jié)果為

解:運(yùn)行結(jié)果為

解:上述指令均是錯(cuò)誤的。

解法一:MOV55H,15H

解法二:MOVR6,15H

解法三:MOVR1,#15H

解法四:MOVA,15H

解:30H和40H單元中都裝有數(shù)據(jù),要想把其中的內(nèi)容相交換必須尋求第三個(gè)存儲(chǔ)單元對(duì)其中的一個(gè)數(shù)進(jìn)行緩沖,這個(gè)存儲(chǔ)單元若選為累加器A,則相應(yīng)程序如下:(2)MOVA,#40H和MOVA,40H解:它3.3.2片外RAM數(shù)據(jù)傳送類指令1)要訪問片外RAM,必須知道片外RAM單元的地址,在后兩條指令中,地址是被直接放在DPTR中,可尋址片外RAM的64KB空間。

2)使用訪問片外RAM數(shù)據(jù)傳送指令時(shí),應(yīng)當(dāng)首先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀或者寫命令。

3)也可以由P2與R0或P2與R1組成16位地址指針,尋址片外RAM的64KB空間。3.3.2片外RAM數(shù)據(jù)傳送類指令1)要訪問片外RAM,必3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令1)MOVCA,@A+DPTR:這條指令的執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址無關(guān)。

2)MOVCA,@A+PC:這條指令的優(yōu)點(diǎn)是不改變SFR和PC的狀態(tài),只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令1)MOVC3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令圖3-5查表指令3.3.3程序存儲(chǔ)器向累加器A傳送數(shù)據(jù)類指令圖3-5查表圖3-60~9二次方值表圖3-60~9二次方值表3.3.4數(shù)據(jù)交換類指令1.字節(jié)交換指令(Exchange,XCH

2.半字節(jié)交換指令(1條)

3.累加器A高低半字節(jié)交換指令(1條)3.3.4數(shù)據(jù)交換類指令1.字節(jié)交換指令(Exchange1.字節(jié)交換指令(Exchange,XCHXCH

A,Rn;(A)←→(Rn)XCH

A,@Ri;(A)←→((Ri))XCH

A,direct;(A)←→(direct)指令功能:將累加器A的內(nèi)容與源操作數(shù)(Rn、direct或@Ri)所指定單元的內(nèi)容相互交換。1.字節(jié)交換指令(Exchange,XCHXCHA,Rn2.半字節(jié)交換指令(1條)XCHDA,@Ri;(A)3~0←→((Ri))3~0指令功能:將累加器A中的內(nèi)容的低4位與Ri所指的片內(nèi)RAM單元中的低4位互換,但它們的高4位均不變。例如,設(shè)(A)=0ABH,(R0)=30H,(30H)=12H,執(zhí)行指令“XCHDA,@R0”后,(A)=0A2H,(30H)=1BH。2.半字節(jié)交換指令(1條)XCHDA,@Ri;(A)3.累加器A高低半字節(jié)交換指令(1條)解:本題是一個(gè)字節(jié)交換問題,故可以采用3條字節(jié)交換指令中的任何一條。若采用第三條字節(jié)交換指令,則相應(yīng)程序?yàn)?/p>

解:0~9的ASCII碼為30H~39H。進(jìn)行比較后發(fā)現(xiàn),兩者之間僅相差30H,故可以利用半字節(jié)指令把0~9的數(shù)裝配成相應(yīng)的ASCII碼。程序如下:3.累加器A高低半字節(jié)交換指令(1條)解:本題是一個(gè)字節(jié)交換3.3.5堆棧操作類指令1)PUSH稱為壓棧指令,將指定的直接尋址單元的內(nèi)容壓入堆棧。

2)POP稱為出棧指令,它是將當(dāng)前堆棧指針SP所指示的單元內(nèi)容彈出到指定的片內(nèi)RAM單元中,然后再將SP減1。3.3.5堆棧操作類指令1)PUSH稱為壓棧指令,將指定的圖3-7堆棧指令執(zhí)行過程

a)指令“PUSH40H”操作示意圖b)指令“POP30H”操作示意圖圖3-7堆棧指令執(zhí)行過程

a)指令“PUSH40H”操3.4算術(shù)運(yùn)算類指令3.4.1加法指令

3.4.2減法指令

3.4.3乘法指令

3.4.4除法指令3.4算術(shù)運(yùn)算類指令3.4.1加法指令

3.4.2減法3.4.1加法指令1.不帶進(jìn)位位的加法指令(Addition,ADD

100110100

2.帶進(jìn)位加法指令(Addition

3.增量指令(Increase,INC

4.十進(jìn)制調(diào)整指令(Decimal3.4.1加法指令1.不帶進(jìn)位位的加法指令(Additio1.不帶進(jìn)位位的加法指令(Addition,ADD解:100001011.不帶進(jìn)位位的加法指令(Addition,ADD解:2.帶進(jìn)位加法指令(Addition解:參考程序如下:2.帶進(jìn)位加法指令(Addi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論