DPJ第三章(AVR指令系統(tǒng))_第1頁
DPJ第三章(AVR指令系統(tǒng))_第2頁
DPJ第三章(AVR指令系統(tǒng))_第3頁
DPJ第三章(AVR指令系統(tǒng))_第4頁
DPJ第三章(AVR指令系統(tǒng))_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章AVR單片機指令系統(tǒng)

基本概念:指令系統(tǒng)、機器語言指令、匯編語言指令

AVR單片機指令系統(tǒng)是RISC結(jié)構(gòu)的精簡指令集。

AVR單片機目前用得比較多器件有118條指令。大多數(shù)指令的執(zhí)行時間為單個時鐘周期。

主要內(nèi)容:指令格式、尋址方式、偽指令、具體指令的分類講解。指令分類:算術(shù)和邏輯指令(25);轉(zhuǎn)移指令(31);數(shù)據(jù)傳送指令(31);

位指令和位測試指令

(31)。能對位、半字節(jié)、字節(jié)和雙字節(jié)數(shù)據(jù)進(jìn)行各種操作。

1§3.1指令格式指令的組成:操作碼和操作數(shù)如果是兩個操作數(shù),目的操作數(shù)在前,源操作數(shù)在后。例:Movr17,r18;r17←r18匯編語言源文件是由指令和偽指令組成的ASCII字符文件。一、語句(程序輸入行)的四種形式:

(1)【標(biāo)號】偽指令【操作數(shù)】【注釋】(2)【標(biāo)號】指令【操作數(shù)】【注釋】(3)注釋(4)空行括號內(nèi)的項是任選的

2語句行舉例:Label:.EQUVar1=100;置Var1等于100偽指令.EQUVar2=200;置Var2等于200here:rjmphere;上一條為無限循環(huán)指令二、常用符號

Rd:R0~R31或R16~R31(取決于指令);Rr:R0~R31;b、S、p、K、k、q:常數(shù)或常數(shù)表達(dá)式;3§3.2尋址方式

概念:指令給出參與運算的數(shù)據(jù)的方式。主要是:寄存器、I/O寄存器、數(shù)據(jù)存儲器、程序存儲器,轉(zhuǎn)移指令目標(biāo)地址等的計算。(還有立即數(shù))AVR單片機指令操作數(shù)的尋址方式有以下幾種:單寄存器直接尋址、

雙寄存器直接尋址、I/O寄存器直接尋址、數(shù)據(jù)存儲器直接尋址、數(shù)據(jù)存儲器間接尋址、帶后增量的數(shù)據(jù)存儲器間接尋址、帶預(yù)減量的數(shù)據(jù)存儲器間接尋址、帶位移的數(shù)據(jù)存儲器間接尋址、從程序存儲器取常數(shù)尋址、程序間接尋址和程序相對尋址。

4AVR單片機尋址方式立即數(shù)尋址;寄存器尋址:單寄存器直接尋址、

雙寄存器直接尋址;I/O寄存器:直接尋址;數(shù)據(jù)存儲器尋址:直接尋址、間接尋址、帶后增量的間接尋址、帶預(yù)減量的間接尋址、帶位移的間接尋址;從程序存儲器取常數(shù)尋址;轉(zhuǎn)移指令目標(biāo)地址的尋址:程序間接尋址、程序相對尋址。

5一、單寄存器直接尋址由指令指出一個寄存器的內(nèi)容作為操作數(shù),機器碼中給出該寄存器的直接地址,這種尋址方式稱為單寄存器直接尋址。例:INCRd;操作:Rd←Rd+1;機器碼:1001010d

dddd0011可對R0~R31中任意寄存器增1,不同寄存器只需改變機器碼中5位地址碼,若INCR5,則機器碼中的5個d取00101,機器碼即為$9453。6二、雙寄存器直接尋址由指令指出兩個寄存器的內(nèi)容作為操作數(shù),機器碼中給出該兩個寄存器的直接地址,這種尋址方式稱為雙寄存器直接尋址。例:ADDRd,Rr

;操作:Rd←Rd+Rr

;機器碼:000011rd

dddd

rrrr可對R0~R31中任意兩個寄存器相加,這兩個寄存器的各5位地址包含在機器碼中。7三、I/O寄存器直接尋址

指令可以直接對I/O寄存器進(jìn)行操作,I/O寄存器的直接地址包含在機器碼中。例:INRd,P;P是I/O寄存器的直接地址。操作:Rd←P;機器碼:10010ppd

dddd

pppp64個I/O寄存器,6位地址P32個寄存器,5位地址d。例如:INR5,$3E;(即把SPH輸入到R5中)機器碼為$B65C。8四、數(shù)據(jù)存儲器直接尋址

根據(jù)SRAM存儲器的直接地址(16位地址)存取數(shù)據(jù),為雙字指令。例:LDSRd,K;K是SRAM存儲器的直接地址。操作:Rd←(K);機器碼:1001000d

dddd0000KKKKKKKKKKKKKKKK例如:LDSR18,$100;(即把SRAM地址為$100的內(nèi)容傳送到R18中),機器碼:$912001009五、數(shù)據(jù)存儲器間接尋址

由某一個16位寄存器的內(nèi)容作為操作數(shù)的地址,該尋址方式稱為寄存器間接尋址,用于對SRAM存儲器存取操作,稱為數(shù)據(jù)存儲器間接尋址。操作數(shù)的地址在變址寄存器X、Y或Z中。例:LDRd,Y;操作:Rd←(Y),把以Y為指針的SRAM的內(nèi)容送Rd;機器碼:1000000d

dddd1000例如:LDR16,Y;(設(shè)Y=$067,即把SRAM地址為$67的內(nèi)容傳送到R16中);機器碼為$8108。10六、帶后增量的數(shù)據(jù)存儲器間接尋址

類似數(shù)據(jù)存儲器間接尋址方式,但寄存器X、Y或Z的內(nèi)容在操作后被加1,而操作數(shù)的地址為寄存器增量之前的內(nèi)容。這種尋址方式特別適用于訪問矩陣查表等。例:LDRd,Y+;操作:Rd←(Y),Y=Y+1,先把以Y為指針的SRAM的內(nèi)再容送Rd,再把Y增1。機器碼:1001000d

dddd1001;LDR16,Y+;(設(shè)Y=$067;即把SRAM地址為$67的內(nèi)容傳送到R16中且Y=$068)

機器碼為$9109。

11七、帶預(yù)減量數(shù)據(jù)存儲器間接尋址

類似數(shù)據(jù)存儲器間接尋址,但寄存器X、Y或Z

的內(nèi)容在操作之前先被減1,減1后的內(nèi)容為操作數(shù)的地址。這種尋址方式特別適用于訪問矩陣查表等應(yīng)用。例:LDRd,-Y

;操作:Y=Y-1,Rd←(Y),先把Y減1,再把以Y為指針的SRAM的內(nèi)再容送Rd;機器碼:1001000d

dddd1010LDR16,-Y;(設(shè)Y=$067,即先把Y減1,Y=$066,再把SRAM地址為$066的內(nèi)容傳送到R16中)。機器碼:$910A。12八、帶位移的數(shù)據(jù)存儲器間接尋址帶位移的數(shù)據(jù)存儲器間接尋址方式是利用變址寄存器Y或Z及指令字中的位移量q共同決定被存取SRAM存儲器的地址。操作數(shù)的地址由Y或Z寄存器的內(nèi)容加上機器碼中給出的位移量q。例:LDDRd,Y+q;操作:

Rd←(Y+q),其中0≤q≤63,

即把以Y+q為指針的SRAM的內(nèi)再容送Rd,而Y寄存器的內(nèi)容不變。機器碼:10q0qq0d

dddd1qqq。

13九、從程序存儲器取常數(shù)尋址

只有一條指令LPM,也稱查表指令。程序存儲器中存放常數(shù)字節(jié)的地址由寄存器Z的內(nèi)容確定。Z寄存器的高15位用于選擇字地址,而Z寄存器的最低位D0用于存放字地址的高低字節(jié)。若最低位為0,則選擇低字節(jié);若最低位為1,則選擇高字節(jié)。例:LPM;

操作:

R0←(Z),既把以Z為指針的程序存儲器的內(nèi)容送R0。若Z=$0100,即把地址為$0080的程序存儲器的低字節(jié)內(nèi)容送R0,若Z=$0101,即把地址為$0080的程序存儲器的高字節(jié)內(nèi)容送R0。

先了解一下,指令部分詳細(xì)講解。14十、程序間接尋址

程序間接尋址方式中使用Z寄存器存放要執(zhí)行程序的地址,程序轉(zhuǎn)到Z寄存器的內(nèi)容指定的地址處繼續(xù)執(zhí)行,即用寄存器Z的內(nèi)容代替PC的值。例:IJMP;

操作:

PC←Z,既把以Z的內(nèi)容送程序計數(shù)器。若Z=$0100,即把$0100送程序計數(shù)器,

程序從$0100開始執(zhí)行。

15十一、程序相對尋址

程序相對尋址方式在機器碼中包含了相對地址K,例:RJMPk;

操作:

PC←PC+1+k–2048≤k≤2047,執(zhí)行程序時,PC首先自動加1,再加k。即執(zhí)行該指令時程序計數(shù)器自動加1后又再跳k步。機器碼:1100kkkk

kkkk

kkkk

16§3.3偽指令和表達(dá)式匯編器提供一些偽指令,偽指令并不是指令系統(tǒng)中的指令,而是用于:調(diào)整存儲器中程序的位置;定義宏、定義一些符號;初始化存儲器等。全部偽指令如下:17一、存儲器類型定義偽指令(不帶參數(shù))1、CSEG——代碼段表明下面是代碼段。語法:.CSEG

2、DSEG——數(shù)據(jù)段表明下面是數(shù)據(jù)段。語法:.DSEG

3、ESEG——E2PROM段表明下面是E2PROM段。語法:.ESEG說明:一個匯編文件包含若干個代碼段,若干個數(shù)據(jù)段,若干個E2PROM段,在匯編時,它們按類型的不同被分別連接成一個代碼段,一個數(shù)據(jù)段,一個E2PROM段。18二、ORG——設(shè)置程序、數(shù)據(jù)在段中的起始位置

語法:.ORG表達(dá)式;表達(dá)式的值為定位計數(shù)器的值絕對值(無符號數(shù))。注意:程序存儲器定位計數(shù)器--按字計數(shù);而E2PROM和SRAM定位計數(shù)器--按字節(jié)計數(shù)。缺省值:代碼段:0;數(shù)據(jù)段:32;

E2PROM段

:0。如果ORG偽指令放在數(shù)據(jù)段,則設(shè)置SRAM定位計數(shù)器。如果該偽指令放在代碼段,則設(shè)置程序存儲器計數(shù)器。如果該偽指令放在E2PROM段,則設(shè)置E2PROM定位計數(shù)器。

19三、數(shù)據(jù)定義偽指令1.BYTE——在SRAM數(shù)據(jù)區(qū)定義字節(jié)語法:LABEL:.BYTE表達(dá)式(表)2.

DB——在程序存儲器或E2區(qū)中定義字節(jié)常數(shù)

語法:LABEL:.DB表達(dá)式(表)tab:.db$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f;七段碼表

3、

DW——在程序存儲器或E2區(qū)中定義字常數(shù)

語法:LABEL:.DW表達(dá)式(表)說明:多個表達(dá)式之間用“,”分隔,若為負(fù)則用補碼表示。20四、符號定義偽指令1、DEF——設(shè)置寄存器的符號名語法:.DEF符號=寄存器2、EQU——設(shè)置一個符號相等于一個表達(dá)式語法:.EQU標(biāo)號=表達(dá)式;不能重新賦值3、SET——設(shè)置一個與表達(dá)式相等的符號語法:.SET標(biāo)號=表達(dá)式;可重新賦值;I/O寄存器的定義.EQUSREG=$3f.EQUSPH =$3e.EQUSPL =$3d.def XL=r26.def XH=r2721五、定義被匯編的器件DEVICE定義被匯編的器件語法:.DEVICEAT90S8515|AT90S8535等。例如:.deviceAT90S8535六、INCLUDE——包括另外的文件語法:.INCLUDE“文件名”例如.include“8535def.inc”22表達(dá)式一、操作數(shù)

(1)

用戶定義的標(biāo)號,該標(biāo)號給出了放置標(biāo)號位置的定位計數(shù)器的值。(2)

用戶用SET

偽指令定義的變量。(3)

用戶用EQU

偽指令定義的常數(shù)。(4)

PC:程序存儲器定位計數(shù)器的當(dāng)前值。

(5)

整數(shù)常數(shù)包括下列幾種形式:

十進(jìn)制(缺省值):10,255十六進(jìn)制數(shù):0x0a,$0a,0xff,$0ff,$ff二進(jìn)制數(shù):0b00001010,0b11111111匯編語句中常用到表達(dá)式,表達(dá)式由操作數(shù)、運算符及函數(shù)組成。23

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論