【大學(xué)】MCS-51系列單片機的指令系統(tǒng)及匯編語言程序設(shè)計_第1頁
【大學(xué)】MCS-51系列單片機的指令系統(tǒng)及匯編語言程序設(shè)計_第2頁
【大學(xué)】MCS-51系列單片機的指令系統(tǒng)及匯編語言程序設(shè)計_第3頁
【大學(xué)】MCS-51系列單片機的指令系統(tǒng)及匯編語言程序設(shè)計_第4頁
【大學(xué)】MCS-51系列單片機的指令系統(tǒng)及匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

主要內(nèi)容尋址方式指令系統(tǒng)傳送與交換指令算術(shù)運算、邏輯運算指令控制轉(zhuǎn)移指令位操作指令偽指令程序設(shè)計舉例第3章MCS-51系列單片機的指令系統(tǒng)及匯編語言程序設(shè)計編輯ppt

計算機通過執(zhí)行程序完成人們指定的任務(wù),程序由一條一條指令構(gòu)成,能為CPU識別并執(zhí)行的指令的集合就是該CPU的指令系統(tǒng)。

MCS-51單片機匯編語言指令格式:

操作符目的操作數(shù),源操作數(shù)操作符指明該指令完成什么操作;操作數(shù)是指明該指令的操作對象。目的操作數(shù)是存放結(jié)果的。指令中操作數(shù)提供的方式稱為尋址方式。編輯ppt

指令中的常用符號Rn:

表示當(dāng)前工作寄存器R0~R7中的一個。Ri:

代表R0和R1寄存器中的一個,用作間接尋址寄存器。dir:8位直接字節(jié)地址(片內(nèi)RAM和SFR)#data:8位立即數(shù),即8位常數(shù)。可以為2進(jìn)制(B)、10進(jìn)制、16進(jìn)制(H)、字符(‘

’)#data16:

表示16位立即數(shù),即16位常數(shù),取值范圍為:#0000H~#0FFFFHaddr16:

表示16位地址addr11:

表示11位地址rel:

相對偏移量(為一字節(jié)補碼)用于相對轉(zhuǎn)移指令中bit:

位地址,在位地址空間中。 $:表示當(dāng)前指令的地址。編輯ppt

指令中直接給出操作數(shù)的尋址方式。在51系列單片機的指令系統(tǒng)中,立即數(shù)用一個前面加“#”號的8位數(shù)(#data,如#30H)或16位數(shù)(#data16,如#2052H)表示。立即尋址中的數(shù),稱為立即數(shù)。例如指令:MOVA,#58H;58H→A3.1尋址方式

3.1.1立即尋址編輯ppt

操作數(shù)的地址直接出現(xiàn)在指令中。 尋址對象:①內(nèi)部數(shù)據(jù)存貯器:使用它的地址。②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。③位地址空間④程序存儲器空間例:MOVA,40H;(40H)→AMOV40H,41H;(41H)→(40H)

MOVP0,#45H;

45H→P0MOV80H,#45H;

45H→P0MOVC,18H;

位地址18H→C3.1.2直接尋址編輯ppt

操作數(shù)存放在寄存器中。尋址對象:A,B,C,DPTR,R0~R7。

B僅在乘除法指令中為寄存器尋址,在其他指令中為直接尋址。

A可以寄存器尋址又可以直接尋址,直接尋址時寫作ACC

例如:MOVA,R0;R0→AMULAB;A*B→BAADDA,ACC;A+A→A3.1.3寄存器尋址編輯ppt

操作數(shù)存放在以寄存器內(nèi)容為地址的單元中,用做間址的寄存器為Ri(i=0,1)、DPTR。

①對片內(nèi)的間接尋址用Ri(i=0,1)如:MOVR0,#20H

MOV@R0,A;A→(20H)

②對片外的間接尋址可用Ri(i=0,1)或DPTR

如:MOVX@DPTR,A;A→以DPTR的內(nèi)容為地址的外部RAM中

MOVX@R1,A;A→以P2R1內(nèi)容為地址的外部RAM中③PUSH和POP指令的源操作數(shù)是以SP間接尋址注意:寄存器間接尋址不能訪問SFRMOVR1,#81HMOVA,@R1;不能訪問SP,只能用MOVA,SP3.1.4寄存器間址編輯ppt

變址尋址只能訪問程序存儲器。操作數(shù)所在位置的地址由DPTR或PC寄存器與A的內(nèi)容相加后形成。其中累加器A內(nèi)容是可變的。變址尋址只有三條指令。

MOVCA,@A+DPTR;(A+DPTR)→AMOVCA,@A+PC;(A+PC)→AJMP

@A+DPTR;A+DPTR→PC注意:①A的內(nèi)容是無符號數(shù)。②PC值是指令的當(dāng)前PC值,即下條指令的PC值3.1.5變址尋址編輯ppt3.1.6相對尋址

變址尋址只能訪問程序存儲器。相對尋址是將程序計數(shù)器PC的當(dāng)前值與指令第二字節(jié)給出的偏移量相加,從而形成轉(zhuǎn)移的目標(biāo)地址。

如:JZ61H注意:①相對偏移量是一字節(jié)有符號數(shù),用補碼表示,偏移范圍是:-128~+127。②PC值是指令的當(dāng)前PC值,即下條指令的PC值。③源程序中偏移量常用符號地址表示。編輯ppt

對可位尋址的位地址尋址。包括片內(nèi)RAM的位地址空間和可位尋址的SFR(地址能被8整除) 如:MOVC,20H

;位尋址

MOVA,20H

;字節(jié)尋址以上兩條指令究竟是位尋址還是字節(jié)尋址,根據(jù)兩操作數(shù)類型一致的原則,由另一個操作數(shù)決定。

3.1.7

位尋址編輯ppt立即尋址直接尋址寄存器尋址寄存器間接尋址變址尋址相對尋址位尋址片內(nèi)RAM低128B單元√√工作寄存器組R0~R7√√√特殊功能寄存器SFRA、B、DPTR、C√√√程序存儲器√√√√片外RAM√位地址空間√√尋址方式與存儲空間的對應(yīng)關(guān)系

編輯ppt

dir@Ri

Rn#dataAMOVA, Rn

#datadir

@RiMOVdir, ARn,@Ri

#data

dir

MOV@Ri, Adir#data內(nèi)部RAM、SFR之間的傳送MOV指令MOVRn,

Adir#data3.2指令系統(tǒng)

3.2.1數(shù)據(jù)傳送與交換指令編輯ppt例R1=20H,(20H)=55H,

MOVA,@R1執(zhí)行后,A=55H。例(40H)=30H,

MOVR7,40H執(zhí)行后,R7=30H。例MOVR7,#40H執(zhí)行后,R7=40H。注意:寄存器之間無傳送;寄存器間址和寄存器之間無傳送;立即數(shù)不能做目標(biāo)地址;編輯ppt@Ri,A@DPTR,AA,@RiA,@DPTRMOVXMOVCA,@A+PCA,@A+DPTR2.外部存儲器和A累加器之間的傳送MOVXA

外部數(shù)據(jù)存儲器程序存儲器MOVC編輯ppt

利用MOVX實現(xiàn)片外數(shù)據(jù)存儲器數(shù)據(jù)傳送

(2000H)→(2100H)

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

;DPTR=2000H

;DPTR=2100H;A←X

;(2100H)←Xx片外數(shù)據(jù)存儲器不能直接尋址。下列為非法指令:

MOVXA,2000H×MOVX2100H,2000H×編輯ppt

利用Ri間址來實現(xiàn)將(2000H)→(2100H)MOVP2,#20H ;高位地址

MOVR0,#00 ;低位地址

MOVXA,@R0 ;讀片外RAMMOVP2,#21H ;改變高位地址

MOVX@R0,A ;寫片外RAM編輯ppt

利用MOVC指令實現(xiàn)查表功能

注:①只能從程序存儲器讀取數(shù)據(jù)到A累加器。

②只能使用變址間接尋址方式

1)DPTR為基址寄存器

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

查表范圍為64KB程序存儲器任意空間。2)PC為基址寄存器

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

常數(shù)表只能在查表指令后256B范圍內(nèi)。編輯ppt例查表法求Y=X2。設(shè)X(0≤X≤15)在片內(nèi)RAM20H單元,要求將查表求Y,存入片內(nèi)RAM21H單元1)用DPTR作基址寄存器

ORG0100H SQU: MOVDPTR,#TAB ;確定表首地址

MOVA,20H ;取X

MOVCA,@A+DPTR;查表求Y=X2

MOV21H,A ;保存Y RET ;子程序結(jié)束

… ;其它程序段

ORG0200H ;常數(shù)表格首地址TAB: DB00,01,04,09,…,225;平方表編輯ppt

指令地址

源程序

ORG0100H ;程序起始地址

0100H SQU:MOVA,20H ;取X 0102H ADDA,#3 ;修正偏移量

0104H MOVCA,@A+PC;查表求Y=X2 0105H MOV21H,A ;存結(jié)果

0107H RET ;子程序結(jié)束

0108H TAB:DB00,01,04 ;平方表

010BH DB09,…,225 思考題:當(dāng)0≤X≤255時,如何用查表法編程求Y=X22)用PC作基址寄存器編輯ppt3.交換指令

實現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送1)字節(jié)交換指令

XCHA,Rn;A←→Rn XCHA,@Ri;A←→(Ri)XCHA,dir;A←→(dir)2)半字節(jié)交換指令

XCHDA,@Ri;A0~3←→(Ri)0~3SWAPA ;A4~7←→A0~3

dir@Ri

RnA4.堆棧操作指令

入棧指令:PUSHdir;SP←SP+1,(SP)←(dir)

出棧指令:POPdir;(dir)←(SP),SP←SP-1

@RiA7~47~43~03~0A7~43~0編輯pptdir@RiRn#dataA

dir@Ri

Rn#dataAA,Rn,@Ri

#datadirADDADDCSUBBANLORLXRL加進(jìn)位加借位減與或異或1.以A為目的操作數(shù)的算術(shù)、邏輯運算指令(24條)3.2.2算術(shù)運算和邏輯運算指令編輯ppt2.以dir為目的操作數(shù)邏輯運算指令(6條)A#data

dir與ANL或ORL異或XRLdir,#dataA3.加1、減1指令@RiAdirRnDPTRINC@RiAdirRnDEC編輯ppt4.十進(jìn)制調(diào)整指令

DAA;僅對存于A中的加法結(jié)果進(jìn)行十進(jìn)制調(diào)整

若需完成十進(jìn)制減法運算,則應(yīng)變減法運算為補碼的加法運算即可,其減數(shù)X的補碼通過(99-X)+1再DAA后得到。

原則:和低4位大于9或有半進(jìn)位,則低4位加6

和高4位大于9或有進(jìn)位,則高4位加6例:(DATA)-(DATA+1)=>(DATA+2)Y-X=Y-X+100-->有效位為2位十進(jìn)制,模為100=Y+(99-X)+1編輯ppt5.乘、除法指令MUL AB;A×B→BADIV AB;A÷B→商在A中,余數(shù)在B中6.專對A的指令CPL ACLR A;0→A;A→AMOVA,#99HDAACLRCADDA,DATASUBBA,DATA+1DAAADDA,#1MOVDATA+2,A編輯pptCYRRARLARLCARRCA移位指令(僅對A)00101101A01001011ACY11001011A000101101A1CY10010110A設(shè)1CYCY編輯ppt1.調(diào)用程序和返回類指令

1)長調(diào)用

LCALLaddr16;addr16→PC0~15

指令功能同80X86中的CALL,調(diào)用范圍64KB全部空間,指令的機器碼為三字節(jié)。

2)短調(diào)用

ACALLaddr11;addr11→PC0~10

指令的功能同前,主要區(qū)別為:

addr11→PC0~10,而PC11~15保持原值不變,故其調(diào)用范圍為2KB,即子程序入口距當(dāng)前PC不得超過2KB地址范圍。本指令的機器碼為二字節(jié)。3.2.3控制轉(zhuǎn)移類指令編輯ppt3)子程序返回指令(從棧頂彈出斷點到PC)

RET;從調(diào)用子程序返回。

RETI;從中斷服務(wù)程序返回并恢復(fù)中斷優(yōu)先級狀態(tài)觸發(fā)器。2.轉(zhuǎn)移指令

1)無條件轉(zhuǎn)移指令(1)短轉(zhuǎn)移

AJMPaddr11;addr11→PC0~10

轉(zhuǎn)移范圍:2KB機器碼為2字節(jié)編輯ppt(2)長轉(zhuǎn)移

LJMPaddr16;addr16→PC0~15

轉(zhuǎn)移范圍:64KB機器碼為3字節(jié)。(3)間接轉(zhuǎn)移

JMP@A+DPTR;A+DPTR→PC

分析下列程序段,說出當(dāng)A分別為0和2時,程序轉(zhuǎn)置何處?該程序段的功能是什么?

MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPPROC0AJMPPROC1AJMPPROC2AJMPPROC3編輯ppt

(4)無條件相對轉(zhuǎn)移

SJMPrel;PC+rel→PC,即As+2+rel→PC,機器碼為2字節(jié)

As為源地址(本指令的首地址),執(zhí)行本指令時當(dāng)前PC=As+2,rel為轉(zhuǎn)移的偏移量,轉(zhuǎn)移可以向前轉(zhuǎn)(目的地址小于源地址),也可以向后轉(zhuǎn)(目的地址大于源地址),因此偏移量rel是1字節(jié)有符號數(shù),用補碼表示(-128~+127),所以指令轉(zhuǎn)移范圍在離源地址As的-126~+129字節(jié)之間。編輯ppt2)條件轉(zhuǎn)移指令(1)累加器為零(非零)轉(zhuǎn)移

JZ/JNZrel;A=0/(A≠0)則轉(zhuǎn)移,否則順序執(zhí)行程序(2)減1不等于零轉(zhuǎn)移

DJNZRn/dir,rel

功能為:Rn(dir)-1→Rn(dir)

相減結(jié)果≠0轉(zhuǎn),否則順序執(zhí)行程序編輯ppt

(3)比較轉(zhuǎn)移指令

CJNEA,dir,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel操作數(shù)1不等于操作數(shù)2則轉(zhuǎn),否則順序執(zhí)行。1例:Y=-1X≥ZX<Z

Z

X

YDATA+2DATA+1DATAMOVDATA+2,#0FFHMOVA,DATACJNEA,DATA+1,NEXTNEXT:JCNEXT1MOVDATA+2,#1NEXT1:RETdir@RiRn#dataA編輯ppt1.位傳送指令

MOVC,bit;(bit)→CYMOVbit,C;CY→bit2.位狀態(tài)控制指令

CLRC;0→CY

CLRbit;0→bitSETBC;1→CYSETBbit;1→bitCPLC;CY→CYCPLbit;bit→bit3.2.4位操作指令編輯ppt3.位邏輯運算指令

ANLC,bit;CY∧(bit)→CY

ANLC,/bit;CY∧(bit)→CY

ORLC,bit;CY∨(bit)→CY

ORLC,/bit;CY∨(bit)→CY編輯ppt

4.位轉(zhuǎn)移 位轉(zhuǎn)移根據(jù)位的值決定轉(zhuǎn)移,均為相對轉(zhuǎn)移指令。

JCrel;CY=1,則轉(zhuǎn)移,否則順序執(zhí)行程序

JNCrel;CY=0,則轉(zhuǎn)移,否則順序執(zhí)行程序

JBbit,rel;(bit)=1,則轉(zhuǎn)移,否則順序執(zhí)行程序

JNBbit,rel;(bit)=0,則轉(zhuǎn)移,否則順序執(zhí)行程序

JBCbit,rel;(bit)=1,則轉(zhuǎn)移,且該位清零,否則順序執(zhí)行程序編輯ppt1.定義:匯編控制指令,沒有指令代碼,不能被CPU執(zhí)行,只用于匯編過程,為匯編程序提供匯編信息。2.常用偽指令(1)ORGORG是設(shè)置起始地址偽指令,其格式是:

ORG 16位地址或標(biāo)號(2)ENDEND是結(jié)束匯編偽指令,其格式是:

END(3)DB DB是定義字節(jié)偽指令,其格式是:

[標(biāo)號:]DB字節(jié)型數(shù)表(4)DW DW是定義字偽指令,其格式是:

[標(biāo)號:] DW字型數(shù)表3.3偽指令編輯ppt(5)DS DS是定義存儲空間偽指令,其格式是:

[標(biāo)號:] DS表達(dá)式(6)EQU EQU是賦值偽指令,其格式是: 字符名稱 EQU 數(shù)據(jù)或匯編符號(7)DATA DATA是數(shù)據(jù)地址賦值偽指令,其格式是: 字符名稱 DATA 表達(dá)式(8)BIT BIT是位地址賦值偽指令,其格式是: 字符名稱 BIT 位地址

詳見表3.3MCS-51中的偽指令編輯ppt進(jìn)制間的轉(zhuǎn)換1.十進(jìn)制→二進(jìn)制(整數(shù))任何十進(jìn)制數(shù)D有:D=dn-1×10n-1+dn-2×10n-2+…

+d1×101+d0×100

=(…(dn-1×10+dn-2)×10

+…

+d1)×10+d0規(guī)律:di×10+di-1(i=1,2,…n-1)按二進(jìn)制運算規(guī)則運算則得二進(jìn)制數(shù)3.4程序設(shè)計舉例編輯ppt例:將4位十進(jìn)制數(shù)D3D2D1D0轉(zhuǎn)換成二進(jìn)制數(shù),設(shè)4位十進(jìn)制數(shù)D3D2D1D0按分離BCD碼形式存放,要求結(jié)果的高位存放在R3中,結(jié)果的低位存放在R2中。方法:D3D2D1D0=(((0×10+D3)×10+D2)×10+D1)×10+D0結(jié)果:16位二進(jìn)制數(shù)0D30D20D10D0DATA編輯ppt流程:設(shè)置指針指向DATA計數(shù)器初始(R7=3)Di初始→結(jié)果單元結(jié)果單元內(nèi)容×10+Di-1→結(jié)果單元修改指針計數(shù)器-1→計數(shù)器↓↓↓↓↓↓計數(shù)器=0?↓返回YN編輯ppt×R3R2R2×0AHR3×0AH0A000R3R2MOV A,R2MOV B,#0AHMUL ABMOV R2,AMOV A,BXCH A,R3MOV B,#0AHMUL ABADD A,R3MOV R3,ARETMUL10:結(jié)果單元乘10子程序由于4位10進(jìn)制(9999)小于16位2進(jìn)制(65535),所以轉(zhuǎn)換結(jié)果不會大于16位編輯pptMOV R0,#DATAMOV R7,#03HMOV A,@R0MOV R2,AMOV R3,#0ACALLMUL10INC R0MOV A,@R0ADD A,R2MOV R2,AMOV A,R3ADDC A,#0MOV R3,ADJNZ R7,BCDB1RETBCDB:BCDB1:0D30D20D10D0DATA編輯ppt2.十進(jìn)制→二進(jìn)制(小數(shù))10進(jìn)制乘2取整(取溢出)例:0.625=2-1+2-3

=

0.10100000Ba.小數(shù)點位數(shù)由乘2次數(shù)定,結(jié)果單元字節(jié)數(shù)也由此定b.第一次的整數(shù)權(quán)最高=2-1c.乘2是10進(jìn)制的乘2,自身相加再DAA調(diào)整D

=b-1×2-1+b-2×2-2+…+b-m×2-m

編輯ppt例:設(shè)入口時10進(jìn)制數(shù)在A中,要求結(jié)果放在R2中(8位二進(jìn)制小數(shù))結(jié)果單元清0次數(shù)計數(shù)器初始十進(jìn)制小數(shù)單元乘2整數(shù)移入結(jié)果單元計數(shù)器-1→計數(shù)器↓↓↓↓↓計數(shù)器=0?↓返回YNBCDBP:MOV R2,#0 MOV R6,#8BCDBP1:ADDA,ACC DAA XCH A,R2 RLC A XCH A,R2 DJNZR6,BCDBP1 RET;結(jié)果單元清0;次數(shù)初始;10×2;將整數(shù)移入結(jié)果單元溢出在進(jìn)位位中編輯ppt3.二進(jìn)制→十進(jìn)制(整數(shù))按權(quán)展開以8位為例:b7b6b5b4b3b2b1b0=b7×27+b6×26+…+b0×20

=(…((0×2+b7)×2+b6)×2+…)×2+b0將二進(jìn)制數(shù)逐步左移得:b7,b6,b5,b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論