《單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)》課件第3章_第1頁
《單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)》課件第3章_第2頁
《單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)》課件第3章_第3頁
《單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)》課件第3章_第4頁
《單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)》課件第3章_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

3.1單片機(jī)指令系統(tǒng)概述

3.2尋址方式

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

3.4算術(shù)運(yùn)算類指令

3.5邏輯運(yùn)算及移位指令

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

3.7子程序調(diào)用和返回指令

3.8位操作類指令

3.9匯編程序格式與偽指令

習(xí)題三第三章AT89S52單片機(jī)指令系統(tǒng)3.1.1指令、指令系統(tǒng)的概念

指令是計(jì)算機(jī)內(nèi)部具有特殊功能的操作命令。

3.1.2單片機(jī)指令系統(tǒng)及其指令格式

AT89S52單片機(jī)指令系統(tǒng)具有功能強(qiáng)、指令短、執(zhí)行快等特點(diǎn),其與MCS-51指令集兼容,共有111條指令。

匯編語言指令有如下格式:

[標(biāo)號(hào):]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]3.1單片機(jī)指令系統(tǒng)概述3.2.1立即尋址

操作數(shù)直接出現(xiàn)在指令中,緊跟在操作碼的后面,作為指令的一部分與操作碼一起存放在程序存儲(chǔ)器中,可以立即得到并執(zhí)行,不需要經(jīng)過別的途徑去尋找,故稱為立即尋址。

3.2尋址方式3.2.2寄存器尋址

在指令選定的某寄存器中存放或讀取操作數(shù),以完成指令規(guī)定的操作,稱為寄存器尋址。

3.2.3寄存器間接尋址

由指令指出某一寄存器的內(nèi)容作為操作數(shù)地址的尋址方法,稱為寄存器間接尋址。

寄存器間接尋址示意圖如圖3-1所示。圖3-1寄存器間接尋址示意圖3.2.4直接尋址

指令中直接給出操作數(shù)所在的存儲(chǔ)器地址,以供取數(shù)或存數(shù)的尋址方式稱為直接尋址。

3.2.5基址寄存器加變址寄存器間接尋址

基址寄存器加變址寄存器間接尋址,簡稱變址尋址。例如:MOVCA,@A+DPTR指令中的源操作數(shù)就是這種尋址方式。該指令尋址及操作功能如圖3-2所示。圖3-2寄存器間接尋址示意圖3.2.6相對尋址

相對尋址是以當(dāng)前程序計(jì)數(shù)器PC值加上指令中給出的偏移量rel,而構(gòu)成實(shí)際操作數(shù)地址的尋址方法。

使用相對尋址時(shí)要注意以下兩點(diǎn):

(1)當(dāng)前PC值是指相對轉(zhuǎn)移指令的存儲(chǔ)地址加上該指令的字節(jié)數(shù)。

(2)偏移rel是有符號(hào)的單字節(jié)數(shù)。以補(bǔ)碼表示,其值的范圍是-128~+127(00H~FFH),負(fù)數(shù)表示從當(dāng)前地址向前轉(zhuǎn)移,正數(shù)表示從前地址向后轉(zhuǎn)移。所以,相對轉(zhuǎn)移指令滿足條件后,轉(zhuǎn)移的地址(目的地址)為

目的地址=當(dāng)前PC值+rel=指令存儲(chǔ)地址+指令字節(jié)數(shù)+rel3.2.7位尋址

位尋址是在位操作指令中直接給出位操作數(shù)的地址,可以對片內(nèi)RAM中的128位和特殊功能寄存器SFR中的93位進(jìn)行尋址。數(shù)據(jù)傳送類指令有29條,這類指令是將源操作數(shù)傳送到指定的目的地址,傳送后源操作數(shù)保持不變。分類如下:3.3數(shù)據(jù)傳送類指令3.3.1訪問片內(nèi)數(shù)據(jù)存儲(chǔ)器的一般數(shù)據(jù)傳送指令

所有指令具有統(tǒng)一的格式,其格式如下:

MOV〈目的操作數(shù)〉,〈源操作〉;目的操作數(shù)單元←源操作數(shù)(或單元)

操作碼助記符都是“MOV”,目的操作數(shù)和源操作數(shù)不同尋址方式的組合就派生出該類的全部指令。因此,記憶這類指令的關(guān)鍵在于掌握兩個(gè)操作數(shù)的各種尋址方式的組合關(guān)系。

圖3-3給出了該類指令的操作關(guān)系圖。圖3-3訪問片內(nèi)RAM的一般傳送指令操作關(guān)系圖根據(jù)圖3-3可以推出訪問片內(nèi)數(shù)據(jù)存儲(chǔ)器的一般數(shù)據(jù)傳送類的16條指令。表3-1給出了這些指令及相關(guān)說明。表3-1訪問片內(nèi)RAM的一般傳送指令表

【例3-1】設(shè)內(nèi)部RAM(30H)=40H,(40H)=10H,(10H)=00H,(P1)=CAH,分析以下程序執(zhí)行后各單元及寄存器、P2口的內(nèi)容。

MOVR0,#30H;(R0)←30H

MOVA,@R0

;(A)←((R0))

MOVR1,A;(R1)←(A)

MOVB,@R1;(B)←((R1))

MOV@R1,P1;((R1))←(P1)

MOV

P2,P1;(P2)←(P1)

MOV

10H,#20H;(10H)←20H

執(zhí)行上述指令后的結(jié)果為:(R0)=30H,(R1)=(A)=40H,(B)=10H,(40H)=(P1)=(P2)=CAH,(10H)=20H。3.3.2片內(nèi)特殊傳送指令

1.堆棧操作指令

堆棧操作指令共有如下兩條:

這兩條指令都是雙字節(jié)指令,機(jī)器碼分別為:C0

direct和D0

direct。

【例3-2】若在外部程序存儲(chǔ)器中2000H單元開始依次存放0~9的平方值,數(shù)據(jù)指針(DPTR)=3A00H,用查表指令取得2003H單元的數(shù)據(jù)后,要求保持DPTR中的內(nèi)容不變。

完成上述功能的程序如下:

MOV

A,#03H;(A)←03H

PUSHDPH

;保護(hù)DPTR高8位入棧

PUSH

DPL;保護(hù)DPTR低8位入棧

MOVDPTR,#2000H;(DPTR)←2000H

MOVC

A,@A+DPTR;(A)←(2000H+03H)

POPDPL;彈出DPTR低8位

POP

DPH

;彈出DPTR高8位

執(zhí)行結(jié)果:(A)=09H,(DPTR)=3A00H。由此可見,雖然在程序中改變了DPTR的內(nèi)容,但利用PUSH和POP指令可對其進(jìn)行保護(hù)和恢復(fù)。需要注意的是堆棧先進(jìn)后出的原則,否則DPL和DPH彈出時(shí)互換。

2.數(shù)據(jù)交換指令

數(shù)據(jù)交換指令共有如下5條:

指令助記符操作功能注釋機(jī)器碼(H)

XCHA,direct

;(A)←→(direct)

C5direct

XCHA,@Ri

;(A)←→((Ri))C6~C7

XCHA,Rn

;(A)←→(Rn)C8~CF

XCHDA,@Ri;(A3~0)←→((Ri))3~0

D6、D7

SWAPA;(A7~4)←→(A3~0)C5direct

【例3-3】設(shè)(R0)=30H,(30)=4AH,(A)=28H,則

執(zhí)行XCHA,@R0后,結(jié)果為(A)=4AH,(30H)=28H。執(zhí)行XCHDA,@R0后,結(jié)果為(A)=2AH,(30H)=48H。執(zhí)行SWAPA后,結(jié)果為(A)=82H。3.3.3片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送指令

MCS-51系列單片機(jī)CPU對片外擴(kuò)展的數(shù)據(jù)存儲(chǔ)器RAM或I/O口進(jìn)行數(shù)據(jù)傳送,必須采用寄存器間接尋址的方法,通過累加器A來完成。這類指令共有以下4條單字節(jié)指令,指令操作碼助記符都為MOVX。

指令助記符操作功能注釋機(jī)器碼(H)

MOVXA,@DPTR

;(A)←((DPTR))E6

MOVXA,@Ri

;(A)←((DPTR))E2、E3

MOVX@DPTR,A

;((DPTR))←(A)F0

MOVX@Ri,A;((Ri))←(A)F2、F3

【例3-4】設(shè)外部RAM(0203H)=FFH,分析以下指令執(zhí)行后的結(jié)果。

MOVDPTR,#0203H

;(DPTR)←0203H

MOVX

A,@DPTR

;(A)←((DPTR))

MOV30H,A

;(30H)←(A)

MOV

A,#0FH;(A)←0FH

MOVX@DPTR,A;((DPTR))←(A)

執(zhí)行結(jié)果為:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。3.3.4訪問程序存儲(chǔ)器的數(shù)據(jù)傳送指令

有如下兩條單字節(jié)指令,指令操作碼助記符為MOVC。

指令助記符操作功能注釋機(jī)器碼MOVC

A,@A+DPTR;(A)←((A)+(DPTR))

93

MOVCA,@A+PC;(PC)←(PC)+1,(A)←((A)+(PC))83

偏移量計(jì)算公式為

偏移量=表首地址-(MOVC指令所在地址+1)

【例3-5】從片外程序存儲(chǔ)器2000H單元開始存放0~9的平方值,以PC作為基址寄存器進(jìn)行查表得9的平方值。設(shè)MOVC址所在地址(PC)=1FF0H,則偏移量=2000H-(1FF0H+1)=0FH。

相應(yīng)的程序如下:

MOVC

A,#09H;(A)←09H

ADD

A,#0FH;用加法指令進(jìn)行地址調(diào)整

MOVC

A,@A+PC;(A)←((A)+(PC)+1)

執(zhí)行結(jié)果為:(PC)=1FF1H,(A)=51H。如果用以DPTR為基址寄存器的查表指令,其程序如下:

MOVDPTR,2000H;置表首地址

MOVA,09H

MOVCA,@A+DPTR3.4.1加、減法指令

加、減法指令包括不帶進(jìn)位加法、帶進(jìn)位加法、帶借位減法、加1和減1指令。其中前三種指令除操作碼助記符不同外,它們的兩個(gè)操作數(shù)的尋址方式組合完全相同,后兩種指令的操作數(shù)的尋址方式也基本相同。為了抓住這些特點(diǎn)來記憶指令,我們將以圖3-4所示的形式進(jìn)行說明,并將在表3.2中集中地列出這些指令。3.4算術(shù)運(yùn)算類指令圖3-4加減法指令形式結(jié)構(gòu)圖(a)加、減法指令關(guān)系圖;(b)加1、減1指令關(guān)系圖表3-2加、減法指令表

【例3-6】設(shè)(A)=49H,(R0)=6BH,分析執(zhí)行指令A(yù)DDA,R0后的結(jié)果。

結(jié)果為:(A)=B4H,OV=1,CY=0,AC=1,P=0

【例3-7】設(shè)(A)=C3H,數(shù)據(jù)指針地位(DPL)=ABH,CY=1,分析執(zhí)行指令A(yù)DDCA,DPL后的結(jié)果。

結(jié)果為:(A)=6FH,CY=1,AC=0,P=0

【例3-8】設(shè)(A)=52H,(R0)=B4H,分析執(zhí)行如下指令后的結(jié)果。

CLRC;是位操作指令,是進(jìn)位位清0

SUBBA,R0

結(jié)果為:(A)=9EH,CY=1,AC=1,OV=1,P=1

【例3-9】設(shè)(R0)=7EH,(7EH)=FFH,(7FH)=38H,(DPTR)=10FEH,分析逐條執(zhí)行下列指令后各單元的內(nèi)容。

INC@R0 ;使7EH單元內(nèi)容FFH變?yōu)?0H

INC@R0 ;使R0的內(nèi)容由7EH變?yōu)?FH

INC@R0 ;使7FH單元內(nèi)容由38H變?yōu)?9H

INCDPTR ;使DPL為FFH,DPH不變

INCDPTR ;使DPL為00H,DPH為11H

INCDPTR ;使DPL為01H,DPH不變3.4.2十進(jìn)制調(diào)整指令

十進(jìn)制調(diào)整指令是一條對二—十進(jìn)制的加法進(jìn)行調(diào)整的指令,它是一條單字節(jié)指令,機(jī)器碼為D4H,兩個(gè)壓縮BCD碼按二進(jìn)制相加,必須在加法指令A(yù)DD、ADDC后,經(jīng)過本指令調(diào)整后才能得到正確的壓縮BCD碼和數(shù),實(shí)現(xiàn)十進(jìn)制的加法運(yùn)算。

【例3-10】對BCD碼加法65+58→DBH進(jìn)行十進(jìn)制調(diào)整。

參考程序如下:

MOVA,#65H ;(A)←65

ADDA,#58H ;(A)←(A)+58

DAA ;十進(jìn)制調(diào)整

執(zhí)行結(jié)果:(A)=(23)BCD,(CY)=1,即65+58=123。使用時(shí)應(yīng)注意:DA指令不能對減法進(jìn)行十進(jìn)制調(diào)整。做減法運(yùn)算時(shí),可采用十進(jìn)制補(bǔ)碼相加,然后用DAA指令進(jìn)行調(diào)整。例如:

70-20=70+[20]補(bǔ)=70+(100-20)=70+80=150

機(jī)內(nèi)十進(jìn)制補(bǔ)碼可采用:[X]補(bǔ)=9AH-|X|。

【例3-11】設(shè)片內(nèi)RAM30H,31H單元中分別存放著兩位BCD碼標(biāo)志的被減數(shù)和減數(shù),兩數(shù)相減的差仍以BCD碼的形式存放在32H單元中。可用下面的程序?qū)崿F(xiàn):

CLRC

MOVA,#9AH

SUBBA,31H;求減數(shù)的十進(jìn)制補(bǔ)碼

ADDA,30H ;作十進(jìn)制補(bǔ)碼加法

DAA ;進(jìn)行BCD調(diào)整

MOV32H,A ;將BCD碼的差存放在32H單元3.4.3乘、除法指令

乘、除法指令為單字節(jié)4周期指令,在指令執(zhí)行周期中是最長的兩條指令。

1.乘法指令

乘法指令的指令格式為:

2.除法指令

除法指令的指令格式為:

邏輯運(yùn)算及移位指令共有24條,其中邏輯運(yùn)算指令有“與”、“或”、“異或”、累加器A清0和求反等20條,移位指令有4條。該類指令中,累加器A清0和取反、移位指令都是針對累加器A進(jìn)行操作的單操作數(shù)指令。邏輯“與”、“或”、“異或”操作指令除操作碼助記符不同以外,后跟的兩個(gè)操作數(shù)的尋址方式組合完全相同,且有一部分尋址方式組合與加、減法指令相同。為突出這些特點(diǎn),我們以圖3-5所示形式進(jìn)行說明。在表3-3中已列出邏輯操作的全部指令。3.5邏輯運(yùn)算及移位指令圖3-5邏輯指令形式結(jié)構(gòu)圖表3-3邏輯操作指令類

【例3-12】(P1)=C5H=11000101B,屏蔽P1口高4位而保留低4位。

執(zhí)行指令:

ANLP1,#0FH

結(jié)果為:

(P1)=05H=00000101B

邏輯“或”指令常用來使字節(jié)中某些位置“1”,其他位保持不變。則欲置的位用“1”與該位相或,保留不變的位用“0”與該位相或。

【例3-13】若(A)=C0H,(R0)=3FH,(3FH)=0FH

執(zhí)行指令:

ORLA,@R0

結(jié)果為:

(A)=CFH=11001111B

邏輯“異或”指令常用來使字節(jié)中某些位進(jìn)行取反操作,其他位保持不變。欲某位取反則該位與“1”相異或;欲某位保留則該位與“0”相異或。還可利用異或指令對某單元自身異或,以實(shí)現(xiàn)清0操作?!纠?-14】若(A)=B5H=10110101B,執(zhí)行下列操作:

XRLA,#0F0H

;A的高4位取反,低4位保留,(A)=01000101R=45H

MOV30H,A

;(30H)=45H

XRLA,30H;自身異或使A清0

【例3-15】設(shè)(A)=5AH=90,且CY=0,則

執(zhí)行指令RLA后,(A)=B4H=180。

執(zhí)行指令RRA后,(A)=2DH=45。

執(zhí)行指令RLCA后,(A)=B4H=180。

執(zhí)行指令RRCA后,(A)=2DH=45。3.6.1無條件轉(zhuǎn)移指令

無條件轉(zhuǎn)移指令有4條,如表3-4所示。3.6控制轉(zhuǎn)移類指令表3-4無條件轉(zhuǎn)移指令

1.LJMP(長轉(zhuǎn)移指令)

LJMP指令執(zhí)行后,程序無條件地轉(zhuǎn)向16位目標(biāo)地址(addr16)處執(zhí)行,且不影響標(biāo)志位。

2.AJMP(絕對轉(zhuǎn)移指令)

AJMP的機(jī)器碼是由11位直接地址addr11和指令操作碼00001按下列分布組成的:該指令執(zhí)行后,程序轉(zhuǎn)移的目的地址是由AJMP指令所在位置的地址PC值加上該指令字節(jié)數(shù)2,構(gòu)成當(dāng)前PC值。取當(dāng)前PC值的高5位與指令中提供的11位直接地址形成轉(zhuǎn)移

的目的地址,即

3.SJMP(相對短轉(zhuǎn)移指令)

SJMP指令的操作數(shù)rel用8位帶符號(hào)數(shù)補(bǔ)碼表示,占指令的一個(gè)字節(jié)。因?yàn)?位補(bǔ)碼的取值范圍為-128~+127,所以該指令的轉(zhuǎn)移范圍是:相對PC當(dāng)前值向前轉(zhuǎn)128字節(jié),向后轉(zhuǎn)127字節(jié),即

轉(zhuǎn)移目的地址=SJMP指令所在地址+2+rel用匯編語言編程時(shí),指令中的相對地址rel往往用欲轉(zhuǎn)移至地址的標(biāo)號(hào)(符號(hào)地址)表示。機(jī)器匯編時(shí),能自動(dòng)算出相對地址值;但手工匯編時(shí),則需自己計(jì)算相對地址值rel。rel的計(jì)算公式如下:

向前轉(zhuǎn)移:

rel=FEH-(SJMP指令地址與目的地址差的絕對值)

向后轉(zhuǎn)移:

rel=FEH-(SJMP指令地址與目的地址差的絕對值)-2

4.JMP@A+DPTR(相對長轉(zhuǎn)移指令)

相對長轉(zhuǎn)移指令是以數(shù)據(jù)指針DPTR的內(nèi)容為基址,以累加器A的內(nèi)容為相對偏移量,在64KB范圍內(nèi)無條件轉(zhuǎn)移。

【例3-16】根據(jù)累加器A的值,轉(zhuǎn)移到不同處理程序的入口。

MOVDPTR,#TABLE ;表首地址送DPTR

JMP

@A+DPTR ;根據(jù)A值轉(zhuǎn)移

TABLE:AJMPTAB1 ;當(dāng)(A)=0時(shí)轉(zhuǎn)TAB1執(zhí)行

AJMPTAB2 ;當(dāng)(A)=2時(shí)轉(zhuǎn)TAB2執(zhí)行

AJMPTAB3 ;當(dāng)(A)=4時(shí)轉(zhuǎn)TAB3執(zhí)行

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

表3-5中列出了這些指令。表3-5條件轉(zhuǎn)移指令

1.判零條件轉(zhuǎn)移指令

【例3-17】將片外RAM首地址為DATA1的一個(gè)數(shù)據(jù)塊轉(zhuǎn)送到片內(nèi)RAM首地址為DATA2的存儲(chǔ)區(qū)中。

外部RAM向內(nèi)部RAM的數(shù)據(jù)轉(zhuǎn)送一定要經(jīng)過累加器A,利用判零條件轉(zhuǎn)移正好可以判別是否要繼續(xù)傳送或者終止。

完成數(shù)據(jù)傳送的參考程序如下:

MOV R0,#DATA1 ;R0作為外部數(shù)據(jù)塊的地址指針

MOV R1,#DATA2 ;R1作為內(nèi)部數(shù)據(jù)塊的地址指針

LOOP: MOVX A,@R0 ;取外部RAM數(shù)據(jù)送入A

HERE: JZ HERE ;數(shù)據(jù)為0終止傳送

MOV @R1,A ;數(shù)據(jù)傳送至內(nèi)部RAM單元

INC R0 ;修改指針,指向下一數(shù)據(jù)地址

INC R1

SJMP LOOP ;循環(huán)取數(shù)

2.比較轉(zhuǎn)移指令

【例3-18】當(dāng)從P1口輸入數(shù)據(jù)為01H時(shí),程序繼續(xù)執(zhí)行,否則等待,直到P1口出現(xiàn)01H。

參考程序如下:

MOVA,#01H;立即數(shù)01H送A

WAIT: CJNEA,P1,WAIT;(P1)≠01H,則等待

3.減1條件轉(zhuǎn)移指令

【例3-19】將內(nèi)部RAM從DATA單元開始的10個(gè)無符號(hào)數(shù)相加,相加結(jié)果送入SUM單元保存。設(shè)相加結(jié)果不超過8位二進(jìn)制數(shù),則相應(yīng)的程序如下:

MOVR0,#0AH ;設(shè)置循環(huán)次數(shù)

MOVR1,#DATA ;R1作地址指針,指向數(shù)據(jù)塊首地址

CLRA ;A清0

LOOP:

ADDA,@R1 ;加一個(gè)數(shù)

INCR1 ;修改指針,指向下一個(gè)數(shù)

DJNZR0,LOOP ;R0減1,不為0循環(huán)

MOVSUM,A ;存10個(gè)數(shù)相加的和3.7.1子程序調(diào)用指令

子程序調(diào)用指令有長調(diào)用和絕對調(diào)用兩條,它們都是雙周期指令。3.7子程序調(diào)用和返回指令長調(diào)用子指令:絕對調(diào)用子指令:

ACALL與AJMP一樣提供11位地址,只能調(diào)用與PC在同一2KB范圍內(nèi)的子程序。由于該指令為2字節(jié)指令,所以執(zhí)行該指令時(shí)應(yīng)執(zhí)行(PC)←(PC)+2以獲得下一條指令地址,并把該地址壓入堆棧作為返回地址。該指令機(jī)器碼的構(gòu)成也與AJMP類似,只不過操作碼第一字節(jié)其高半字節(jié)的最后一位是1,機(jī)器碼的組成如下:3.7.2返回指令

返回指令共有兩條:一條是對應(yīng)兩條調(diào)用指令的子程序返回指令RET,另一條是對應(yīng)從中斷服務(wù)程序的返回指令RETI。3.7.3空操作指令

空操作指令的指令格式為:

NOP;(PC)←(PC)+1

空操作指令是一條單字節(jié)單周期指令。位操作也稱布爾變量操作,它是以位(bit)作為單位來進(jìn)行運(yùn)算和操作的。

位處理指令列于表3-6中。3.8位操作類指令表3-6位處理指令

【例3-20】利用位操作指令,模擬圖3-6所示硬件邏輯電路的功能。參考程序如下:

PR2:MOVC,P1.1 ;(CY)←(P1.1)

ORLC,P1.2 ;(CY)←(P1.1)∨(P1.2)=A

ANLC,P1.0 ;(CY)←(P1.0)∧A

CPLC ;(CY)←()∧A=B

MOVF0,C ;F0內(nèi)暫存B

MOVC,P1.3 ;(CY)←(P1.3)

ANLC,/P1.4 ;(CY)←(P1.3)∧()=D

ORLC,F0 ;(CY)←B∨D

MOVP1.5,C ;運(yùn)算結(jié)果送入P1.5

RET圖3-6硬件邏輯電路圖

1.匯編程序格式

匯編程序是指令系統(tǒng)的一個(gè)子集,只要指令按格式書寫就構(gòu)成了程序的基本格式。在程序中指令書寫具有如下格式:

[標(biāo)號(hào):]操作碼助記符[源操作數(shù)][,目的操作數(shù)][;注釋]3.9匯編程序格式與偽指令

2.偽指令

1)設(shè)置目標(biāo)程序起始地址偽指令ORG

格式:[符號(hào):]ORG地址(十六進(jìn)制表示)

例如:

ORG2000H

START:MOVA,#7FH

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

格式:[符號(hào):]END

3)定義字節(jié)偽指令DB

格式:[標(biāo)號(hào):]DB項(xiàng)或項(xiàng)表

例如:

ORG2000H

TAB1:DB30H,8AH,7FH,73

DB′5′,′A′,′BCD′由于ORG2000H,所以TAB1的地址為2000H,因此,以上偽指令經(jīng)匯編后,將對2000H開始的連續(xù)存儲(chǔ)單元賦值: (2000H)=30H

(2001H)=8AH

(2002H)=7FH

(2003H)=49H ;十進(jìn)制數(shù)73以十六進(jìn)制存放

(2004H)=35H ;35H是數(shù)字5的ASCII碼

(2005H)=41H ;41H是字母A的ASCII碼

(2006H)=42H ;42H是字符串′BCD′中B的ASCII碼

(2007H)=43H ;43H是字符串′BCD′中C的ASCII碼

(2008H)=44H ;44H是字符串′BCD′中D的ASCII碼

4)定義字偽指令DW

格式:[標(biāo)號(hào):]DW項(xiàng)或項(xiàng)表

DW偽指令與DB相似,但用于定義字的內(nèi)容。項(xiàng)或項(xiàng)表指所定義的一個(gè)字(兩個(gè)字節(jié))或用逗號(hào)分開的字符串。匯編時(shí),機(jī)器自動(dòng)按高8位先存入,低8位在后的格式排列。例如:

ORG1500H

TAB2:DW1234H,80H

匯編以后:(1500H)=12H,(1501H)=34H,(1502H)=00H,(1503H)=80H

5)預(yù)留存儲(chǔ)空間偽指令DS

格式:[標(biāo)號(hào):]DS表達(dá)式

該偽指令的功能是從標(biāo)號(hào)地址開始的,保留若干個(gè)字節(jié)的內(nèi)存空間以備存放數(shù)據(jù)。保留的字節(jié)單元數(shù)由表達(dá)式的值決定。例如:

ORG1000H

DS20H

DB30H,8FH

6)等值偽指令EQU

格式:標(biāo)號(hào):EQU項(xiàng)

該偽指令的功能是將指令中項(xiàng)的值賦予EQU前面的標(biāo)號(hào)。項(xiàng)可以是常數(shù)、地址標(biāo)號(hào)或表達(dá)式。例如:

TAB1:EQU1000H

TAB2:EQU2000H

7)位地址定義偽指令BIT

格式:標(biāo)號(hào):BIT位地址

該偽指令的功能是將位地址賦予BIT前面的標(biāo)號(hào),經(jīng)賦值后可用該標(biāo)號(hào)代替BIT后面的位地址。例如:

PLG:BITF0

AI:BITP1.0

1.什么是尋址方式?MCS-51系列單片機(jī)有哪幾種尋址方式?這幾種尋址方式是如何尋址的?

2.訪問片內(nèi)、片外程序存儲(chǔ)器有哪幾種尋址方式?

習(xí)題三

3.若要完成以下的數(shù)據(jù)傳送,應(yīng)如何用MCS-51系列的指令來完成?

(1)R0的內(nèi)容送到R1中。

(2)外部RAM的20H單元內(nèi)容送R0,送內(nèi)部RAM的20H單元。

(3)外部RAM的2000H單元內(nèi)容送R0,送內(nèi)部RAM的20H單元,送外部RAM的20H單元。

(4)ROM的2000H單元內(nèi)容送R0,送內(nèi)部RAM的20H單元,送外部RAM的20H單元。

4.比較下列每組兩條指令的區(qū)別。

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

(2)MOVA,R0與MOVA,@R0。

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

(4)MOVXA,@R1與MOVXA,@DPTR。

5.已知(A)=7AH,(B)=02H,(R0)=30H,(30H)=A5H,(PSW)=80H,寫出以下各條指令執(zhí)行后A和PSW的內(nèi)容。

(1)XCHA,R0。

(2)XCHA,30H。

(3)XCHA,@R0。

(4)XCHDA,@R0。

(5)SWPA。

(6)ADDA,R0。

(7)ADDA,30H。

(8)ADDDA,#30H。

(9)ADDCA,30H。

(10)SUBBA,30H。

(11)SUBBA,#30H。

(12)INC@R0。

(13)MULAB。

(14)DIVAB。

6.已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,(SP)=30H,片內(nèi)RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,試分別寫出以下指令執(zhí)行后

溫馨提示

  • 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

提交評論