3-51系列單片機(jī)指令系統(tǒng)及Keil集成開發(fā)環(huán)境-出版社_第1頁
3-51系列單片機(jī)指令系統(tǒng)及Keil集成開發(fā)環(huán)境-出版社_第2頁
3-51系列單片機(jī)指令系統(tǒng)及Keil集成開發(fā)環(huán)境-出版社_第3頁
3-51系列單片機(jī)指令系統(tǒng)及Keil集成開發(fā)環(huán)境-出版社_第4頁
3-51系列單片機(jī)指令系統(tǒng)及Keil集成開發(fā)環(huán)境-出版社_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章

51系列單片機(jī)指令系統(tǒng)及Keil集成開發(fā)環(huán)境3.5算術(shù)運(yùn)算指令3.4數(shù)據(jù)傳送指令3.3指令狀態(tài)標(biāo)志和類型3.2指令尋址方式3.1指令系統(tǒng)和指令格式3.6邏輯運(yùn)算指令3.7位操作指令

3.8控制轉(zhuǎn)移指令3.1指令系統(tǒng)和指令格式3.1.1指令系統(tǒng)的概念01指令是計(jì)算機(jī)中央處理器CPU可以理解并執(zhí)行的操作命令。02指令系統(tǒng)是某種CPU所有指令的集合。根據(jù)生產(chǎn)廠家硬件結(jié)構(gòu)和用途的不同,不同的CPU有著不同的指令系統(tǒng),相互不一定兼容。03程序程序是為了解決某一具體問題而編寫的有限指令序列,因而指令是進(jìn)行程序設(shè)計(jì)的根本單元。同時(shí)程序又具有目的性、有序性和有限性等三個(gè)特性。指令按指令級(jí)別分為機(jī)器級(jí)和匯編級(jí)04機(jī)器指令機(jī)器指令是指由二進(jìn)制代碼構(gòu)成的可由CPU直接理解并執(zhí)行的指令04匯編指令是用符號(hào)來表示機(jī)器指令的指令。對(duì)相同的CPU,匯編指令與機(jī)器指令存在一一對(duì)應(yīng)的關(guān)系。3.1指令系統(tǒng)和指令格式3.1.2指令格式和常用的偽指令1、匯編指令行與偽指令行格式匯編指令行的根本格式為:[標(biāo)號(hào):]指令助記符_[操作數(shù)1],[操作數(shù)2],[操作數(shù)3][;注釋]偽指令行的根本格式為:[名字]偽指令助記符_[參數(shù)表][;注釋]一般格式為:名字項(xiàng)

操作項(xiàng)_操作數(shù)項(xiàng)注釋項(xiàng)3.1指令系統(tǒng)和指令格式3.1.2指令格式和常用的偽指令[例3.1]假設(shè)某單片機(jī)系統(tǒng)其一個(gè)機(jī)器周期為1μs,相應(yīng)設(shè)計(jì)的50ms延時(shí)子程序如下:DEL: MOV R7,#200 ;R7賦計(jì)數(shù)初值〔雙重循環(huán)外循環(huán)〕DEL1: MOV R6,#125 ;R6賦計(jì)數(shù)初值〔雙重循環(huán)內(nèi)循環(huán)〕DEL2: DJNZ R6,DEL2 ;125×2=250μs〔DJNZ指令執(zhí)行時(shí)間為2μs〕 DJNZ R7,DEL1 ;0.25×200=50ms RET ;子程序返回3.1指令系統(tǒng)和指令格式3.1.2指令格式和常用的偽指令2、常用偽指令①定位偽指令

ORGm②數(shù)據(jù)賦值偽指令

符號(hào)名EQUd③存放器名賦值偽指令符號(hào)名EQUr④位地址賦值偽指令

符號(hào)名BITn⑤定義字節(jié)偽指令[標(biāo)號(hào):]DBX1,X2,……Xn

或[標(biāo)號(hào):]DB‘字符串’⑥定義字偽指令

[標(biāo)號(hào):]DWY1,Y2,……Yn⑦匯編結(jié)束偽指令END3、常用縮寫符號(hào)(略見書〕3.2指令尋址方式寄存器尋址直接尋址寄存器間接尋址立即尋址基寄存器加變址寄存器間接尋址3.2指令尋址方式3.2.1存放器尋址由指令指出某寄存器的內(nèi)容作為操作數(shù)的尋址方式稱為寄存器尋址方式。這些寄存器包括Rn(即R0~R7工作寄存器)、A(累加器ACC)、AB(僅乘除計(jì)算使用,A與B組合寄存器對(duì))、DPTR(數(shù)據(jù)指針,DPH與DPL組合寄存器對(duì))。[例3.2]假設(shè)〔R0〕=45H,執(zhí)行指令I(lǐng)NCR03.2指令尋址方式3.2.2直接尋址在指令中直接給出操作數(shù)有效地址的尋址方式稱為直接尋址方式。該地址給出了參與操作的數(shù)據(jù)所在的字節(jié)單元地址。[例3.3]假設(shè)(70H)=0FFH,執(zhí)行指令:MOV70H,#48H3.2指令尋址方式3.2.3存放器間接尋址在指令中將某寄存器的內(nèi)容作為操作數(shù)有效地址的尋址方式稱為寄存器間接尋址方式(特別注意:寄存器的內(nèi)容不是操作數(shù),而是操作數(shù)的地址)。能夠參與寄存器間接尋址的寄存器包括Ri(即R0、R1工作寄存器)、DPTR、SP。[例3.4]假設(shè)(A)=0F0H,(R0)=5BH,(5BH)=60H,執(zhí)行指令:MOV

A,@R0[例3.5]區(qū)別指令MOV A,@R0MOVXA,@R03.2指令尋址方式3.2.4立即尋址操作數(shù)包含在指令字節(jié)中的尋址方式稱為立即尋址方式,即操作數(shù)以指令字節(jié)的形式存放于程序存儲(chǔ)器中。以下舉例說明立即尋址的應(yīng)用[例3.6]執(zhí)行指令:MOV DPTR,#45H3.2指令尋址方式3.2.5基址存放器加變址存放器間接尋址這種尋址方式以16位的程序計(jì)數(shù)器PC或數(shù)據(jù)指針DPTR作為基存放器,以8位的累加器A作為變址存放器?;娣牌骱妥冎反娣牌鞯膬?nèi)容相加形成一個(gè)新的16位地址,采用該地址作為操作數(shù)有效地址的尋址方式稱為基存放器加變址存放器間接尋址方式。[例3.7]假設(shè)(A)=0F0H,(DPTR)=5BH,(014BH)=0C2H,執(zhí)行指令:3.2指令尋址方式3.2.5基址存放器加變址存放器間接尋址尋址方式存

儲(chǔ)

間立即尋址程序存儲(chǔ)器(常數(shù))寄存器尋址R0~R7A、B、C(CY)、AB(雙字節(jié))、DTPR(雙字節(jié))直接尋址內(nèi)部RAM低128字節(jié)(0~7FH)特殊功能寄存器(80H~0FFH)內(nèi)部RAM位尋址區(qū)的128個(gè)位(0~7FH)特殊功能寄存器中可尋址的位(80H~0FFH)寄存器間接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM(@R0,@R1,@SP(僅PUSH,POP))內(nèi)部數(shù)據(jù)存儲(chǔ)器單元的低4位(@R0,@R1)外部RAM或I/O口(@R0,@R1,@DPTR)基址寄存器加變址寄存器間接尋址程序存儲(chǔ)器(@A+PC,@A+DPTR)3.3指令狀態(tài)標(biāo)志和類型3.3.1指令狀態(tài)標(biāo)志51系列單片機(jī)在特殊功能存放器SFR中設(shè)有一個(gè)程序狀態(tài)字存放器PSW用于保存數(shù)據(jù)操作的結(jié)果標(biāo)志。D7D6D5D4D3D2D1D0CYACF0RS1RS0OVF1PCY:進(jìn)位標(biāo)志。AC:輔助進(jìn)位標(biāo)志。OV:溢出標(biāo)志。P:奇偶標(biāo)志。RS1、RS0:分別為工作存放器區(qū)域0~3區(qū)選擇的高位、低位。F0、F1:一般為用戶軟件標(biāo)志位3.3指令狀態(tài)標(biāo)志和類型3.3.2指令類型指令按級(jí)別分為機(jī)器級(jí)、匯編級(jí)指令。指令按操作數(shù)的個(gè)數(shù)分為零地址〔無操作數(shù)〕、一地址〔1個(gè)操作數(shù)〕、二地址〔2個(gè)操作數(shù)〕和三地址〔3個(gè)操作數(shù)〕指令。指令按是否轉(zhuǎn)移分為轉(zhuǎn)移〔或調(diào)用〕、順序指令。51系列單片機(jī)最常用的指令分類是按指令長度、指令執(zhí)行時(shí)間、指令功能分類。按指令長度分類:共有49條單字節(jié)、46條雙字節(jié)、16條3字節(jié)指令。按指令執(zhí)行時(shí)間分類:共有64條單機(jī)器周期、45條雙機(jī)器周期、2條4機(jī)器周期指令。按指令功能分類:共有28條數(shù)據(jù)傳送、24條算術(shù)運(yùn)算、25條邏輯運(yùn)算、12條位操作、22條控制轉(zhuǎn)移指令。3.3指令狀態(tài)標(biāo)志和類型3.3.2指令類型[例3.8]假設(shè)工作存放器工作在0區(qū),R2對(duì)應(yīng)內(nèi)部RAM的02H單元,如果程序設(shè)計(jì)要求將累加器A的內(nèi)容送入R2,那么以下四條指令均可實(shí)現(xiàn)。①M(fèi)OV02H,ACC ;兩個(gè)操作數(shù)均為直接尋址3字節(jié),2周期②MOVR2,ACC ;R2為存放器尋址,ACC為直接尋址2字節(jié),2周期③MOV02H,A ;02H為直接尋址,A為存放器尋址2字節(jié),1周期④MOVR2,A ;兩個(gè)操作數(shù)均為存放器尋址 1字節(jié),1周期3.4數(shù)據(jù)傳送指令3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令內(nèi)部數(shù)據(jù)傳送的范圍包括:累加器A、工作存放器Rn、特殊功能存放器SFR、內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM。1、數(shù)據(jù)傳送指令指令集合:MOV

AR/n/@Ri/direct,direct/#dataMOVRn/@Ri/direct,AMOVA/direct,Rn/@RiMOV

DPTR,#data16指令功能:這組指令完成數(shù)據(jù)賦值功能,即將源操作數(shù)的數(shù)值傳送給目的操作數(shù)。本卷須知:①上述指令中當(dāng)DST為ACC時(shí),只影響P標(biāo)志。其余指令不影響標(biāo)志。②#data不能作為DST。作為SRC,#data可用十或十六進(jìn)制數(shù)表示,用十六進(jìn)制數(shù)表示時(shí),高位假設(shè)大于9,必須在前面加“0”。③通過direct對(duì)Pi口(P0~P3)作為SRC的讀操作,讀出的是引腳狀態(tài),不是口鎖存器內(nèi)容。對(duì)Pi口作為DST的寫操作,永遠(yuǎn)是寫口鎖存器內(nèi)容。3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令1、數(shù)據(jù)傳送指令[例3.9]以下分別介紹這組指令:MOV A,#20HMOV

A,20HMOV R1,#32 MOV R6,32MOV @R0,#80HMOV @R1,P0MOV 0A8H,#128MOV IE,80HMOV R5,AMOV @R1,AMOV 70,A MOV A,R5MOV A,@R0MOV

66,R2MOV 66H,@R0MOV DPTR,#1234H[例3.10]設(shè)(70H)=60H,(60H)=20H,P1為輸入口,當(dāng)前輸入狀態(tài)為B7H,試求執(zhí)行下面程序后各單元的結(jié)果:MOV R0,#70HMOV A,@R0MOV

R1,AMOV B,@R1 MOV @R0,P1SJMP $3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令2、堆棧操作指令指令集合:PUSH/POP

direct指令功能:PUSH指令首先將堆棧指針SP+1,然后把直接地址指出的內(nèi)容傳送到堆棧指針SP尋址的內(nèi)部RAM中,即〔SP〕+1→SP,〔direct〕→〔SP〕。而POP指令首先將堆棧指針SP尋址的內(nèi)部RAM單元內(nèi)容送入直接地址指出的字節(jié)單元中,然后堆棧指針SP-1,即〔〔SP〕〕→direct,〔SP〕-1→SP。本卷須知:①POPACC只影響P標(biāo)志。其余指令不影響標(biāo)志。②上述指令操作數(shù)OD采用直接尋址方式,故均為雙字節(jié)指令。能夠?qū)?nèi)部RAM的低128個(gè)字節(jié)〔0~7FH〕和包括ACC、B、PSW、DPH、DPL等在內(nèi)的SFR〔80H~0FFH〕進(jìn)行訪問。③確定堆棧位置后,應(yīng)將SP賦值為堆棧起始地址-1。*④對(duì)Pi口,保護(hù)的是引腳狀態(tài),恢復(fù)的是口鎖存器內(nèi)容。3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令2、堆棧操作指令[例3.11]以下分別介紹這兩條指令的使用:假設(shè)〔SP〕=6BH,〔40H〕=20H,〔6CH〕=0ABH,執(zhí)行下面指令:PUSH 40H 假設(shè)〔SP〕=6BH,〔P1〕=0A2H,〔6BH〕=0AH,執(zhí)行下面指令:POP P1 [例3.12]某系統(tǒng)主程序中Rn工作在0區(qū),堆棧設(shè)置在70H~7FH,即(SP)=6FH。中斷效勞程序中要使用Rn、A、PSW等10個(gè)存放器,為此希望在中斷效勞程序中保護(hù)這些存放器的內(nèi)容,試編寫符合這些要求的中斷程序中保護(hù)現(xiàn)場(chǎng)、恢復(fù)現(xiàn)場(chǎng)的有關(guān)指令:3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令2、堆棧操作指令[例3.13]假設(shè)(SP)=7〔初始化狀態(tài)〕,程序要求堆棧設(shè)置在60H~7FH。此時(shí)〔A〕=32H,〔P3〕=40,〔DPH〕=10,〔B〕=23H,試問執(zhí)行以下指令后,各相關(guān)存放器的內(nèi)容如何?MOV SP,#5FHPUSH ACCPUSH

P3POP

DPHPOP

BSJMP $3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令2、堆棧操作指令[例3.14]以下是采用堆棧指令編寫的一個(gè)將A、B存放器內(nèi)容進(jìn)行數(shù)據(jù)交換的程序段:PUSH ACCPUSH BPOP ACCPOP BSJMP $3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令3、字節(jié)交換指令指令集合:XCH

A,Rn/@Ri/direct指令功能:這組指令完成累加器A與存放器、存放器間接尋址單元或直接地址單元中內(nèi)容的字節(jié)交換。注意點(diǎn):①只影響P標(biāo)志。*②對(duì)Pi口,引腳狀態(tài)→A,〔A〕→口鎖存器[例3.15]以下分別介紹這組指令:XCH A,R1XCH A,@R1 XCH A,40H3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令3、字節(jié)交換指令[例3.16]假設(shè)〔A〕=25H,〔R5〕=0A9H,〔R0〕=50H,〔50H〕=44H,〔77H〕=0,試求以下程序段執(zhí)行后各存放器和直接尋址單元中的內(nèi)容:XCH A,R5XCH A,@R0 XCH

A,77HSJMP $3.4數(shù)據(jù)傳送指令3.4.1內(nèi)部數(shù)據(jù)傳送指令4、半字節(jié)交換指令指令集合:XCHD

A,@Ri指令功能:這一指令完成累加器A低4位與存放器間接尋址單元中內(nèi)容低4位的半字節(jié)交換。本卷須知:只影響P標(biāo)志。[例3.17]以下介紹這一指令:XCHD A,@R1[例3.18]假設(shè)〔A〕=25H,〔R0〕=50H,〔50H〕=44H。試求執(zhí)行下述指令后各存放器和直接尋址單元中的內(nèi)容:XCHD A,@R03.4數(shù)據(jù)傳送指令3.4.2外部數(shù)據(jù)存儲(chǔ)器傳送指令指令集合:MOVX

A,@DPTR/@Ri輸入指令MOVX@DPTR/@Ri,A

輸出指令指令功能:這組指令是用來實(shí)現(xiàn)CPU內(nèi)部數(shù)據(jù)通過累加器A與外部RAM〔含外部I/O接口〕數(shù)據(jù)進(jìn)行雙向傳送的指令,包括輸入和輸出各兩條指令。@DPTR形成16位地址,尋址范圍:0~0FFFFH。@Ri形成16位地址中的低8位地址,尋址范圍:0~0FFH。本卷須知:①輸入指令只影響P標(biāo)志,輸出指令不影響標(biāo)志。②由于@Ri只能尋址地址的低8位,當(dāng)采用@Ri尋址16位地址時(shí),必須對(duì)P2口鎖存器先送地址高8位。③對(duì)外部RAM還是外部I/O的操作,由系統(tǒng)所設(shè)計(jì)的硬件電路地址分配決定。3.4數(shù)據(jù)傳送指令3.4.2外部數(shù)據(jù)存儲(chǔ)器傳送指令[例3.19]以下介紹這組指令:MOVX A,@R1MOVX A,@DPTRMOVX @R1,AMOVX @DPTR,A [例3.20]以下指令可以實(shí)現(xiàn)將內(nèi)部RAM的0A0H單元的內(nèi)容傳送給外部RAM的40H單元的功能:MOV R0,#40HMOV

A,0A0HMOVX

@R0,ASJMP

$3.4數(shù)據(jù)傳送指令3.4.2外部數(shù)據(jù)存儲(chǔ)器傳送指令[例3.21]以下指令可以實(shí)現(xiàn)將外部RAM的0040H單元的內(nèi)容傳送給內(nèi)部RAM的0A0H單元的功能:方法1:用DPTR作數(shù)據(jù)指針:MOV DPTR,#40HMOVX

A,@DPTRMOV 0A0H,ASJMP $方法2:用@Ri作數(shù)據(jù)指針〔此時(shí)必須通過P2口來建立地址高8位〕:MOV P2,#0 MOV R1,#40HMOVX A,@R1MOV 0A0H,ASJMP $3.4數(shù)據(jù)傳送指令3.4.3查表指令指令集合:MOVC

A,@A+PC/@A+DPTR指令功能:這兩條指令分別以PC、DPTR作為基址存放器,累加器A作變址存放器,將A的內(nèi)容作為無符號(hào)數(shù)和PC的內(nèi)容〔本指令執(zhí)行后下一條指令的起始地址〕或DPTR的內(nèi)容相加后得到一個(gè)16位的地址,由該地址指出的程序存儲(chǔ)器單元的內(nèi)容送累加器A的操作。本卷須知:①只影響P標(biāo)志。②采用PC作為基址存放器時(shí),當(dāng)前的PC值是由該指令的存儲(chǔ)地址確定的。采用DPTR作為基址存放器時(shí),該指令執(zhí)行結(jié)果只和數(shù)據(jù)指針DPTR和變址存放器A的內(nèi)容有關(guān),而與該指令的存放地址無關(guān)。3.4數(shù)據(jù)傳送指令3.4.3查表指令[例3.22]以下介紹這兩條指令的應(yīng)用假設(shè)(A)=30H,而MOVC

A,@A+PC指令的存放地址為1000H。執(zhí)行指令:MOVC A,@A+PC后,將哪個(gè)單元的內(nèi)容送入A中?假設(shè)(A)=30H,(DPTR)=1000H,執(zhí)行指令:MOVCA,@A+DPTR后,哪個(gè)單元的內(nèi)容送入A中?3.4數(shù)據(jù)傳送指令3.4.3查表指令[例3.23]假設(shè)程序設(shè)計(jì)時(shí),在8020H開始的單元中放置了一個(gè)9~0的ASCII碼表,采用PC作為基址存放器時(shí),查表程序放置在8000H開始的單元中,請(qǐng)問執(zhí)行以下程序后,A的內(nèi)容是什么?ORG 8000H ;程序起始地址定位在8000HORG 8000HMOV A,#2FHMOVC

A,@A+PC?ORG

8030HDB

‘9876543210’?

3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H1、加法指令、減法指令指令集合:ADD/ADDC/SUBBA,Rn/@Ri/direct/#data指令功能:加法指令組:DST+SRC→DST。帶進(jìn)位加法指令組:DST+SRC+CY→DST。帶借位加法指令組:DST—SRC—CY→DST。并且,本指令集合中的操作數(shù)均為無符號(hào)數(shù)。本卷須知:①對(duì)標(biāo)志的影響:位7有進(jìn)/借位,CY=1,否那么CY=0。位3有進(jìn)/借位,AC=1,否那么AC=0。位6或位7其中之一有進(jìn)/借位,那么OV=1,否那么OV=0。ACC中“1”或“0”的個(gè)數(shù)為奇數(shù)時(shí),那么P=1,否那么P=0。*②對(duì)Pi口,引腳狀態(tài)是加數(shù)或減數(shù)3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H1、加法指令、減法指令[例3.24]以下分別介紹這三組指令:ADDA,Rn

;(A)+(Rn)→AADDA,@Ri ;(A)+((Ri))→AADDA,direct

;(A)+(direct)→AADDA,#data ;(A)+data→AADDC

A,Rn

;(A)+(Rn)+CY→AADDC

A,@Ri ;(A)+((Ri)+CY→AADDC

A,direct

;(A)+(direct)+CY→AADDC

A,#data ;(A)+data+CY→ASUBB

A,Rn

;(A)-(Rn)-CY→ASUBB

A,@Ri ;(A)-((Ri))-CY→ASUBB

A,direct

;(A)-(direct)-CY→ASUBB

A,direct

;(A)-(direct)-CY→ASUBB

A,#data ;(A)-data-CY→A3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H1、加法指令、減法指令[例3.25]假設(shè)(A)=77H,(R1)=0ADH。執(zhí)行指令:ADDA,R1[例3.26]假設(shè)(A)=76H,(R0)=55H,(55H)=40H。執(zhí)行指令:ADDA,@R03.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H1、加法指令、減法指令[例3.27]假設(shè)(A)=76H,(70H)=8BH,CY=1。執(zhí)行指令:ADDCA,70H3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H1、加法指令、減法指令[例3.28]試編寫程序完成(R1)(R0)+(R3)(R2)→(R5)(R4)的功能,并假設(shè)運(yùn)算結(jié)果無進(jìn)位。程序如下:MOV A,R0ADD

A,R2MOV

R4,AMOV

A,R1ADDC

A,R3MOV

R5,ASJMP

$3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H1、加法指令、減法指令[例3.29]假設(shè)(A)=76H,CY=1。執(zhí)行指令:SUBBA,#8BH3.5算術(shù)運(yùn)算指令3.5.1加減指令1、加法指令、減法指令[例3.30]假設(shè)以下減法運(yùn)算結(jié)果有借位,試編寫程序完成(31H)(30H)-(34H)(33H〕→(32H)(31H)(30H)的功能(借位位存放在32H單元)。CLR CMOV

A,30HSUBB

A,33HMOV

30H,AMOV

A,31HSUBB

A,34HMOV

31H,ACLR

AADDC

A,#0MOV

32H,A

SJMP

$3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H2、增1指令、減1指令指令集合:INC/DECA/Rn/@Ri/direct/DPTR〔注意:無DECDPTR指令〕指令功能:增1指令組:OD+1→OD。減1指令組:OD-1→OD本卷須知:①對(duì)ACC操作只影響P標(biāo)志,其他指令不影響標(biāo)志。②對(duì)8位操作數(shù):0FFH增1后變?yōu)?;對(duì)0減1后變?yōu)?FFH。同理,對(duì)16位操作數(shù)〔DPTR〕:0FFFFH增1后變?yōu)?。③修改Pi口時(shí),修改的是口鎖存器內(nèi)容,而不是引腳狀態(tài)。3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H2、增1指令、減1指令[例3.31]以下逐條介紹這些增1指令、減1指令:INC A ;(A)+1→A INC Rn ;(Rn)+1→RnINC @Ri ;((Ri))+1→(Ri)INC direct ;(direct)+1→direct INC DPTR ;(DPTR)+1→DPTRDEC A ;(A)-1→ADEC Rn ;(Rn)-1→RnDEC @Ri ;((Ri))-1→(Ri)DEC direct ;(direc)-1→direct3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H2、增1指令、減1指令[例3.32]假設(shè)(A)=30H,(R3)=ABH,(R1)=80H,(80H)=0FFH,(72H)=0,(DPTR)=123H。求執(zhí)行以下指令后的結(jié)果:INC AINC @R1INC DPTRDEC R3DEC 72H3.5算術(shù)運(yùn)算指令3.5.1加減指令ORG 8000H ;程序起始地址定位在8000H3、十進(jìn)制調(diào)整指令指令集合:DA

A指令功能:當(dāng)操作數(shù)采用BCD碼進(jìn)行加法運(yùn)算時(shí),這條指令是根據(jù)上一條加法指令〔計(jì)算機(jī)內(nèi)部執(zhí)行的是二進(jìn)制加法運(yùn)算〕的結(jié)果進(jìn)行調(diào)整,將它重新調(diào)整為壓縮BCD碼表示的數(shù)。本卷須知:①緊跟加法指令之后。②影響所有標(biāo)志[例3.33]假設(shè)(A)=81H,(R5)=89H。執(zhí)行指令:ADD A,R5DA A3.5算術(shù)運(yùn)算指令3.5.2乘除指令指令集合:MUL/DIV

AB指令功能:MUL為無符號(hào)數(shù)整數(shù)乘法(A)×(B),16位積的高、低字節(jié)分別在B、ACC中。DIV為無符號(hào)數(shù)整數(shù)除法(A)/(B),商的整數(shù)在ACC中,余數(shù)在B中。本卷須知:CY=0。影響P標(biāo)志。不影響AC標(biāo)志。對(duì)OV標(biāo)志:乘法乘積大于0FFH時(shí),OV=1〔表示乘積超過一個(gè)字節(jié)十進(jìn)制數(shù)能夠表示的范圍〕,否那么OV=0;除法假設(shè)原來除數(shù)B=0,那么存放結(jié)果的A和B中內(nèi)容都不確定,此時(shí)OV=1,否那么OV=0。3.5算術(shù)運(yùn)算指令3.5.2乘除指令[例3.34]假設(shè)(A)=0A0H,(B)=50H。執(zhí)行指令:MUL AB;(A)×(B)=0A0H×50H→BA[例3.35]假設(shè)(A)=0A0H,(B)=22H。執(zhí)行指令:DIV AB;(A)/(B)=0A0H/22H→A及B3.6算術(shù)運(yùn)算指令3.6.1ACC的邏輯操作指令1、清A指令指令集合:CLR

A指令功能:將累加器A的內(nèi)容清“0”。即0→A。本卷須知:只影響P標(biāo)志。[例3.36]假設(shè)〔A〕=0A0H。執(zhí)行指令: CLR A ;0→A3.6算術(shù)運(yùn)算指令3.6.1ACC的邏輯操作指令2、A內(nèi)容取反指令指令集合:CPL

A指令功能:將累加器A的內(nèi)容按位逐一取反,即某一位,如果原來是1就變0,原來是0就變1。即→A本卷須知:不影響標(biāo)志。例3.37假設(shè)(A)=0A0H=10100000B。執(zhí)行指令: CPL A3.6算術(shù)運(yùn)算指令3.6.1ACC的邏輯操作指令3、A內(nèi)容循環(huán)移位指令指令集合:RL/RR

A指令功能:RL

A的功能是將累加器ACC的內(nèi)容左循環(huán)移動(dòng)一位,即位0移入位1,位1移入位2……位7移入位0。RRA的功能是將累ACC的本卷須知:不影響標(biāo)志。[例3.38]假設(shè)(A)=66H。求執(zhí)行以下兩條指令后A的內(nèi)容: RL A RR A內(nèi)容右循環(huán)移動(dòng)一位,即位7移入位6,位6移入位5……位0移入位7。3.6算術(shù)運(yùn)算指令3.6.1ACC的邏輯操作指令4、A內(nèi)容帶進(jìn)位循環(huán)移位指令指令集合:RLC/RRC

A指令功能:RLC

A的功能是將累加器ACC的內(nèi)容和進(jìn)位標(biāo)志CY一起左循環(huán)移動(dòng)一位,即CY移入位0、位0移入位1……位7移入CY。RRC

A的功能是將累加器ACC的內(nèi)容和進(jìn)位標(biāo)志CY一起右循環(huán)移動(dòng)一位,即CY移入位7、位7移入位6……位0移入位CY。本卷須知:只影響CY、P標(biāo)志3.6算術(shù)運(yùn)算指令3.6.1ACC的邏輯操作指令4、A內(nèi)容帶進(jìn)位循環(huán)移位指令[例3.39]假設(shè)(A)=66H。CY=1。求執(zhí)行以下兩條指令后A的內(nèi)容:RLC

ARRC

A[例3.40]假設(shè)(R3)=87H,(R4)=65H,(R5)=43H。以下是(R3)(R4)(R5)×4的程序,其中進(jìn)位局部存放在R2中:CLR CMOV R2,#0RLC

R5RLC

R4RLC

R3RLC R2RLC R5RLC R4RLC R3RLC R23.6算術(shù)運(yùn)算指令3.6.1ACC的邏輯操作指令5、A內(nèi)容半字節(jié)交換指令指令集合:SWAP

A指令功能:這條指令是將累加器ACC的高半字節(jié)(ACC.7~ACC.4)與低半字節(jié)(ACC.3~ACC.0)相互交換。本卷須知:不影響標(biāo)志[例3.41]假設(shè)(A)=87H。執(zhí)行指令: SWAP A ;(A)0~3?(A)4~73.6算術(shù)運(yùn)算指令3.6.2兩個(gè)操作數(shù)的邏輯操作指令指令集合:ANL/ORL/XRL

A,Rn/@Ri/direct/#dataANL/ORL/XRL

direct,A/#data指令功能:邏輯與指令組的功能是將DST與SRC之間按位進(jìn)行與操作,結(jié)果存入DST中。邏輯或指令組的功能是將DST與SRC之間按位進(jìn)行或操作,結(jié)果存入DST中。邏輯異或指令組的功能是將DST與SRC之間按位進(jìn)行異或操作,結(jié)果存入DST中。本卷須知:①上述指令中當(dāng)DST為ACC時(shí),只影響P標(biāo)志。其余指令不影響標(biāo)志。②對(duì)Pi口的讀操作,讀出的是口鎖存器內(nèi)容,而不是引腳狀態(tài)。3.6算術(shù)運(yùn)算指令3.6.2兩個(gè)操作數(shù)的邏輯操作指令[例3.42]以下分別介紹這三組指令:邏輯與指令組:ANL

A,Rn

;(A)∩(Rn)→AANL

A,@Ri ;(A)∩((Ri))→AANL

A,direct

;(A)∩(direct)→AANL

A,#data

;(A)∩data→AANL

direct,A

;(direct)∩(A)→directANL

direct,#data ;(direct)∩data→direct邏輯或指令組:ORL

A,Rn

;(A)∪(Rn)→AORL A,@Ri ;(A)∪((Ri))→AORL

A,direct

;(A)∪(direct)→AORL

A,#data

;(A)∪data→AORL

direct,A

;(direct)∪(A)→directORL

direct,#data ;(direct)∪data→direct3.6算術(shù)運(yùn)算指令3.6.2兩個(gè)操作數(shù)的邏輯操作指令邏輯異或指令組:XRL

A,Rn

;(A)⊕(Rn)→AXRL

A,@Ri ;(A)⊕((Ri))→AXRL

A,direct

;(A)⊕(direct)→AXRL

A,#data ;(A)⊕data→AXRL

direct,A

;(direct)⊕(A)→XRL

direct,#data ;(direct)⊕data→direct[例3.43]假設(shè)(A)=70H,(R1)=55H,(55H)=22H。執(zhí)行指令:ANL A,@R1[例3.44]假設(shè)(A)=70H,(R6)=55H。執(zhí)行指令:ORL A,R63.6算術(shù)運(yùn)算指令3.6.2兩個(gè)操作數(shù)的邏輯操作指令[例3.45]假設(shè)(50)=70。執(zhí)行指令:XRL 50,#100[例3.46]假設(shè)(A)=33H,(R4)=25H,(R0)=44H,(44H)=0ADH,(TCON)=5BH。求執(zhí)行以下程序后A、R4和TCON的內(nèi)容。ANL A,R4ORL

A,@R0XRL

A,TCONMOV

R4,AANL

TCON,#126XRL

A,#45H3.7算術(shù)運(yùn)算指令3.7.1位變量傳送指令指令集合:MOV

C,bitMOVbit,C指令功能:實(shí)現(xiàn)任何可尋址位單元與位累加器CY之間位變量的相互傳送。即bit→C與C→bit。本卷須知:①SRC如果是P0~P3的相關(guān)位,讀出的是對(duì)應(yīng)的引腳狀態(tài)。DST如果是P0~P3的相關(guān)位,數(shù)據(jù)將寫入對(duì)應(yīng)的口鎖存器。②可尋址的位包括:內(nèi)部RAM20H~2FH這16個(gè)字節(jié)的128個(gè)位,和SFR中能夠被8整除的SFR的位。③位地址的表述方式可以有多種。④bit在位操作指令中是直接尋址方式。而C是位操作指令中的位累加器,在有關(guān)指令中是存放器尋址方式,因此指令中的C不能用PSW.7、CY來表示。3.7算術(shù)運(yùn)算指令3.7.1位變量傳送指令[例3.47]以下通過實(shí)例介紹這兩條指令。假設(shè)(CY)=1,(20H).0=0,(EA)=0,P0.0(口鎖存器)=1。求執(zhí)行以下指令后各位單元的值:MOV C,0MOV IE.7,C MOV P0.0,C3.7算術(shù)運(yùn)算指令3.7.2位變量修改指令指令集合:CLR

C/bitSETB

C/bitCPL

C/bit指令功能:這組指令對(duì)給出的累加器CY或位單元執(zhí)行清“0”、置“1”和取反操作。本卷須知:OD中,如果是P0~P3的相關(guān)位,改變的是對(duì)應(yīng)口鎖存器的內(nèi)容。[例3.48]以下分別介紹這組指令:CLR CCLR bitSETB CSETB bitCPL CCPL bit3.7算術(shù)運(yùn)算指令3.7.3位變量邏輯操作指令指令集合:ANL/ORL

C,bit/指令功能:邏輯與指令組的功能是將CY值與SRC指出的位單元中的值或其取反值進(jìn)行與操作,結(jié)果存入CY中。邏輯或指令組的功能是將CY值與SRC指出的位單元中的值或其取反值進(jìn)行或操作,結(jié)果存入CY中。本卷須知:對(duì)Pi口的相關(guān)位讀操作,讀出的是引腳狀態(tài),不是口鎖存器內(nèi)容。3.7算術(shù)運(yùn)算指令3.7.3位變量邏輯操作指令[例3.49]以下通過實(shí)例介紹這兩組指令的應(yīng)用。假設(shè)(CY)=1,(20H).1=0,(24H)=1,B.5=0。求執(zhí)行以下程序后各位單元的值:ANL C,1ANL

C,ORL C,24H

ORL

C,[例3.50]執(zhí)行以下程序段,試說明其功能: MOV C,0 ANL C,20H ORL C,30H CPL C MOV P1.0,C3.8控制轉(zhuǎn)移指令3.8.1絕對(duì)轉(zhuǎn)移指令1、相對(duì)轉(zhuǎn)移指令指令集合:SJMPrel指令功能:這是一條256字節(jié)范圍內(nèi)的無條件相對(duì)跳轉(zhuǎn)指令。該指令執(zhí)行時(shí)把當(dāng)前PC值〔即指令執(zhí)行后的PC值〕加上偏移量rel〔8位二進(jìn)制補(bǔ)碼〕形成新的指令執(zhí)行地址,并轉(zhuǎn)向該地址繼續(xù)執(zhí)行程序。本卷須知:①新PC=當(dāng)前PC+rel=原PC+n+rel=原PC+2+rel。②偏移量rel(8位補(bǔ)碼)在當(dāng)前PC條件下的尋址范圍為-128B~+127B。③在實(shí)際程序中,操作數(shù)rel一般用標(biāo)號(hào)來表示。匯編程序時(shí),相應(yīng)的rel值會(huì)自動(dòng)計(jì)算給出。3.8控制轉(zhuǎn)移指令3.8.1絕對(duì)轉(zhuǎn)移指令1、相對(duì)轉(zhuǎn)移指令[例3.51]假設(shè)指令SJMPrel的擺放地址為1023H。在某一程序中執(zhí)行指令后,問指令轉(zhuǎn)向哪個(gè)這單元繼續(xù)執(zhí)行程序。SJMP

6FH討論:①[例3.51]中,假設(shè)rel=80H〔-128〕,是負(fù)數(shù)的情況②[例3.51]中,假設(shè)rel=7FH〔+127〕,是正數(shù)的情況③[例3.51]中,假設(shè)rel=0FEH④[例3.51]中,假設(shè)rel=0⑤[例3.51]中,假設(shè)rel=0FFH3.8控制轉(zhuǎn)移指令3.8.1絕對(duì)轉(zhuǎn)移指令2、短跳轉(zhuǎn)指令指令集合:AJMPaddr11指令功能:這是一條2K字節(jié)范圍內(nèi)的無條件跳轉(zhuǎn)指令。該指令執(zhí)行時(shí)把當(dāng)前PC(原PC+2,即指令執(zhí)行后的PC)的高5位作為新PC地址的高5位,與指令操作碼字段和操作數(shù)字段共同給出的11位地址作為新PC地址的低11位,從而形成新的指令執(zhí)行16位地址,并轉(zhuǎn)向該地址繼續(xù)執(zhí)行程序。本卷須知:①本指令不改變當(dāng)前PC地址的高5位,只能改變PC地址的低11位,故程序的轉(zhuǎn)移范圍為2KB〔0~7FFH〕。②在實(shí)際程序中,操作數(shù)addr11一般用標(biāo)號(hào)來表示。匯編程序時(shí),相應(yīng)的addr11值和機(jī)器代碼會(huì)自動(dòng)計(jì)算給出。3.8控制轉(zhuǎn)移指令3.8.1絕對(duì)轉(zhuǎn)移指令2、短跳轉(zhuǎn)指令[例3.53]假設(shè)指令A(yù)JMPaddr11存放在1FFFFH、2000H單元,addr11=51AH=10100011010B。試給出執(zhí)行指令A(yù)JMPaddr11后程序轉(zhuǎn)移地址及相應(yīng)指令的機(jī)器代碼。因當(dāng)前PC=1FFFHH+2=2001H=0010000000000001B,新PC高5位為00100。新PC構(gòu)成見圖新PC構(gòu)成圖機(jī)器代碼構(gòu)成圖3.8控制轉(zhuǎn)移指令3.8.1絕對(duì)轉(zhuǎn)移指令3、長跳轉(zhuǎn)指令指令集合:LJMPaddr16指令功能:這是一條64K字節(jié)范圍內(nèi)的無條件跳轉(zhuǎn)指令。該指令執(zhí)行時(shí)把a(bǔ)ddr16作為新的指令執(zhí)行地址,即新PC=addr16=a15~a0,并轉(zhuǎn)向該地址繼續(xù)執(zhí)行程序。本卷須知:①本指令與當(dāng)前PC的16位地址無關(guān),故程序的轉(zhuǎn)移范圍為64KB〔0~0FFFFH〕。②在實(shí)際程序中,操作數(shù)addr16一般用標(biāo)號(hào)來表示。匯編程序時(shí),相應(yīng)的addr16值會(huì)自動(dòng)給出。[例3.54]假設(shè)指令LJMPaddr11存放在3000H開始的連續(xù)3個(gè)單元中,addr16=1000H。試給出執(zhí)行指令LJMP1000H后程序的轉(zhuǎn)移地址。3.8控制轉(zhuǎn)移指令3.8.1絕對(duì)轉(zhuǎn)移指令4、散轉(zhuǎn)指令〔基址加變址間接轉(zhuǎn)移指令〕指令集合:JMP@A+DPTR指令功能:指令把累加器ACC中的8位無符號(hào)數(shù)與數(shù)據(jù)指針DPTR中的16位數(shù)相加,結(jié)果作為新的指令地址送PC,即新PC=(A)+(DPTR),并轉(zhuǎn)向該地址繼續(xù)執(zhí)行程序。本卷須知:指令執(zhí)行過程中不改變累加器ACC和數(shù)據(jù)指針DPTR的內(nèi)容,利用這一特點(diǎn),這條指令能夠?qū)崿F(xiàn)程序的散轉(zhuǎn)。所謂散轉(zhuǎn),就是將ACC中的數(shù)據(jù)作為作為相應(yīng)處理的序號(hào),數(shù)據(jù)指針DPTR的內(nèi)容作為基數(shù)〔起始地址〕,從而利用這條指令轉(zhuǎn)向相應(yīng)處理程序的功能。3.8控制轉(zhuǎn)移指令3.8.1絕對(duì)轉(zhuǎn)移指令[例3.55]假設(shè)指令JMP@A+DPTR存放在0242H單元,〔A〕=10H,〔DPTR〕=556FH。試給出執(zhí)行指令JMP@A+DPTR后程序的轉(zhuǎn)移地址:JMP @A+DPTR ;新PC=10H+556FH=557FH3.8控制轉(zhuǎn)移指令3.8.1絕對(duì)轉(zhuǎn)移指令[例3.56]假設(shè)A中存放了3個(gè)等待處理的命令〔如按鍵值〕編號(hào)〔0~2〕,程序存儲(chǔ)器中相應(yīng)存放了一個(gè)標(biāo)號(hào)為PMTB的轉(zhuǎn)移命令表,那么執(zhí)行下面的程序,將根據(jù)A的命令編號(hào)轉(zhuǎn)向相應(yīng)的命令處理程序。3.8控制轉(zhuǎn)移指令3.8.2條件轉(zhuǎn)移指令1、測(cè)試條件符合轉(zhuǎn)移指令指令集合與指令功能:這組指令,滿足條件就轉(zhuǎn)移,不滿足條件就順序執(zhí)行程序:JZ rel

;(A)=0轉(zhuǎn)移

JNZ

rel

;(A)≠0轉(zhuǎn)移JC

rel

;CY=1轉(zhuǎn)移

JNC

rel

;CY=0轉(zhuǎn)移

JB

bit,rel

;(bit)=1轉(zhuǎn)移JNB

bit,rel

;(bit)=0轉(zhuǎn)移JBC

bit,rel

;(bit)=1轉(zhuǎn)移,轉(zhuǎn)移后清“0”bit位本卷須知:①與SJMPrel指令根本相同,其中新PC=原PC+2/3+rel。*②如果bit是P0~P3中的位,測(cè)試的是引腳,而非口鎖存器3.8控制轉(zhuǎn)移指令3.8.2條件轉(zhuǎn)移指令1、測(cè)試條件符合轉(zhuǎn)移指令[例3.57]假設(shè)(2CH).5=1,rel=0B0H,指令JBC

bit,rel存放的地址是1578H。試問執(zhí)行以下指令后,程序是否轉(zhuǎn)移?新PC值是多少?(2CH).5=?JBC

33H,0B0H或JBC

65H,0B0H3.8控制轉(zhuǎn)移指令3.8.2條件轉(zhuǎn)移指令2、比較不相等轉(zhuǎn)移指令指令集合:CJNEA,direct/#data,relCJNERn/@Ri,#data,rel指令功能:執(zhí)行這組指令時(shí),當(dāng)操作數(shù)1與操作數(shù)2不相等時(shí)轉(zhuǎn)移,否那么就順序執(zhí)行程序。同時(shí)對(duì)于無符號(hào)整數(shù),當(dāng)操作數(shù)1<操作數(shù)2時(shí),CY=1,否那么CY=0。本卷須知:①與SJMPrel指令根本相同,其中新PC=原PC+3+rel。*②對(duì)Pi口的比較,比較的是引腳狀態(tài),不是口鎖存器內(nèi)容3.8控制轉(zhuǎn)移指令3.8.2條件轉(zhuǎn)移指令2、比較不相等轉(zhuǎn)移指令[例3.58]以下分別介紹這些指令:CJNE A,70H,7BH

;(A)≠(70H)轉(zhuǎn)移CJNE

A,#15,-100

;(A)≠15轉(zhuǎn)移CJNE

R7,#0D7H,9H ;(R7)≠0D7H轉(zhuǎn)移CJNE

@R0,#64H,80 ;((R0))≠64H轉(zhuǎn)移[例3.59]執(zhí)行下面程序后,將根據(jù)A的內(nèi)容大于60H、等于60H或小于60H三種情況作不同的處理:CJNE

A,#60H,NEQEQ: …

?NEQ: JCLOW

?LOW: …

?3.8控制轉(zhuǎn)移指令3.8.2條件轉(zhuǎn)移指令3、減1不為0轉(zhuǎn)移指令指令集合:DJNZRn/direct,rel指令功能:這兩條指令先把操作數(shù)1減1,結(jié)果回送到操作數(shù)1中去的同時(shí),檢查結(jié)果如果不為

溫馨提示

  • 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)論