AVR單片機(jī)嵌入式系統(tǒng)原理與應(yīng)用-馬潮(著)第03章_第1頁
AVR單片機(jī)嵌入式系統(tǒng)原理與應(yīng)用-馬潮(著)第03章_第2頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第三章 AVR 單片機(jī)指令與匯編系統(tǒng)傳統(tǒng)的 8 位單片機(jī)(如最典型的 8051 結(jié)構(gòu)的單片機(jī))大都采用復(fù)雜指令 CISC(ComplexInstruction Set Computer) 系統(tǒng)體系。由于 CISC 結(jié)構(gòu)存在指令系統(tǒng)不等長,指令數(shù)多,CPU 利用效率低,執(zhí)行速度慢等缺陷,已不能滿足和適應(yīng)設(shè)計(jì)高檔電子產(chǎn)品和嵌入式系統(tǒng)應(yīng)用的需要。作為 8 位的 AVR 單片機(jī)來講,除了其具備比較完善和功能強(qiáng)大的硬件結(jié)構(gòu)和組成外,其更重要的是它的內(nèi)核和指令系統(tǒng)為先進(jìn)的 RISC 體系結(jié)構(gòu),采用了大型快速存取寄存器組(32 個通用工作寄存器)、快速的單周期指令系統(tǒng)以及單級流水線等先進(jìn)技術(shù)。因此,AVR

2、內(nèi)核核指令系統(tǒng)的顯著特點(diǎn)有:1 16/32 位定長指令A(yù)VR 的一個指令字為 16 位或 32 位,其中大部分的指令為 16 位。采用定長指令,不僅使取指操作簡單,提高了取指令的速度;同時(shí)也降低了在取指操作過程中的錯誤,提高了系統(tǒng)的可靠性。2 流水線操作AVR 采用流水線技術(shù),在前一條指令執(zhí)行的時(shí)候,就取出現(xiàn)行的指令,然后以一個周期執(zhí)行指令。大大提高了 CPU 的運(yùn)行速度。3. 大型快速存取寄存器組傳統(tǒng)的基于累加器的結(jié)構(gòu)單片機(jī)(如 8051),需要大量的程序代碼來完成和實(shí)現(xiàn)在累加器和存儲器之間的數(shù)據(jù)傳送。而在 AVR 單片機(jī)中,采用 32 個通用工作寄存器構(gòu)成大型快速存取寄存器組,用 32 個

3、通用工作寄存器代替了累加器(相當(dāng)有 32 個累加器),從而避免了傳統(tǒng)結(jié)構(gòu)中累加器和存儲器之間數(shù)據(jù)傳送造成的瓶頸現(xiàn)象。由于 AVR 單片機(jī)采用 RISC 結(jié)構(gòu),使得它具有高達(dá) 1MIPSMHz 的高速運(yùn)行處理能力。同時(shí)也能更好地適合采用高級語言(例如 C 語言、BASIC 語言)來編寫系統(tǒng)程序,高效地開發(fā)出目標(biāo)代碼,以加快產(chǎn)品進(jìn)入市場的時(shí)間和簡化系統(tǒng)的設(shè)計(jì)、開發(fā)、維護(hù)和支持。3.1 ATmega16 指令綜述指令是 CPU 用于控制各功能部件完成某一指定動作或操作的指示和命令。指令不同,CPU 和各個功能部件完成的動作也不一樣,指令的功能也不同。程序員根據(jù)系統(tǒng)的要求,選用不同功能指令的有序組合就

4、構(gòu)成的程序。CPU執(zhí)行不同的程序,就能完成不同的任務(wù)。CPU 指令的的集合或全體稱為指令系統(tǒng)。指令系統(tǒng)是 CPU 的重要性能指標(biāo),也是學(xué)習(xí)以及使用單片機(jī)的重要內(nèi)容。由于 CPU 結(jié)構(gòu)的不同,每一種 CPU 的指令和功能也不同,因此學(xué)習(xí) AVR,也必須了解它的指令結(jié)構(gòu)、功能和特點(diǎn)。只有在此基礎(chǔ)上,才能更清楚的了解 AVR 的硬件使用,編寫出好的系統(tǒng)程序。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 AVR 單片機(jī)指令系統(tǒng)是 RISC 結(jié)構(gòu)的精簡指令集,是一種簡明、易掌握、效率高的指令系統(tǒng)。ATmega16 單片機(jī)完全兼容 AVR 的指令系統(tǒng),具有高性能的數(shù)據(jù)處理能力,能對位、半字節(jié)、字節(jié)

5、和雙字節(jié)數(shù)據(jù)進(jìn)行各種操作,包括算術(shù)和邏輯運(yùn)算、數(shù)據(jù)傳送、布爾處理、控制轉(zhuǎn)移和硬件乘法等操作。ATmega16 共有 131 條指令,按功能可分為五大類,它們是:算術(shù)和邏輯運(yùn)算指令(28 條);比較和跳轉(zhuǎn)指令(36 條);數(shù)據(jù)傳送指令(35 條);位操作和位測試指令(28 條);MCU 控制指令(4 條)。在附錄 A 中列出了 ATmega16 全部的 131 條指令,包括字節(jié)數(shù)、功能、對標(biāo)志位的影響以及執(zhí)行周期數(shù)等。3.1.1 指令格式以及三種表示方式指令格式是指指令碼的結(jié)構(gòu)形式。通常,指令可分為操作碼和操作數(shù)兩部分。其中操作碼部分比較簡單,操作數(shù)部分則比較復(fù)雜,而且隨 CPU 類型的不同,尋

6、址方式的不同有較大的變化。AVR 的指令的一般格式為:操作碼第 1 操作數(shù)或操作數(shù)地址 第 2 操作數(shù)或操作數(shù)地址其中,操作碼用于指示 CPU 執(zhí)行何種操作,是加法操作還是減法操作,是數(shù)據(jù)傳送還是數(shù)據(jù)移位等。第 1 操作數(shù)或操作數(shù)地址用于表示參與操作的第 1 個操作數(shù),或該操作數(shù)在內(nèi)存的地址,同時(shí)該地址也將作為操作結(jié)果存放的地址。第 2 操作數(shù)或操作數(shù)地址(如果有的話)用于表示參與操作的第 2 個操作數(shù),或該操作數(shù)在內(nèi)存的地址。需要注意的是,在AVR 的指令中,有相當(dāng)一部分只有操作碼,或只有操作碼和第 1 操作數(shù)或操作數(shù)地址,前者在操作碼中隱含了操作數(shù)或操作數(shù)的地址。指令的表示方式是指采用何種

7、形式描述指令,也是人們用于編寫和閱讀程序的基礎(chǔ)。通常指令采用二進(jìn)制、十六進(jìn)制和助記符三種表示方式。指令的二進(jìn)制表示形式是一種可以直接為 CPU 識別和執(zhí)行的形式,故稱為指令的機(jī)器碼或匯編語言的目標(biāo)代碼,下載到 AVR 中的代碼必須是可執(zhí)行的目標(biāo)代碼。但二進(jìn)制形式的代碼具有難讀、難寫、難記憶和難修改等缺點(diǎn),因此人們通常不用它來編寫程序。指令的十六進(jìn)制形式是二進(jìn)制形式的變型,只是將二進(jìn)制代碼 4 位一組用十六進(jìn)制的形式描述。十六進(jìn)制的形式雖然比二進(jìn)制形式讀寫方便些,但還是不易被人們識別和修改,所以通常也不被用于編寫程序,只是在某些場合,如調(diào)試程序、修改調(diào)整個別指令代碼時(shí)作為輸入程序的輔助手段。指令

8、的助記符形式又稱為指令的匯編形式或匯編語句,是一種用英文單詞或縮寫字母以及數(shù)字來表征指令功能的形式。這種形式不僅容易為人們識別和讀寫,也方便記憶和交流,因此也是人們用于進(jìn)行程序設(shè)計(jì)的一種常用的形式。在附錄 A 中列出了 ATmega16 全部的指令,就是采用指令的助記符形式描述的。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 由于 CPU 可以直接識別和執(zhí)行的指令形式必須是二進(jìn)制表示形式的,因此不管使用十六進(jìn)制的形式還是匯編形式構(gòu)成的程序,都需要通過人工或機(jī)器把它們翻譯成二進(jìn)制機(jī)器碼的形式,才能下載到芯片中被 CPU 執(zhí)行?,F(xiàn)在決大多數(shù)單片機(jī)都提供相應(yīng)的,能夠在 PC 上工作的的開發(fā)平

9、臺,其最基本的功能就是提供用戶編寫匯編代碼的源程序,并能將匯編源程序翻譯成二進(jìn)制的機(jī)器碼,生成可下載的目標(biāo)代碼文件。3.1.2 AVR 指令系統(tǒng)中使用的符號ATmega16 指令系統(tǒng)中所有的 131 條指令如附錄 A 所列,給出了全部指令的匯編助記符、操作數(shù)、操作說明、相應(yīng)的操作、操作數(shù)的范圍、對標(biāo)志位的影響、以及指令的執(zhí)行周期。在指令表中,除了操作碼采用了助記符表示外,還在指令的操作數(shù)的描述說明中采用了一些符號代碼,下面對所使用符號的意義進(jìn)行簡單的說明。1狀態(tài)寄存器與標(biāo)志位SREG: 8 位狀態(tài)寄存器,其中每一位的定義為:C:Z:N:V:S:H:T:I:進(jìn)位標(biāo)志位結(jié)果為零標(biāo)志位結(jié)果為負(fù)數(shù)標(biāo)志

10、位2 的補(bǔ)碼溢出標(biāo)志位NV,用于符號測試的標(biāo)志位操作中產(chǎn)生半進(jìn)位的標(biāo)志位用于和 BLD、BST 指令進(jìn)行位數(shù)據(jù)交換的位全局中斷觸發(fā)/禁止標(biāo)志位2寄存器和操作碼Rd:Rr:A:b:s:K:k:q:目的(或源)寄存器,取值為 R0R31 或 R16R31(取決于指令)。源寄存器,取值為 R0R31。I/O 寄存器,取值為 063 或 031(取決于指令)。I/O 寄存器中的指定位,常數(shù)(07)。狀態(tài)寄存器 SREG 中的指定位,常數(shù)(07)。立即數(shù),常數(shù)(0255)。地址常數(shù),取值范圍取決于指令。地址偏移量常數(shù)(063)。X、Y、Z:地址指針寄存器(X=R27:R26;Y=R29:R28;Z=R3

11、1:R30)。3堆棧STACK: 作為返回地址和壓棧寄存器的堆棧SP: 堆棧 STACK 的指針3.1.3 AVR 指令的尋址方式和尋址空間指令的一個重要組成部分是操作數(shù)。指令給出參與運(yùn)算數(shù)據(jù)的方式稱為尋址方式。CPU華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 執(zhí)行指令時(shí),首先要根據(jù)地址獲取參加操作的操作數(shù),然后才能對操作數(shù)進(jìn)行操作,操作的結(jié)果還要根據(jù)地址保存在相應(yīng)的儲存器或寄存器中。因此 CPU 執(zhí)行程序?qū)嶋H上是不斷的尋找操作數(shù)并進(jìn)行操作的過程。通常,指令的尋址方式有多種,尋址方式越多,指令的功能也就越強(qiáng)。AVR 單片機(jī)指令操作數(shù)的尋址方式有以下幾種:單寄存器直接尋址、雙寄存器直接

12、尋址、I/O 寄存器直接尋址、數(shù)據(jù)存儲器直接尋址、數(shù)據(jù)存儲器間接尋址、帶后增量的數(shù)據(jù)存儲器間接尋址、帶預(yù)減量的數(shù)據(jù)存儲器間接尋址、帶位移的數(shù)據(jù)存儲器間接尋址、程序存儲器取常量尋址、程序存儲器空間直接尋址、程序存儲器空間間接尋址、程序相對尋址等。1 單寄存器直接尋址(圖 3-1)由指令指定一個寄存器的內(nèi)容作為操作數(shù),在指令中給出寄存器的直接地址,這種尋址方式稱為單寄存器直接尋址。單寄存器尋址的地址范圍限制為通用工作寄存器組中的32個寄存器 R0R31,或后 16 個寄存器 R16R31(取決于不同指令)。例:INC Rd;操作:RdRd+1。INC R5;將寄存器 R5 內(nèi)容加 1 回放。圖 3

13、-1 單寄存器直接尋址2 雙寄存器直接尋址(圖 3-2)圖 3-2 雙寄存器直接尋址華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 雙寄存器直接尋址方式與單寄存器直接尋址方式相似,它是將指令指出的兩個寄存器Rd 和 Rr 的內(nèi)容作為操作數(shù),而結(jié)果存放在 Rd 寄存器中。指令中同時(shí)給出兩個寄存器的直接地址,這種尋址方式稱為雙寄存器直接尋址。雙寄存器尋址的地址范圍限制為通用工作寄存器組中的 32 個寄存器 R0R31,或后 16 個寄存器 R16R31,或后 8 個寄存器 R16R23(取決于不同指令)。例:ADD Rd,Rr;操作:RdRd+Rr。ADD R0,R1;將 R0 和 R1 寄

14、存器內(nèi)容相加,結(jié)果回放 R0。3I/O 寄存器直接尋址(圖 3-3)由指令指定一個 I/O 寄存器的內(nèi)容作為操作數(shù)。在指令中直接給出 I/O 寄存器的地址,這種尋址方式稱為 I/O 寄存器直接尋址。I/O 寄存器直接尋址的地址使用 I/O 寄存器空間的地址$00$3F,共 64 個,取值為 063 或 031(取決于指令)。例:IN Rd,P;操作:RdP。IN R5,$3E;讀 I/O 空間地址為$3E 寄存器(SPH)的內(nèi)容,放入寄存器 R5。圖 3-3 I/O 寄存器直接尋址4數(shù)據(jù)存儲器空間直接尋址(圖 3-4)數(shù)據(jù)存儲器空間直接尋址方式用于直接 CPU 從 SRAM 存儲器中存取數(shù)據(jù)。

15、數(shù)據(jù)存儲器空間直接尋址為雙字節(jié)指令,在指令的低字節(jié)中指出一個 16 位的 SRAM 地址。例:LDS Rd,K;操作:Rd(K)。LDS R18,$100;讀地址為$100 的 SRAM 中內(nèi)容,傳送到 R18 中。指令中 16 位 SRAM 的地址字長度限定了 SRAM 的地址空間為 64K 字節(jié),該地址空間實(shí)際包含了 32 個通用寄存器和 64 個 I/O 寄存器。因此,也可使用數(shù)據(jù)存儲器空間直接尋址的方式讀取通用寄存器或 I/O 寄存器中的內(nèi)容,此時(shí)應(yīng)使用這些寄存器在 SRAM 空間的映射地址,而且其效率也比使用寄存器直接尋址的方式要低。原因在于數(shù)據(jù)存儲器空間直接尋址的指令為雙字節(jié)指令,

16、指令周期為 2 個系統(tǒng)時(shí)鐘。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 圖 3-4 數(shù)據(jù)存儲器空間直接尋址5數(shù)據(jù)存儲器空間的寄存器間接尋址(圖 3-5)由指令指定某一個 16 位寄存器的內(nèi)容作為操作數(shù)在 SRAM 中的地址,該尋址方式稱為數(shù)據(jù)存儲器空間的寄存器間接尋址。AVR 單片機(jī)中使用 16 位寄存器 X、Y 或 Z 作為規(guī)定的地址指針寄存器,因此操作數(shù)的 SRAM 地址在間址寄存器 X、Y 或 Z 中。例:LD Rd,Y;操作:Rd (Y),把以 Y 為指針的 SRAM 的內(nèi)容送 Rd。LD R16,Y;設(shè) Y=$0567,即把 SRAM 地址為$0567 的內(nèi)容傳送到 R16

17、 中。圖 3-5 數(shù)據(jù)存儲器空間的寄存器間接尋址6帶后增量的數(shù)據(jù)存儲器空間的寄存器間接尋址(圖 3-6)這種尋址方式類似于數(shù)據(jù)存儲器空間的寄存器間接尋址方式,間址寄存器 X、Y、Z 中的內(nèi)容仍為操作數(shù)在 SRAM 空間的地址,但指令在間接尋址操作后,再自動把間址寄存器中的內(nèi)容加 1。這種尋址方式特別適用于訪問矩陣、查表等應(yīng)用。例:LD Rd,Y+;操作:Rd(Y),Y=Y+1,先把以 Y 為指針的 SRAM 的內(nèi)容送 Rd,再把Y增1。LD R16,Y+;設(shè)原 Y=$0567,指令把 SRAM 地址為$0567 的內(nèi)容傳送到 R16 中,再將 Y 的值加 1,操作完成后 Y=$0568。華東師

18、范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 圖 3-6 帶后增量的數(shù)據(jù)存儲器空間的寄存器間接尋址7帶預(yù)減量的數(shù)據(jù)存儲器空間寄存器間接尋址(圖 3-7)這種尋址方式類似于數(shù)據(jù)存儲器空間的寄存器間接尋址方式,間址寄存器 X、Y、Z 中的內(nèi)容仍為操作數(shù)在 SRAM 空間的地址,但指令在間接尋址操作之前,先自動將間址寄存器中的內(nèi)容減 1,然后把減 1 后的內(nèi)容作為操作數(shù)在 SRAM 空間的地址。這種尋址方式也特別適用于訪問矩陣、查表等應(yīng)用。例:LD Rd,-Y;操作:Y=Y-1,Rd(Y),先把 Y 減 1,再把以 Y 為指針的 SRAM 的內(nèi)容送 Rd。LD R16,-Y;設(shè)原 Y=$0567,

19、指令即先把 Y 減 1,Y=$0566,再把 SRAM 地址為$0566的內(nèi)容傳送到 R16 中。圖 3-7 帶預(yù)減量的數(shù)據(jù)存儲器空間寄存器間接尋址8帶位移的數(shù)據(jù)存儲器空間寄存器間接尋址(圖 3-8)帶位移的數(shù)據(jù)存儲器空間寄存器間接尋址方式是:由間址寄存器(Y 或 Z)中的內(nèi)容和指令字中給出的地址偏移量共同決定操作數(shù)在 SRAM 空間的地址,偏移量的范圍為 063。例:LDD Rd,Y+q;操作:Rd(Y+q),其中 0q63,即把以 Y+q 為地址的 SRAM 的內(nèi)容送 Rd,而 Y 寄存器的內(nèi)容不變。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 LDD R16,Y+31;設(shè) Y=$

20、0567,把 SRAM 地址為$0598 的內(nèi)容傳送到 R16 中,Y 寄存器的內(nèi)容不變。圖 3-8 帶位移的數(shù)據(jù)存儲器空間寄存器間接尋址9程序存儲器空間取常量尋址(圖 3-9)程序存儲器空間取常量尋址主要從程序存儲器 Flash 中讀取常量,此種尋址方式只用于指令 LPM。程序存儲器中常量字節(jié)的地址由地址寄存器 Z 的內(nèi)容確定。Z 寄存器的高 15位用于選擇字地址(程序存儲器的存儲單元為字),而 Z 寄存器的最低位 Z(d0)用于確定字地址的高/低字節(jié)。若 d0=0,則選擇字的低字節(jié);d0=1,則選擇字的高字節(jié)。例:LPM;操作:R0 (Z),即把以 Z 為指針的程序存儲器的內(nèi)容送 R0。若

21、 Z=$0100,即把地址為$0080 的程序存儲器的低字節(jié)內(nèi)容送 R0。若 Z=$0101,即把地址為$0080 的程序存儲器的高字節(jié)內(nèi)容送 R0。例:LPM R16,Z;操作:R16(Z),即把以 Z 為指針的程序存儲器的內(nèi)容送 R16。若 Z=$0100,即把地址為$0080 的程序存儲器的低字節(jié)內(nèi)容送 R16。若 Z=$0101,即把地址為$0080 的程序存儲器的高字節(jié)內(nèi)容送 R16。圖 3-9 程序存儲器空間取常量尋址10帶后增量的程序存儲器空間取常量尋址(圖 3-10)帶后增量的程序存儲器空間取常量尋址主要從程序存儲器 Flash 中取常量,此種尋址方式只用于指令 LPM Rd,

22、Z+。程序存儲器中常量字節(jié)的地址由地址寄存器 Z 的內(nèi)容確定。Z 寄存器的高 15 位用于選擇字地址(程序存儲器的存儲單元為字),而 Z 寄存器的最低位 Z華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 (d0)用于確定字地址的高/低字節(jié)。若 d0=0,則選擇字的低字節(jié);d0=1,則選擇字的高字節(jié)。尋址操作后,Z 寄存器的內(nèi)容加 1。圖 3-10 帶后增量的程序存儲器空間取常量尋址例:LPM R16,Z+;操作:R16(Z);ZZ+1,即把以 Z 為指針的程序存儲器的內(nèi)容送 R16,然后 Z 的內(nèi)容加 1。若 Z=$0100,即把地址為$0080 的程序存儲器的低字節(jié)內(nèi)容送 R16,完成

23、后 Z=$0101。若 Z=$0101,即把地址為$0080 的程序存儲器的高字節(jié)內(nèi)容送 R16,完成后 Z=$0102。11程序存儲器空間寫數(shù)據(jù)尋址(圖 3-9)程序存儲器空間寫數(shù)據(jù)尋址主要用于可進(jìn)行在系統(tǒng)自編程的 AVR 單片機(jī),此種尋址方式只用于指令 SPM。該指令將寄存器 R1 和 R0 中的內(nèi)容組成一個字 R1:R0,然后寫入由 Z 寄存器的內(nèi)容作為地址(Z 寄存器的最低位必須為 0)的程序存儲器單元中。(注意:實(shí)際是寫入到 Flash 的頁緩沖區(qū)中)。例:SPM;操作:(Z)R1:R0,把 R1:R0 內(nèi)容寫入以 Z 為指針的程序存儲器單元。12程序存儲器空間直接尋址(圖 3-11

24、)程序存儲器空間直接尋址方式用于程序的無條件跳轉(zhuǎn)指令 JMP、CALL。指令中含有一個 16 位的操作數(shù),指令將操作數(shù)存入程序計(jì)數(shù)器 PC 中,作為下一條要執(zhí)行指令在程序存儲器空間的地址。JMP 類指令和 CALL 類指令的尋址方式相同,但 CALL 類的指令還包括了返回地址的壓進(jìn)堆棧和堆棧指針寄存器 SP 內(nèi)容減 2 的操作。圖 3-11 程序存儲器空間直接尋址華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 例:JMP $0100;操作:PC$0100。程序計(jì)數(shù)器 PC 的值設(shè)置為$0100,接下來執(zhí)行程序存儲器$0100 單元的指令代碼。例:CALL $0100;操作:STACKPC

25、+2;SPSP-2;PC$0100。先將程序計(jì)數(shù)器 PC 的當(dāng)前值加 2 后壓進(jìn)堆棧(CALL 指令為 2 個字長),堆棧指針計(jì)數(shù)器SP 內(nèi)容減 2,然后PC 的值為$0100,接下來執(zhí)行程序存儲器$0100 單元的指令代碼。13程序存儲器空間 Z 寄存器間接尋址(圖 3-12)程序存儲器空間間接尋址方式是使用 Z 寄存器存放下一步要執(zhí)行指令代碼程序地址,程序轉(zhuǎn)到 Z 寄存器內(nèi)容所指定程序存儲器的地址處繼續(xù)執(zhí)行,即用寄存器 Z 的內(nèi)容代替 PC的值。此尋址方式用于 IJMP、ICALL 指令。例:IJMP;操作:PCZ,即把 Z 的內(nèi)容送程序計(jì)數(shù)器 PC。若 Z=$0100,即把$0100 送

26、程序計(jì)數(shù)器 PC,接下來執(zhí)行程序存儲器$0100 單元的指令代碼。例:ICALL;操作:STACKPC+1;SPSP-2;PCZ。若Z=$0100,先將程序計(jì)數(shù)器PC的當(dāng)前值加 1 后壓進(jìn)堆棧,堆棧指針計(jì)數(shù)器 SP 內(nèi)容減 2,然后 PC 的值為$0100,接下來執(zhí)行程序存儲器$0100 單元的指令代碼。圖 3-12 程序存儲器空間 Z 寄存器間接尋址14程序存儲器空間相對尋址(圖 3-13)在程序存儲器空間相對尋址方式中,在指令中包含一個相對偏移量 k,指令執(zhí)行時(shí),首先將當(dāng)前程序計(jì)數(shù)器 PC 值加 1 后再與偏移量 k 相加,作為程序下一條要執(zhí)行指令的地址。此尋址方式用于 RJMP、RCAL

27、L 指令。圖 3-13 程序存儲器空間相對尋址華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 例:RJMP $0100;操作:PCPC+1+$0100。若當(dāng)前指令地址為$0200(PC=$0200),即把$0301 送程序計(jì)數(shù)器 PC,接下來執(zhí)行程序存儲器$0301 單元的指令代碼。例:RCALL $0100;操作:STACKPC+1;SPSP-2;PCPC+1+$0100。若當(dāng)前指令地址為$0200(PC=$0200),先將程序計(jì)數(shù)器 PC 的當(dāng)前值加 1 后壓進(jìn)堆棧,堆棧指針計(jì)數(shù)器SP 內(nèi)容減 2,然后 PC 的值為$0301,接下來執(zhí)行程序存儲器$0301 單元的指令代碼。15數(shù)據(jù)

28、存儲器空間堆棧寄存器 SP 間接尋址(圖 3-14)數(shù)據(jù)存儲器空間堆棧寄存器 SP 間接尋址,是將 16 位的堆棧寄存器 SP 的內(nèi)容作為操作數(shù)在 SRAM 空間的地址,此尋址方式用于 PUSH、POP 指令。例:PUSH R0;操作:STACKR0;SPSP-1。若當(dāng)前 SP=$10FF,先把寄存器 R0 的內(nèi)容送到 SRAM 的$10FF 單元,再將 SP 內(nèi)容減 1,即 SP=$10FE。例:POP R1;操作:SPSP+1;R1STACK。若當(dāng)前 SP=$10FE,先將 SP 內(nèi)容加 1,再把 SRAM 的$10FF 單元內(nèi)容送到寄存器 R1,此時(shí) SP=$10FF。此外,在 CPU

29、響應(yīng)中斷和執(zhí)行 CALL 一類的子程序調(diào)用指令(SP = SP-2),以及執(zhí)行中斷返回 IRET 和子程序返回 RET 一類的子程序返回指令中(SP = SP+2),都隱含著使用堆棧寄存器 SP 間接尋址的方式。圖 3-14 數(shù)據(jù)存儲器空間堆棧寄存器 SP 間接尋址3.1.4 AVR 指令操作結(jié)果對標(biāo)志位的影響在AVR的指令中,一類指令執(zhí)行后要影響到狀態(tài)寄存器中某些標(biāo)志位的狀態(tài),即不論指令執(zhí)行前標(biāo)志位狀態(tài)如何,指令執(zhí)行后總是根據(jù)執(zhí)行結(jié)果的定義形成新的狀態(tài)標(biāo)志。另一類指令在執(zhí)行后不會影響標(biāo)志位,標(biāo)志位原來什么狀態(tài),指令執(zhí)行后標(biāo)志狀態(tài)還是保持不變。由于AVR的CPU響應(yīng)中斷時(shí),硬件不保護(hù)狀態(tài)寄存器

30、,所以在編寫中斷服務(wù)處理程序時(shí),應(yīng)注意將狀態(tài)寄存器進(jìn)行保護(hù)(如用PUSH指令壓入到堆棧),在中斷返回前還要恢復(fù)狀態(tài)寄存器在進(jìn)入中斷前時(shí)的標(biāo)志狀態(tài)(如用POP指令從堆棧中彈出)。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 3.2 算術(shù)和邏輯指令A(yù)VR 的算術(shù)運(yùn)算指令有加、減、乘法、取反、取補(bǔ)、比較指令、增量和減量指令。邏輯運(yùn)算指令有與、或和異或指令等。3.2.1 加法指令1不帶進(jìn)位位加法ADD Rd,Rr說明:兩個寄存器不帶進(jìn)位 C 標(biāo)志相加,結(jié)果送目的寄存器 Rd。操作:RdRd+Rr PCPC+1 機(jī)器碼:0000 11rd dddd rrrr0d31,0r31對標(biāo)志位的影響:H

31、S V N Z C2帶進(jìn)位位加法ADC Rd,Rr說明:兩個寄存器和 C 標(biāo)志的內(nèi)容相加,結(jié)果送目的寄存器 Rd。操作:RdRd+Rr+C PCPC+1 機(jī)器碼:0001 11rd dddd rrrr0d31,0r31對標(biāo)志位的影響:H S V N Z C3字加立即數(shù)ADIW Rdl,Kdl 為:24、26、28、30,0K63說明:寄存器對(一個字)同立即數(shù)(063)相加,結(jié)果放到寄存器對。操作:Rdh:RdlRdh:Rdl+K對標(biāo)志位的影響:S V N Z CPCPC+1機(jī)器碼:1001 0110 KKdd KKKK注意:dl 只能取 24、26、28、30,即僅用于最后 4 個寄存器對。

32、K 為 6 位二進(jìn)制無符號數(shù)(063)。4增 1 指令I(lǐng)NC Rd0d31說明:寄存器 Rd 的內(nèi)容加 1,結(jié)果送目的寄存器 Rd 中。該操作不改變 SREG 中的 C 標(biāo)志,所以 INC 指令允許在多倍字長計(jì)算中用作循環(huán)計(jì)數(shù)。當(dāng)對無符號數(shù)操作時(shí),僅有 BREQ(相等跳轉(zhuǎn))和 BRNE(不為零跳轉(zhuǎn))指令有效。當(dāng)對二進(jìn)制補(bǔ)碼值操作時(shí),所有的帶符號跳轉(zhuǎn)指令都有效。操作:RdRd+1PCPC+1機(jī)器碼:1001 010d dddd 0011對標(biāo)志位的影響:S V N Z3.2.2 減法指令1不帶進(jìn)位位減法SUB Rd,Rr0d31,0r31說明:兩個寄存器相減結(jié)果送目的寄存器 Rd 中。操作:RdR

33、d-RrPCPC+1機(jī)器碼:0001 10rd dddd rrrr華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 對標(biāo)志位的影響:H S V N Z C2減立即數(shù)(字節(jié))SUBI Rd,K16d31,0K255說明:一個寄存器和常數(shù)相減,結(jié)果送目的寄存器 Rd。該指令工作于寄存器 R16R31之間,非常適合 X、Y 和 Z 指針的操作。操作:RdRd-KPCPC+1機(jī)器碼:0101 KKKK dddd KKKK對標(biāo)志位的影響:H S V N Z C3帶進(jìn)位位減法SBC Rd,Rr說明:兩個寄存器帶著 C 標(biāo)志相減,結(jié)果放到目的寄存器 Rd 中。操作:RdRd-Rr-C PCPC+1 機(jī)器

34、碼:0000 10rd dddd rrrr0d31,0r31對標(biāo)志位的影響:H S V N Z C4帶進(jìn)位位減立即數(shù)(字節(jié))SBCI Rd,K說明:寄存器和立即數(shù)帶著 C 標(biāo)志相減,結(jié)果放到目的寄存器 Rd 中。操作:RdRd-K-C PCPC+1 機(jī)器碼:0100 KKKK dddd KKKK16d31,0K255對標(biāo)志位的影響:H S V N Z C5減立即數(shù)(字)SBIW Rdl,K說明:寄存器對(字)與立即數(shù) 063 相減,結(jié)果放入寄存器對。操作:Rdh:RdlRdh:Rdl-K PCPC+1 機(jī)器碼:1001 0111 KKdd KKKK注意:dl 只能取 24、26、28、30,即

35、僅用于最后 4 個寄存器對。K 為 6 位二進(jìn)制無符號數(shù)(063)。dl 為 24、26、28、30,0K63對標(biāo)志位的影響:S V N Z C6減 1 指令DEC Rd0d31說明:寄存器 Rd 的內(nèi)容減 1,結(jié)果送目的寄存器 Rd 中。該操作不改變 SREG 中的 C 標(biāo)志,所以 DEC 指令允許在多倍字長計(jì)算中用作循環(huán)計(jì)數(shù)。當(dāng)對無符號值操作時(shí),僅有BREQ(不相等跳轉(zhuǎn))和 BRNE(不為零跳轉(zhuǎn))指令有效。當(dāng)對二進(jìn)制補(bǔ)碼值操作時(shí),所有的帶符號跳轉(zhuǎn)指令都有效。操作:RdRd-l PCPC+1對標(biāo)志位的影響:S V N Z機(jī)器碼:1001 010d dddd 10103.2.3 取反碼指令CO

36、M Rd說明:該指令完成對寄存器 Rd 的二進(jìn)制反碼操作。操作:Rd$FF-Rd PCPC+1 機(jī)器碼:1001 010d dddd 0000對標(biāo)志位的影響:S N Z V(0) C(1)0d31華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 3.2.4 取補(bǔ)碼指令NEG Rd說明:寄存器 Rd 的內(nèi)容轉(zhuǎn)換成二進(jìn)制補(bǔ)碼值。操作:Rd$00-Rd PCPC+1 機(jī)器碼:1001 010d dddd 00010d31對標(biāo)志位的影響:H S V N Z C3.2.5 比較指令1寄存器比較CP Rd,Rr0d31,0r31說明:該指令完成兩個寄存器 Rd 和 Rr 相比較操作,而寄存器的內(nèi)容不改

37、變,該指令后能使用所有條件跳轉(zhuǎn)指令。操作:Rd-RrPCPC+1機(jī)器碼:0001 01rd dddd rrrr對標(biāo)志位的影響:H S V N Z C2帶進(jìn)位比較CPC Rd,Rr 0d31, 0r31說明:該指令完成寄存器 Rd 的值和寄存器 Rr 加 C 相比較操作,而寄存器的內(nèi)容不改變,該指令后能使用所有條件跳轉(zhuǎn)指令。操作:Rd-Rr-CPCPC+1機(jī)器碼:0000 01rd dddd rrrr對標(biāo)志位的影響:H S V N Z C3與立即數(shù)(字節(jié))比較CPI Rd,K16d31,0K255說明:該指令完成寄存器 Rd 和常數(shù)的比較操作,寄存器的內(nèi)容不改變,該指令后能使用所有條件跳轉(zhuǎn)指令。

38、操作:Rd-KPCPC+1機(jī)器碼:0011 KKKK dddd KKKK對標(biāo)志位的影響:H S V N Z C3.2.6 邏輯與指令1寄存器邏輯與AND Rd,Rr0d31,0d31說明:寄存器 Rd 和寄存器 Rr 的內(nèi)容邏輯與,結(jié)果送目的寄存器 Rd。應(yīng)用:清 0 某位,用 0 去同該位邏輯與;保留某位值,用1 去邏輯與;代替硬件與門。操作 RdRdRrPCPC+1機(jī)器碼:0010 00rd dddd rrrr對標(biāo)志位的影響:S V(0) N Z2與立即數(shù)(字節(jié))ANDI Rd,K16d31,0K255說明:寄存器 Rd 的內(nèi)容與常數(shù)邏輯與,結(jié)果送目的寄存器 Rd。應(yīng)用:清 0 某位時(shí),用

39、 0 去同該位邏輯與;保留某位的值,用 1 去邏輯與;代替硬件華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 與門。操作:RdRdKPCPC+1機(jī)器碼:0111 KKKK dddd KKKK對標(biāo)志位的影響:S V(0) N Z3寄存器位清零CBR Rd,K16d31,0K255說明:清除寄存器 Rd 中的指定位,利用寄存器 Rd 的內(nèi)容與常數(shù)表征碼 K 的補(bǔ)碼相與,其結(jié)果放在寄存器 Rd 中。操作:RdRd($FF-K) PCPC+1的補(bǔ)碼)機(jī)器碼:0111 KKKK dddd KKKK(KKKK為KKKK對標(biāo)志位的影響:S V(0) N Z4測試寄存器為零或負(fù)TST Rd說明:測試寄存

40、器為零或負(fù),實(shí)現(xiàn)寄存器內(nèi)容自己同自己的邏輯與操作,而寄存器內(nèi)容不改變。操作:RdRdRd對標(biāo)志位的影響:S V(0) N Z0d31PCPC+1機(jī)器碼:0010 00dd dddd dddd3.2.7 邏輯或指令1寄存器邏輯或OR Rd,Rr0d31, 0r31應(yīng)用:置數(shù),使某位為 1,用 1 去或;保留,用 0 去邏輯或;代替硬件或門。說明:完成寄存器 Rd 與寄存器 Rr 的內(nèi)容邏輯或操作,結(jié)果送目的寄存器 Rd 中。操作:RdRdRrPCPC+1機(jī)器碼:0010 10rd dddd rrrr對標(biāo)志位的影響:S V(0) N Z2或立即數(shù)(字節(jié))ORI Rd,K說明:完成寄存器 Rd 的內(nèi)

41、容與常量 K 邏輯或操作,結(jié)果送目的寄存器 Rd 中。操作:RdRdK PCPC+1 機(jī)器碼:0110 KKKK dddd KKKK16d31, 0K255對標(biāo)志位的影響:S V(0) N Z3置寄存器位SBR Rd,K16d31, 0K255說明:用于對寄存器 Rd 中指定位置位。完成寄存器 Rd 和常數(shù)表征碼 K 之間的邏輯或操作,結(jié)果送目的寄存器 Rd。操作:RdRdKPCPC+1機(jī)器碼:0110 KKKK dddd KKKK對標(biāo)志位的影響:S V(0) N Z4置寄存器為$FFSER Rd16d31說明:直接裝入$FF 到寄存器 Rd。操作:Rd$FFPCPC+1機(jī)器碼:1110 11

42、11 dddd 1111對標(biāo)志位的影響:無華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 3.2.8 邏輯異或指令1寄存器異或EOR Rd,Rr0d31, 0r31說明:完成寄存器 Rd 和寄存器 Rr 的內(nèi)容邏輯異或操作,結(jié)果送目的寄存器 Rd。操作:RdRdRrPCPC+1機(jī)器碼:0010 01rd dddd rrrr對標(biāo)志位的影響:S V(0) N Z2寄存器清零CLR Rd說明:寄存器清零。該指令采用寄存器 Rd 與自己的內(nèi)容相異或?qū)崿F(xiàn)的寄存器的所有位都被清零。操作:RdRdRd0d31PCPC+1機(jī)器碼:0010 01dd dddd dddd對標(biāo)志位的影響:S(0) V(0)

43、N(0) Z(1)3.2.9 乘法指令1無符號數(shù)乘法MUL Rd,Rr0d31, 0r31說明:該指令完成將寄存器 Rd 和寄存器 Rr 的內(nèi)容作為兩個無符號 8 位數(shù)的乘法操作,結(jié)果為 16 位的無符號數(shù),保存在 R1:R0 中,R1 為高 8 位,R0 為低 8 位。如果操作數(shù)為寄存器 R1 或 R0,則結(jié)果會將原操作數(shù)覆蓋。操作:R1:R0=RdRr對標(biāo)志位的影響:Z C2有符號數(shù)乘法PCPC+1機(jī)器碼:1001 11rd dddd rrrrMULS Rd,Rr16d31, 16r31說明:該指令完成將寄存器 Rd 和寄存器 Rr 的內(nèi)容作為兩個 8 位有符號數(shù)的乘法操作,結(jié)果為 16

44、位的有符號數(shù),保存在 R1:R0 中,R1 為高 8 位,R0 為低 8 位。源操作數(shù)為寄存器 R16R31。操作:R1:R0=RdRr對標(biāo)志位的影響:Z CPCPC+1機(jī)器碼:0000 0010 dddd rrrr3有符號數(shù)與無符號數(shù)乘法MULSU Rd,Rr 16d23, 16r23說明:該指令完成將寄存器 Rd(8 位,有符號數(shù))和寄存器 Rr(8 位,無符號數(shù))的內(nèi)容相乘操作,結(jié)果為 16 位的有符號數(shù),保存在 R1:R0 中,R1 為高 8 位,R0 為低 8 位。源操作數(shù)為寄存器 R16R23。操作:R1:R0=RdRr對標(biāo)志位的影響:Z C4無符號定點(diǎn)小數(shù)乘法PCPC+1機(jī)器碼:

45、0000 0011 0ddd 0rrrFMUL Rd,Rr16d23, 16r23說明:該指令完成將寄存器 Rd(8 位無符號數(shù))和寄存器 Rr(8 位無符號數(shù))的內(nèi)容相乘操作,結(jié)果為 16 位的無符號數(shù),并將結(jié)果左移一位后保存在 R1:R0 中,R1 為高 8 位,華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 R0 為低 8 位。源操作數(shù)為寄存器 R16R23。操作:R1:R0=RdRr (unsigned(1.15)=unsigened(1.7)unsigened(1.7)PCPC+1機(jī)器碼:0000 0011 0ddd 1rrr對標(biāo)志位的影響:Z C注:(n.q)表示一個小數(shù)點(diǎn)左

46、邊有 n 個二進(jìn)制數(shù)位、小數(shù)點(diǎn)右邊有 q 個二進(jìn)制數(shù)位的小數(shù)。以(n1.q1)和(n2.q2)為格式的兩個小數(shù)相乘,產(chǎn)生格式為(n1+n2).(q1+q2)的結(jié)果。對于要有效保留小數(shù)位的處理應(yīng)用,輸入的數(shù)據(jù)通常采用(1.7)的格式,產(chǎn)生的結(jié)果為(2.14)格式。因此將結(jié)果左移一位,以使高字節(jié)的格式與輸入的相一致。FMUL指令的執(zhí)行周期與 MUL 指令相同,但比 MUL 指令增加了左移操作。被乘數(shù) Rd 和乘數(shù) Rr 是兩個包含無符號定點(diǎn)小數(shù)的寄存器,小數(shù)點(diǎn)固定在第 7 位和第6 位之間。結(jié)果為 16 位無符號定點(diǎn)小數(shù),其小數(shù)點(diǎn)固定在第 15 位和第 14 位之間。5有符號定點(diǎn)小數(shù)乘法FMULS

47、 Rd,Rr16d23, 16r23說明:該指令完成寄存器 Rd(8 位帶符號數(shù))和寄存器 Rr(8 位帶符號數(shù))的內(nèi)容相乘操作,結(jié)果為 16 位的帶符號數(shù),并將結(jié)果左移一位后保存在 R1:R0 中,R1 為高 8 位,R0 為低 8 位。源操作數(shù)為寄存器 R16R23。操作:R1:R0=RdRr (signed(1.15)=sigened(1.7)sigened(1.7)PCPC+1機(jī)器碼:0000 0011 1ddd 0rrr對標(biāo)志位的影響:Z C注:(n.q)表示一個小數(shù)點(diǎn)左邊有 n 個二進(jìn)制數(shù)位、小數(shù)點(diǎn)右邊有 q 個二進(jìn)制數(shù)位的小數(shù)。以(n1.q1)和(n2.q2)為格式的兩個小數(shù)相乘

48、,產(chǎn)生格式為(n1+n2).(q1+q2)的結(jié)果。對于要有效保留小數(shù)位的處理應(yīng)用,輸入的數(shù)據(jù)通常采用(1.7)的格式,產(chǎn)生的結(jié)果為(2.14)格式。因此將結(jié)果左移一位,以使高字節(jié)的格式與輸入的相一致。FMULS 指令的執(zhí)行周期與 MULS 指令相同,但比 MULS 指令增加了左移操作。被乘數(shù) Rd 和乘數(shù) Rr 是兩個包含帶符號定點(diǎn)小數(shù)的寄存器,小數(shù)點(diǎn)固定在第 7 位和第6 位之間。結(jié)果為 16 位帶符號的定點(diǎn)小數(shù),其小數(shù)點(diǎn)固定在第 15 位和第 14 位之間。6有符號定點(diǎn)小數(shù)和無符號定點(diǎn)小數(shù)乘法FMULSU Rd,Rr16d23, 16r23說明:該指令完成寄存器 Rd(8 位帶符號數(shù))和寄

49、存器 Rr(8 位無符號數(shù))的內(nèi)容相乘操作,結(jié)果為 16 位的帶符號數(shù),并將結(jié)果左移一位后保存在 R1:R0 中,R1 為高 8 位,R0 為低 8 位。源操作數(shù)為寄存器 R16R23。操作:R1:R0=RdRr (signed(1.15)=sigened(1.7)unsigened(1.7)PCPC+1機(jī)器碼:0000 0011 1ddd 1rrr對標(biāo)志位的影響:Z C注:(n.q)表示一個小數(shù)點(diǎn)左邊有 n 個二進(jìn)制數(shù)位、小數(shù)點(diǎn)右邊有 q 個二進(jìn)制數(shù)位的小數(shù)。以(n1.q1)和(n2.q2)為格式的兩個小數(shù)相乘,產(chǎn)生格式為(n1+n2).(q1+q2)的結(jié)果。對于要有效保留小數(shù)位的處理應(yīng)用,

50、輸入的數(shù)據(jù)通常采用(1.7)的格式,產(chǎn)生的結(jié)果為(2.14)格式。因此將結(jié)果左移一位,以使高字節(jié)的格式與輸入的相一致。FMULSU指令的執(zhí)行周期與 MULSU 指令相同,但比 MULSU 指令增加了左移操作。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 被乘數(shù) Rd 為一個包含帶符號定點(diǎn)小數(shù)的寄存器,乘數(shù) Rr 是一個包含無符號定點(diǎn)小數(shù)的寄存器,小數(shù)點(diǎn)固定在第 7 位和第 6 位之間。結(jié)果為 16 位帶符號的定點(diǎn)小數(shù),其小數(shù)點(diǎn)固定在第 15 位和第 14 位之間。3.3 跳 轉(zhuǎn) 指 令3.3.1 無條件跳轉(zhuǎn)指令1相對跳轉(zhuǎn)RJMP k-2048k2047說明:相對跳轉(zhuǎn)到 PC-2048P

51、C+2047 字范圍內(nèi)的地址,在匯編程序中,用目的地址的標(biāo)號替代相對跳轉(zhuǎn)字 k。操作:PC(PC+1)+ k機(jī)器碼:1100 kkkk kkkk kkkk對標(biāo)志位的影響:無匯編語言中,只要使用欲轉(zhuǎn)向的標(biāo)號即可。例:RJMP ABCABC:2間接跳轉(zhuǎn)IJMP說明:間接跳轉(zhuǎn)到 Z 指針寄存器指向的 16 位地址。Z 指針寄存器是 16 位寬,允許在當(dāng)前程序存儲器空間 64K 字(128K 字節(jié))內(nèi)跳轉(zhuǎn)。IJMP 間接跳轉(zhuǎn)優(yōu)點(diǎn):跳轉(zhuǎn)范圍大;缺點(diǎn):作為子程序模塊,移植時(shí)需修改跳轉(zhuǎn)地址,所以一般在子程序中不要使用。操作:PCZ(150)對標(biāo)志位的影響:無3直接跳轉(zhuǎn)機(jī)器碼:1001 0100 0000 1

52、001JMP k0k4194303說明:直接跳轉(zhuǎn)到 k 地址處,在匯編程序中,用目的地址的標(biāo)號替代跳轉(zhuǎn)字 k。操作:PCk機(jī)器碼:1001 010k kkkk 110k kkkk kkkk kkkk kkkk對標(biāo)志位的影響:無匯編語言中,只要使用欲轉(zhuǎn)向的標(biāo)號即可。例:JMP ABCABC:華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 3.3.2 條件跳轉(zhuǎn)指令條件跳轉(zhuǎn)指令是依照某種特定的條件跳轉(zhuǎn)的指令,條件滿足則跳轉(zhuǎn);條件不滿足時(shí)則順序執(zhí)行下面的指令。1測試條件符合跳轉(zhuǎn)指令(1)狀態(tài)寄存器中位為“1”跳轉(zhuǎn)BRBS s,k0s7,-64k63說明:執(zhí)行該指令時(shí),PC 先加 1,再測試 SR

53、EG 的 s 位,如果該位被置位,則跳轉(zhuǎn) k個字,k 為 7 位帶符號數(shù),最多可向前跳 63 個字,向后跳 64 個字;否則順序執(zhí)行。在匯編程序中,用目的地址的標(biāo)號替代相對跳轉(zhuǎn)字 k。操作:If SREG(s)=1,then PC(PC+1)+k,else PCPC+1機(jī)器碼:1111 00kk kkkk ksss對標(biāo)志位的影響:無(2)狀態(tài)寄存器中位為“0”跳轉(zhuǎn)BRBC s,k0s7,-64k63說明:執(zhí)行該指令時(shí),PC 先加 1,再測試 SREG 的 s 位,如果該位被清零,則跳轉(zhuǎn) k個字,k 為 7 位帶符號數(shù),最多可向前跳 63 個字,向后跳 64 個字;否則順序執(zhí)行。在匯編程序中,用

54、目的地址的標(biāo)號替代相對跳轉(zhuǎn)字 k。操作:If SREG(s)=0,then PC(PC+1)+k,else PCPC+1機(jī)器碼:1111 01kk kkkk ksss對標(biāo)志位的影響:無(3)相等跳轉(zhuǎn)BREQ k-64k63說明:條件相對跳轉(zhuǎn),測試零標(biāo)志位 Z,如果 Z 位被置位,則相對 PC 值跳轉(zhuǎn) k 個字。如果在執(zhí)行 CP、CPI、SUB 或 SUBI 指令后,立即執(zhí)行該指令,且當(dāng)寄存器 Rd 中數(shù)與寄存器 Rr 中數(shù)相等時(shí),將發(fā)生跳轉(zhuǎn)。這條指令相當(dāng)于指令 BRBS 1,k。操作:If Rd=Rr(Z=1),then PC(PC+1)+k;else PCPC+1機(jī)器碼:1111 00kk

55、kkkk k001對標(biāo)志位的影響:無(4)不相等跳轉(zhuǎn)BRNE k-64k63說明:條件相對跳轉(zhuǎn),測試零標(biāo)志位 Z,如果 Z 位被清零,則相對 PC 值跳轉(zhuǎn) k 個字。這條指令相當(dāng)于指令 BRBC 1,k操作:If RdRr(Z=0),then PC(PC+1)+k;else PCPC+1機(jī)器碼:1111 01kk kkkk k001對標(biāo)志位的影響:無(5)進(jìn)位標(biāo)志位 C 為“1”跳轉(zhuǎn)BRCS k-64k63說明:條件相對跳轉(zhuǎn),測試進(jìn)位標(biāo)志 C,如果 C 位被置位,則相對 PC 值跳轉(zhuǎn) k 個字。這條指令相當(dāng)于指令 BRBS 0,k。操作:If C=l then PC(PC+1)+k ;else

56、 PCPC+1華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 機(jī)器碼:1111 00kk kkkk k000對標(biāo)志位的影響:無(6)進(jìn)位標(biāo)志位 C 為“0”跳轉(zhuǎn)BRCC k-64k63說明:條件相對跳轉(zhuǎn),測試進(jìn)位標(biāo)志 C,如果 C 位被清除,則相對 PC 值跳轉(zhuǎn) k 個字。這條指令相當(dāng)于指令 BRBC 0,k。操作:If C=0 then PC(PC+1)+k else PCPC+1機(jī)器碼:1111 01kk kkkk k000對標(biāo)志位的影響:無(7)大于或等于跳轉(zhuǎn)(對無符號數(shù))BRSH k-64k63說明:條件相對跳轉(zhuǎn),測試進(jìn)位標(biāo)志 C,如果 C 位被清零,則相對 PC 值跳轉(zhuǎn) k 個

57、字。如果在執(zhí)行 CP、CPI、SUB或 SUBI 指令后,立即執(zhí)行該指令,且當(dāng)在寄存器Rd 中無符號二進(jìn)制數(shù)大于或等于寄存器 Rr 中無符號二進(jìn)制數(shù)時(shí),將發(fā)生跳轉(zhuǎn)。該指令相當(dāng)于指令 BRBS 0,k。操作:If RdRr(C=0) then PC(PC+1)+k else PCPC+1機(jī)器碼:1111 01kk kkkk k000對標(biāo)志位的影響:無(8)小于跳轉(zhuǎn)(對無符號數(shù))BRLO k-64k63說明:條件相對跳轉(zhuǎn),測試進(jìn)位標(biāo)志 C,如果 C 位被置位,則相對 PC 值跳轉(zhuǎn) k 個字。如果在執(zhí)行 CP、CPI、SUB或 SUBI 指令后立即執(zhí)行該指令,且當(dāng)在寄存器 Rd 中無符號二進(jìn)制數(shù)小于

58、在寄存器Rr 中無符號二進(jìn)制數(shù)時(shí),將發(fā)生跳轉(zhuǎn)。該指令相當(dāng)于指令BRBS 0,k。操作:If RdRr(C=1) then PC(PC+1)+k else PCPC+1機(jī)器碼:1111 00kk kkkk k000對標(biāo)志位的影響:無(9)結(jié)果為負(fù)跳轉(zhuǎn)BRMI k-64k63說明:條件相對跳轉(zhuǎn),測試負(fù)號標(biāo)志 N,如果 N 位被置位,則相對 PC 值跳轉(zhuǎn) k 個字。該指令相當(dāng)于指令 BRBS 2,k。操作:If N=l then PC(PC+1)+k else PCPC+1機(jī)器碼:1111 00kk kkkk k010對標(biāo)志位的影響:無(10)結(jié)果為正跳轉(zhuǎn)BRPL k-64k63說明:條件相對跳轉(zhuǎn),

59、測試負(fù)號標(biāo)志 N,如果 N 位被清零,則相對 PC 值跳轉(zhuǎn) k 個字。該指令相當(dāng)于指令 BRBC 2,k操作:If N=0 then PC(PC+1)+k; else PCPC+1機(jī)器碼:1111 01kk kkkk k010對標(biāo)志位的影響:無(11)大于或等于跳轉(zhuǎn)(帶符號數(shù))華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮2005.3.16 BRGE k-64k63說明:條件相對跳轉(zhuǎn),測試符號標(biāo)志 S,如果 S 位被清零,則相對 PC 值跳轉(zhuǎn) k 個字。如果在執(zhí)行 CP、CPI、SUB 或 SUBI 指令后立即執(zhí)行該指令,且當(dāng)在寄存器 Rd 中帶符號二進(jìn)制數(shù)大于或等于寄存器 Rr 中帶符號二進(jìn)制數(shù)時(shí),將發(fā)

60、生跳轉(zhuǎn)。該指令相當(dāng)于指令 BRBC 4,k。操作:If RdRr (NV=0) then PC(PC+1)+k,else PCPC+1機(jī)器碼:1111 01kk kkkk k100對標(biāo)志位的影響:無(12)小于跳轉(zhuǎn)(帶符號數(shù))BRLT k-64k63說明:條件相對跳轉(zhuǎn),測試符號標(biāo)志 S,如果 S 位被置位,則相對 PC 值跳轉(zhuǎn) k 個字。如果在執(zhí)行 CP、CPI、SUB或 SUBI 指令后立即執(zhí)行該指令,且當(dāng)在寄存器 Rd 中帶符號二進(jìn)制數(shù)小于在寄存器 Rr 中帶符號二進(jìn)制數(shù)時(shí),將發(fā)生跳轉(zhuǎn)。該指令相當(dāng)于指令 BRBS 4,k。操作:If RdRf (NV1) then PC(PC1)k els

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論