嵌入式課件3_1_第1頁(yè)
嵌入式課件3_1_第2頁(yè)
嵌入式課件3_1_第3頁(yè)
嵌入式課件3_1_第4頁(yè)
嵌入式課件3_1_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章第三章 基于基于ARM的嵌入式的嵌入式軟件開(kāi)發(fā)基礎(chǔ)軟件開(kāi)發(fā)基礎(chǔ) 基于基于ARM的嵌入式軟件開(kāi)發(fā)基礎(chǔ)的嵌入式軟件開(kāi)發(fā)基礎(chǔ)嵌入式程序一般都采用嵌入式程序一般都采用匯編語(yǔ)言匯編語(yǔ)言、C(或或C+)語(yǔ)言以語(yǔ)言以及匯編語(yǔ)言與及匯編語(yǔ)言與C語(yǔ)言的語(yǔ)言的混合混合編程。為了更好的進(jìn)行編程。為了更好的進(jìn)行基于基于ARM的嵌入式軟件開(kāi)發(fā),本章密切結(jié)合第四章的嵌入式軟件開(kāi)發(fā),本章密切結(jié)合第四章具體開(kāi)發(fā)例程,對(duì)基于具體開(kāi)發(fā)例程,對(duì)基于ARM的嵌入式軟件開(kāi)發(fā)中所的嵌入式軟件開(kāi)發(fā)中所涉及到的基礎(chǔ)內(nèi)容進(jìn)行簡(jiǎn)述。涉及到的基礎(chǔ)內(nèi)容進(jìn)行簡(jiǎn)述。通過(guò)對(duì)本章的學(xué)習(xí),使大家能夠掌握基于通過(guò)對(duì)本章的學(xué)習(xí),使大家能夠掌握基于ARM嵌入

2、嵌入式程序設(shè)計(jì)的基本知識(shí)。式程序設(shè)計(jì)的基本知識(shí)。 基于基于ARM的嵌入式軟件開(kāi)發(fā)基礎(chǔ)的嵌入式軟件開(kāi)發(fā)基礎(chǔ)ARM指令集指令集Thumb指令集指令集ARM匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)嵌入式嵌入式C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)語(yǔ)言程序設(shè)計(jì)基礎(chǔ) 嵌入式嵌入式C語(yǔ)言程序設(shè)計(jì)技巧語(yǔ)言程序設(shè)計(jì)技巧 C與匯編語(yǔ)言混合編程與匯編語(yǔ)言混合編程 3.1 ARM指令集指令集基本內(nèi)容:基本內(nèi)容:3.1.1 ARM指令集概述指令集概述3.1.2 ARM尋址方式尋址方式 3.1.3 ARM指令的詳細(xì)介紹指令的詳細(xì)介紹 學(xué)習(xí)目的:學(xué)習(xí)目的:對(duì)對(duì)ARM指令集有初步認(rèn)知指令集有初步認(rèn)知如何使用如何使用ARM指令集指令集3.1.1

3、 ARM指令集概述指令集概述ARM指令集的特點(diǎn):指令集的特點(diǎn):由于由于ARM處理器是基于處理器是基于精簡(jiǎn)指令集精簡(jiǎn)指令集原理設(shè)計(jì)的,其指原理設(shè)計(jì)的,其指令集及譯碼機(jī)制相對(duì)較令集及譯碼機(jī)制相對(duì)較簡(jiǎn)單簡(jiǎn)單。ARM指令集是指令集是32位的,程序的位的,程序的啟動(dòng)啟動(dòng)都是從都是從ARM指令指令集開(kāi)始,包括所有的集開(kāi)始,包括所有的異常中斷異常中斷都自動(dòng)轉(zhuǎn)化為都自動(dòng)轉(zhuǎn)化為ARM狀態(tài)。狀態(tài)。所有的所有的ARM指令集都可以是有指令集都可以是有條件執(zhí)行條件執(zhí)行的。的。本節(jié)從指令集本節(jié)從指令集編碼編碼、條件執(zhí)行條件執(zhí)行、指令、指令分類分類及指令及指令格式格式等幾個(gè)方面對(duì)于等幾個(gè)方面對(duì)于ARM指令集進(jìn)行概述。指令集

4、進(jìn)行概述。1、 ARM指令集編碼指令集編碼ARM指令集編碼特點(diǎn):指令集編碼特點(diǎn):ARM指令集是以指令集是以32位位二進(jìn)制編碼二進(jìn)制編碼的方式給出的。的方式給出的。大部分的指令編碼中定義了第大部分的指令編碼中定義了第一一操作數(shù)、第操作數(shù)、第二二操作數(shù)、操作數(shù)、目的目的操作數(shù)、操作數(shù)、條件標(biāo)志條件標(biāo)志影響位以及每條指令所對(duì)應(yīng)的影響位以及每條指令所對(duì)應(yīng)的不同不同功能功能實(shí)現(xiàn)的二進(jìn)制位。實(shí)現(xiàn)的二進(jìn)制位。每條每條32位位ARM指令,都具有指令,都具有不同的二進(jìn)制編碼不同的二進(jìn)制編碼方式來(lái)方式來(lái)和不同的指令和不同的指令功能功能相對(duì)應(yīng)。相對(duì)應(yīng)。2、條件執(zhí)行、條件執(zhí)行在在ARM的指令編碼表中,統(tǒng)一占用編碼的最

5、的指令編碼表中,統(tǒng)一占用編碼的最高四位高四位31:28來(lái)表示來(lái)表示“條件碼條件碼”。每種。每種“條件碼條件碼”用兩個(gè)用兩個(gè)英文縮寫(xiě)字符表示它的含義,可以添加在指令助記符英文縮寫(xiě)字符表示它的含義,可以添加在指令助記符的后面表示指令執(zhí)行時(shí)必須要滿足的條件。的后面表示指令執(zhí)行時(shí)必須要滿足的條件。ARM指令根據(jù)指令根據(jù)CPSR中的條件位,自動(dòng)判斷是否執(zhí)行中的條件位,自動(dòng)判斷是否執(zhí)行指令,在條件滿足時(shí),指令執(zhí)行;否則指令被忽略指令,在條件滿足時(shí),指令執(zhí)行;否則指令被忽略(可以認(rèn)為執(zhí)行了一條(可以認(rèn)為執(zhí)行了一條NOP偽指令)。偽指令)。程序狀態(tài)寄存器程序狀態(tài)寄存器CPSR和程序狀態(tài)保存寄存器和程序狀態(tài)保存

6、寄存器SPSR(1)條件碼標(biāo)志:)條件碼標(biāo)志:N、Z、C、VN在結(jié)果是帶符號(hào)的二進(jìn)制補(bǔ)碼情況下,如果結(jié)果為負(fù)數(shù),則在結(jié)果是帶符號(hào)的二進(jìn)制補(bǔ)碼情況下,如果結(jié)果為負(fù)數(shù),則N=1;如果結(jié);如果結(jié) 果為非負(fù)數(shù),則果為非負(fù)數(shù),則N=0。Z如果結(jié)果為如果結(jié)果為0,則,則Z=1;如果結(jié)果為非;如果結(jié)果為非0,則,則Z=0。C它的設(shè)置分以下幾種情況;它的設(shè)置分以下幾種情況; 對(duì)于加法指令(包括對(duì)于加法指令(包括CMN),如果產(chǎn)生進(jìn)位,則),如果產(chǎn)生進(jìn)位,則C=1;否則;否則C=0。 對(duì)于減法指令(包括對(duì)于減法指令(包括CMP),如果產(chǎn)生借位,則),如果產(chǎn)生借位,則C=0;否則;否則C=1。 對(duì)于有移位操作的非

7、加減法指令,對(duì)于有移位操作的非加減法指令,C為移位操作中最后移出位的值。為移位操作中最后移出位的值。 對(duì)于其他指令,對(duì)于其他指令,C通常不變。通常不變。V它的設(shè)置也分為以下兩種情況:它的設(shè)置也分為以下兩種情況: 對(duì)于加減法指令,在操作數(shù)和結(jié)果是帶符號(hào)的整數(shù)時(shí),如果發(fā)生溢出,則對(duì)于加減法指令,在操作數(shù)和結(jié)果是帶符號(hào)的整數(shù)時(shí),如果發(fā)生溢出,則 V=1;如果無(wú)溢出發(fā)生,則;如果無(wú)溢出發(fā)生,則V=0。 對(duì)于其他指令,對(duì)于其他指令,V通常不發(fā)生變化。通常不發(fā)生變化。2、條件執(zhí)行、條件執(zhí)行例如,數(shù)據(jù)傳送指令例如,數(shù)據(jù)傳送指令MOV加上條件后綴加上條件后綴EQ后成為后成為MOVEQ,表示,表示“相等則執(zhí)行傳

8、送相等則執(zhí)行傳送”,“不相等則本條指不相等則本條指令不執(zhí)行令不執(zhí)行”,即只有當(dāng),即只有當(dāng)CPRS中的中的Z標(biāo)志為標(biāo)志為“1”時(shí),才會(huì)發(fā)時(shí),才會(huì)發(fā)生數(shù)據(jù)傳送。生數(shù)據(jù)傳送。MOV R9,R2MOVEQ R9,R2下表列舉了四位條件碼下表列舉了四位條件碼“cond”的的16種編碼中能為用戶所種編碼中能為用戶所使用的使用的15種,而編碼種,而編碼“1111”為系統(tǒng)暫不使用的保留編碼。為系統(tǒng)暫不使用的保留編碼。 MOV R9,R2MOVEQ R9,R2MOVNE R9,R2MOVHI R9,R2MOVAL R9,R23、 指令分類及指令格式指令分類及指令格式指令分類簡(jiǎn)述指令分類簡(jiǎn)述ARM指令集是指令集是

9、Load/Store型的,只能通過(guò)型的,只能通過(guò)Load/Store指令,實(shí)現(xiàn)對(duì)系統(tǒng)指令,實(shí)現(xiàn)對(duì)系統(tǒng)存儲(chǔ)器存儲(chǔ)器的訪問(wèn),而其它類型的指令是的訪問(wèn),而其它類型的指令是基于處理器內(nèi)部的基于處理器內(nèi)部的寄存器寄存器完成操作的。完成操作的。ARM指令集可以分為指令集可以分為六大類六大類:數(shù)據(jù)處理指令、:數(shù)據(jù)處理指令、Load/Store指令、跳轉(zhuǎn)指令、程序狀態(tài)寄存器處理指令、指令、跳轉(zhuǎn)指令、程序狀態(tài)寄存器處理指令、協(xié)處理器指令和異常產(chǎn)生指令。協(xié)處理器指令和異常產(chǎn)生指令。 3、指令分類及指令格式、指令分類及指令格式指令格式指令格式ARM指令使用的基本格式如下:指令使用的基本格式如下: opcodecon

10、dS Rd,Rn,operand2指令格式使用舉例指令格式使用舉例LDR R0,R1 ;讀??;讀取R1地址上的存儲(chǔ)單元內(nèi)容給地址上的存儲(chǔ)單元內(nèi)容給R0,執(zhí)行條件,執(zhí)行條件AL。BEQ DATAEVEN ;條件執(zhí)行分支指令,執(zhí)行條件;條件執(zhí)行分支指令,執(zhí)行條件EQ,即,即相等相等則跳轉(zhuǎn)則跳轉(zhuǎn) 到到 DATAEVEN。ADDS R2,R1,#1;加法指令,;加法指令,R2R2影響影響CPSR寄存器(寄存器(S)。)。3.1.2 ARM尋址方式尋址方式 尋址方式,是根據(jù)指令編碼中給出的尋址方式,是根據(jù)指令編碼中給出的地址地址碼字段來(lái)尋找真碼字段來(lái)尋找真實(shí)實(shí)操作數(shù)操作數(shù)的方式。的方式。ARM處理器支持

11、的基本尋址方式有以下七種:處理器支持的基本尋址方式有以下七種: 立即尋址立即尋址 寄存器尋址寄存器尋址 寄存器間接尋址寄存器間接尋址 基址加偏移尋址基址加偏移尋址 堆棧尋址堆棧尋址 塊拷貝尋址塊拷貝尋址 相對(duì)尋址相對(duì)尋址1、立即尋址、立即尋址 立即尋址也叫立即尋址也叫立即數(shù)立即數(shù)尋址,這是一種特殊的尋址方式,尋址,這是一種特殊的尋址方式,操作數(shù)本身就在操作數(shù)本身就在指令中給出指令中給出,只要取出指令也就取到了操作,只要取出指令也就取到了操作數(shù),這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做立數(shù),這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做立即尋址。例如以下指令:即尋址。例如以下指令: ADD

12、R0,R0,1/*R0R01*/ ADDR0,R0,0 x3f/*R0R00 x3f*/ 以上指令中,以上指令中,第二個(gè)第二個(gè)源操作數(shù)即為源操作數(shù)即為立即數(shù)(立即數(shù)(32位)位),要,要求以求以“”為前綴,對(duì)于以十六進(jìn)制表示的立即數(shù),還要求為前綴,對(duì)于以十六進(jìn)制表示的立即數(shù),還要求在在“”后加上后加上“0 x”;二進(jìn)制數(shù),;二進(jìn)制數(shù),“0b”;十進(jìn)制數(shù),;十進(jìn)制數(shù),“0d”或省略?;蚴÷?。有效立即數(shù)問(wèn)題有效立即數(shù)問(wèn)題 在在32位指令編碼位指令編碼中存放中存放32位立即數(shù)位立即數(shù)的方法是:的方法是: 在在ARM數(shù)據(jù)處理指令中,當(dāng)參與操作的數(shù)據(jù)處理指令中,當(dāng)參與操作的第二操作數(shù)第二操作數(shù)為為立即數(shù)

13、立即數(shù)時(shí),每個(gè)立即數(shù)都是采用一個(gè)時(shí),每個(gè)立即數(shù)都是采用一個(gè)8位位的常數(shù)的常數(shù)循環(huán)右移偶循環(huán)右移偶數(shù)位數(shù)位而而間接得到間接得到。 其中循環(huán)右移的位數(shù),由一個(gè)其中循環(huán)右移的位數(shù),由一個(gè)4位二進(jìn)制的兩倍表示,位二進(jìn)制的兩倍表示,如果立即數(shù)記作如果立即數(shù)記作,8位常數(shù)記作位常數(shù)記作immed_8,4位的循環(huán)右移值記作位的循環(huán)右移值記作rotate_imm,有效的立即數(shù)是由一個(gè),有效的立即數(shù)是由一個(gè)8位的立即數(shù)循環(huán)右移偶數(shù)位得到。因此有效立即數(shù)位的立即數(shù)循環(huán)右移偶數(shù)位得到。因此有效立即數(shù)immediate可以表示成(可以表示成(不是所有的不是所有的32位立即數(shù)都有效位立即數(shù)都有效):): =immed_

14、8循環(huán)右移(循環(huán)右移(2rotate_imm)有效立即數(shù)問(wèn)題有效立即數(shù)問(wèn)題數(shù)據(jù)處理指令二進(jìn)制編碼數(shù)據(jù)處理指令二進(jìn)制編碼2 2、寄存器尋址、寄存器尋址 寄存器尋址,就是利用寄存器尋址,就是利用寄存器中寄存器中的數(shù)值作為操作數(shù),這的數(shù)值作為操作數(shù),這種尋址方式是一種執(zhí)行效率較高的尋址方式。以下指令:種尋址方式是一種執(zhí)行效率較高的尋址方式。以下指令: ADDADDR0R0,R1R1,R2R2/ /* *R0R1R0R1R2R2* */ / 該指令的執(zhí)行效果是將寄存器該指令的執(zhí)行效果是將寄存器R1R1和和R2R2的內(nèi)容相加,其結(jié)的內(nèi)容相加,其結(jié)果存放在寄存器果存放在寄存器R0R0中。中。2 2、寄存器

15、尋址、寄存器尋址 1. 1.第二操作數(shù)為寄存器型的第二操作數(shù)為寄存器型的移位移位操作操作 在在ARMARM指令的數(shù)據(jù)處理指令中,參與操作的第指令的數(shù)據(jù)處理指令中,參與操作的第二二操操作數(shù)為作數(shù)為寄存器寄存器型時(shí),在執(zhí)行寄存器尋址操作時(shí),可以選型時(shí),在執(zhí)行寄存器尋址操作時(shí),可以選擇是否對(duì)第二操作數(shù)進(jìn)行移位,即擇是否對(duì)第二操作數(shù)進(jìn)行移位,即RmRm,其中,其中RmRm稱為第二操作數(shù)寄存器,稱為第二操作數(shù)寄存器,用來(lái)指定移位用來(lái)指定移位類型類型(LSLLSL,LSRLSR,ASLASL,ASRASR,RORROR或或RRXRRX)和移位)和移位位數(shù)位數(shù)。移位位數(shù)可以是移位位數(shù)可以是5 5位立即數(shù)(二

16、進(jìn)制)位立即數(shù)(二進(jìn)制)(#)或)或寄寄存器存器(RsRs)。在指令執(zhí)行時(shí)將移位后的內(nèi)容作為第二操)。在指令執(zhí)行時(shí)將移位后的內(nèi)容作為第二操作數(shù)參與運(yùn)算。例如指令:作數(shù)參與運(yùn)算。例如指令: ADD R3ADD R3,R2R2,R1R1,LSR #2 LSR #2 ;R3R3R2 + R1R2 + R14 42 2、寄存器尋址、寄存器尋址2.2.第二操作數(shù)第二操作數(shù)移位方式移位方式 LSL:邏輯左移,空出的最低有效位用:邏輯左移,空出的最低有效位用0填充。填充。LSR:邏輯右移,空出的最高有效位用:邏輯右移,空出的最高有效位用0填充。填充。ASL:算術(shù)左移,由于左移空出的有效位用:算術(shù)左移,由于左

17、移空出的有效位用0填充,因此填充,因此 它它與與LSL同義。同義。ASR:算術(shù)右移,算術(shù)移位的對(duì)象是帶符號(hào)數(shù),移位過(guò)程中:算術(shù)右移,算術(shù)移位的對(duì)象是帶符號(hào)數(shù),移位過(guò)程中必須保持操作數(shù)的符號(hào)不變。如果源操作數(shù)是正數(shù),必須保持操作數(shù)的符號(hào)不變。如果源操作數(shù)是正數(shù),空出的最高有效位用空出的最高有效位用0填充,如果是負(fù)數(shù)用填充,如果是負(fù)數(shù)用1填充。填充。 ROR:循環(huán)右移,移出的字的最低有效位依次填入空出的最:循環(huán)右移,移出的字的最低有效位依次填入空出的最高有效位。高有效位。RRX:帶擴(kuò)展的循環(huán)右移。將寄存器的內(nèi)容循環(huán)右移:帶擴(kuò)展的循環(huán)右移。將寄存器的內(nèi)容循環(huán)右移1位,位,空位用原來(lái)空位用原來(lái)C標(biāo)志位

18、填充。標(biāo)志位填充。2 2、寄存器尋址、寄存器尋址 2 2、寄存器尋址、寄存器尋址3.3.第二操作數(shù)的第二操作數(shù)的移位位數(shù)移位位數(shù) 移位位數(shù)可以用移位位數(shù)可以用立即數(shù)立即數(shù)或者或者寄存器寄存器方式給出方式給出, ,如下所示:如下所示: ADD R3 ADD R3,R2R2,R1R1,LSR #2LSR #2 ;R3 R3 R2 + R1R2 + R14 4 ADD R3 ADD R3,R2R2,R1R1,LSR R4LSR R4 ;R3 R3 R2 + R1R2 + R12 2R4R4 寄存器寄存器R1的內(nèi)容分別邏輯右移的內(nèi)容分別邏輯右移2位、位、R4位(亦即位(亦即R14、R12R4),再與寄

19、存器),再與寄存器R2的內(nèi)容相加,結(jié)果放入的內(nèi)容相加,結(jié)果放入R3中。中。 3 3、寄存器間接尋址、寄存器間接尋址 寄存器間接尋址,就是以寄存器中的寄存器間接尋址,就是以寄存器中的值值作為操作數(shù)的作為操作數(shù)的地址地址,而,而操作數(shù)操作數(shù)本身存放在本身存放在存儲(chǔ)器存儲(chǔ)器中。例如以下指令:中。例如以下指令: LDRLDRR0R0,R1R1/ /* *R0R1R0R1* */ / STR STRR0R0,R1R1/ /* *R1R0R1R0* */ / 第一條指令,將以第一條指令,將以R1R1的值為地址的存儲(chǔ)器中的數(shù)據(jù),的值為地址的存儲(chǔ)器中的數(shù)據(jù),傳送到傳送到R0R0中。第二條指令,將中。第二條指令

20、,將R0R0的值,傳送到以的值,傳送到以R1R1的值為的值為地址的存儲(chǔ)器中。地址的存儲(chǔ)器中。4 4、基址加偏址尋址、基址加偏址尋址 基址基址變址尋址,變址尋址,就是將寄存器(該寄存器一般稱作就是將寄存器(該寄存器一般稱作基址基址寄存器寄存器)的內(nèi)容與指令中給出的地址)的內(nèi)容與指令中給出的地址偏移量相加偏移量相加,從而得到,從而得到一個(gè)操作數(shù)的有一個(gè)操作數(shù)的有效地址效地址。 變址尋址方式,常用于訪問(wèn)某基地址附近(變址尋址方式,常用于訪問(wèn)某基地址附近(4KB)的地)的地址單元。采用變址尋址方式的指令又可以分為以下幾種形式:址單元。采用變址尋址方式的指令又可以分為以下幾種形式: 1.1.前變址前變址

21、模式:模式: LDR R0LDR R0,R1R1,4 4 ;R0R0R1R144 2.2.自動(dòng)變址自動(dòng)變址模式:模式: LDR R0LDR R0,R1R1,44?。唬?;R0R1R0R144、R1R1R1R14 4 3.3.后變址后變址模式:模式: LDR R0LDR R0,R1 R1 ,4 4 ;R0R1R0R1、R1R1R1R14 44 4、基址加偏址尋址、基址加偏址尋址 4. 4.偏移地址偏移地址 基址寄存器的基址寄存器的地址偏移地址偏移,可以是一個(gè),可以是一個(gè)立即數(shù)立即數(shù),也可以是,也可以是另一個(gè)另一個(gè)寄存器寄存器,并且在加到基址寄存器前,還可以經(jīng)過(guò),并且在加到基址寄存器前,還可以經(jīng)過(guò)移

22、移位操作位操作,如下所示:,如下所示: LDR R0 LDR R0,R1R1,4 4 ;R0R0R1R144 LDR LDR r r0 0,r1r1,r2r2 ;r0r0memmem3232r1+r2r1+r2 LDR r0 LDR r0,r1r1,r2r2,LSL #2LSL #2 ;r0r0r1+r2r1+r2* *44 但常用的是立即數(shù)偏移的形式,地址偏移為寄存器形但常用的是立即數(shù)偏移的形式,地址偏移為寄存器形式的指令很少使用。式的指令很少使用。 5.傳送數(shù)據(jù)類型傳送數(shù)據(jù)類型 傳送數(shù)據(jù)可以是有符號(hào)、無(wú)符號(hào)的傳送數(shù)據(jù)可以是有符號(hào)、無(wú)符號(hào)的8位、位、16位半字和位半字和32位位字。相對(duì)應(yīng)的在

23、指令中增加一個(gè)字。相對(duì)應(yīng)的在指令中增加一個(gè)字母字母表示數(shù)據(jù)類型:表示數(shù)據(jù)類型: B:選擇:選擇字節(jié)字節(jié)操作操作 H:選擇:選擇半字半字操作操作 不加:選擇不加:選擇字字操作操作 LDRB R0,R1;R0mem8R1,8位字節(jié)、位字節(jié)、0 0擴(kuò)展擴(kuò)展 LDRH R1,R0,#20;R1mem16R0+20, 16位半字、位半字、0 0擴(kuò)展擴(kuò)展4 4、基址加偏址尋址、基址加偏址尋址5、 堆棧尋址堆棧尋址 從內(nèi)存管理角度看,從內(nèi)存管理角度看,堆棧堆棧是一塊用于保存數(shù)據(jù)的是一塊用于保存數(shù)據(jù)的連續(xù)內(nèi)存連續(xù)內(nèi)存,也就是一種按特定順序進(jìn)行數(shù)據(jù)存取的存,也就是一種按特定順序進(jìn)行數(shù)據(jù)存取的存儲(chǔ)區(qū),這種特定的順

24、序可以歸結(jié)為儲(chǔ)區(qū),這種特定的順序可以歸結(jié)為“后進(jìn)先出后進(jìn)先出”(LIFO)或)或“先進(jìn)后出先進(jìn)后出”(FILO)。)。 指向堆棧的地址寄存器,稱為指向堆棧的地址寄存器,稱為堆棧指針堆棧指針(SP),),堆棧的訪問(wèn)是通過(guò)堆棧指針(堆棧的訪問(wèn)是通過(guò)堆棧指針(R13,ARM處理器的不同處理器的不同工作模式對(duì)應(yīng)的物理寄存器各不相同)指向一塊存儲(chǔ)工作模式對(duì)應(yīng)的物理寄存器各不相同)指向一塊存儲(chǔ)器區(qū)域(堆棧)來(lái)實(shí)現(xiàn)的。器區(qū)域(堆棧)來(lái)實(shí)現(xiàn)的。 5、堆棧尋址、堆棧尋址堆棧既可以向下增長(zhǎng)(向內(nèi)存低地址),也可以向上堆棧既可以向下增長(zhǎng)(向內(nèi)存低地址),也可以向上增長(zhǎng),這就是堆棧的增長(zhǎng),這就是堆棧的兩種生長(zhǎng)兩種生長(zhǎng)

25、方式:方式:向上向上生長(zhǎng):即訪問(wèn)存儲(chǔ)器時(shí),存儲(chǔ)器的地址向生長(zhǎng):即訪問(wèn)存儲(chǔ)器時(shí),存儲(chǔ)器的地址向高地址高地址方向生長(zhǎng),稱為方向生長(zhǎng),稱為遞增遞增堆棧(堆棧(ascending stack)。)。向下向下生長(zhǎng):即訪問(wèn)存儲(chǔ)器時(shí),存儲(chǔ)器的地址向生長(zhǎng):即訪問(wèn)存儲(chǔ)器時(shí),存儲(chǔ)器的地址向低地址低地址方向生長(zhǎng),稱為方向生長(zhǎng),稱為遞減遞減堆棧(堆棧(descending stack)。)。 R5 R1 R0spsp0X10180X10180X100C0X100C0X10000X1000sp遞遞增增遞遞減減堆棧的兩種生長(zhǎng)方式:堆棧的兩種生長(zhǎng)方式: 5、堆棧尋址、堆棧尋址 5、堆棧尋址、堆棧尋址根據(jù)堆棧根據(jù)堆棧指針指針

26、指向的指向的數(shù)據(jù)位置數(shù)據(jù)位置的不同,它又可以分為:的不同,它又可以分為:滿堆棧滿堆棧(Full Stack):堆棧):堆棧指針,指針,指向指向最后最后壓入堆棧壓入堆棧的數(shù)據(jù)或者指向的數(shù)據(jù)或者指向第一個(gè)第一個(gè)要要讀出讀出的數(shù)據(jù)。的數(shù)據(jù)。空堆??斩褩#‥mpty Stack):堆棧指針,指向):堆棧指針,指向最后最后壓入堆壓入堆棧的數(shù)據(jù)的棧的數(shù)據(jù)的上或下一個(gè)空位置上或下一個(gè)空位置或者指向或者指向第一個(gè)要讀出第一個(gè)要讀出的的數(shù)據(jù)的數(shù)據(jù)的上或下一個(gè)空位置上或下一個(gè)空位置(根據(jù)堆棧的生長(zhǎng)方向而定)。(根據(jù)堆棧的生長(zhǎng)方向而定)。 spsp0X10180X10180X100C0X100C0X10000X10

27、00spspR0R1R5堆棧的兩種方式:堆棧的兩種方式:滿棧、空棧滿棧、空棧 5、堆棧尋址、堆棧尋址滿棧滿棧 spsp0X10180X10180X100C0X100C0X10000X1000spspR0R1R5空??諚?、堆棧尋址、堆棧尋址根據(jù)以上的描述說(shuō)明,堆棧有根據(jù)以上的描述說(shuō)明,堆棧有四種四種形式,分別是由形式,分別是由遞增、遞減、滿棧、遞增、遞減、滿棧、空??諚=M成的所有組合。組成的所有組合。ARM處理器支持這四種形式的堆棧:處理器支持這四種形式的堆棧:滿遞增滿遞增:堆棧隨著存儲(chǔ)器地址的增大而:堆棧隨著存儲(chǔ)器地址的增大而向上增長(zhǎng)向上增長(zhǎng),基址寄存器指向存,基址寄存器指向存儲(chǔ)有效數(shù)據(jù)的儲(chǔ)

28、有效數(shù)據(jù)的最高地址最高地址或者指向或者指向第一個(gè)第一個(gè)要讀出的數(shù)據(jù)的位置。要讀出的數(shù)據(jù)的位置。空遞增空遞增:堆棧隨著存儲(chǔ)器地址的增大而:堆棧隨著存儲(chǔ)器地址的增大而向上增長(zhǎng)向上增長(zhǎng),基址寄存器指向存,基址寄存器指向存儲(chǔ)有效數(shù)據(jù)的儲(chǔ)有效數(shù)據(jù)的最高地址的上一個(gè)空位置最高地址的上一個(gè)空位置或者是指向?qū)⒁x出的或者是指向?qū)⒁x出的第一個(gè)第一個(gè)數(shù)據(jù)位置的上一個(gè)空位置數(shù)據(jù)位置的上一個(gè)空位置。滿遞減滿遞減:堆棧隨著存儲(chǔ)器地址的減小而:堆棧隨著存儲(chǔ)器地址的減小而向下增長(zhǎng)向下增長(zhǎng),基址寄存器指向存,基址寄存器指向存儲(chǔ)有效數(shù)據(jù)的最低地址或者是指向第一個(gè)要讀出的數(shù)據(jù)的位置。儲(chǔ)有效數(shù)據(jù)的最低地址或者是指向第一個(gè)要讀出的

29、數(shù)據(jù)的位置??者f減空遞減:堆棧隨著存儲(chǔ)器地址的減小而:堆棧隨著存儲(chǔ)器地址的減小而向下增長(zhǎng)向下增長(zhǎng),基址寄存器指向最,基址寄存器指向最后壓入堆棧的數(shù)據(jù)的下一個(gè)空位置或者指向?qū)⒁x出的第一個(gè)數(shù)據(jù)位后壓入堆棧的數(shù)據(jù)的下一個(gè)空位置或者指向?qū)⒁x出的第一個(gè)數(shù)據(jù)位置的下一個(gè)空位置。置的下一個(gè)空位置。 spsp0X10180X10180X100C0X100C0X10000X1000spspR0R1R5堆棧的兩種方式:堆棧的兩種方式:滿棧、空棧。寄存器滿棧、空棧。寄存器編號(hào)編號(hào)、地址地址關(guān)系關(guān)系 5、堆棧尋址、堆棧尋址滿棧(滿棧(遞增遞增) spsp0X10180X10180X100C0X100C0X1000

30、0X1000spspR0R1R5空棧(空棧(遞增遞增) spsp0X10180X10180X100C0X100C0X10000X1000spspR0R1R5堆棧的兩種方式:堆棧的兩種方式:滿棧、空棧。寄存器滿棧、空棧。寄存器編號(hào)編號(hào)、地址地址關(guān)系關(guān)系 5、堆棧尋址、堆棧尋址滿棧(滿棧(遞減遞減) spsp0X10180X10180X100C0X100C0X10000X1000spspR0R1R5空棧(空棧(遞減遞減)2種狀態(tài)堆棧操作比較:種狀態(tài)堆棧操作比較:ARM指令:指令:STMFD SP! R1-R7,LR;入棧;入棧SP=SP-1 (- 4 字節(jié)字節(jié))LDMFD SP! R1-R7,LR

31、;出棧;出棧SP=SP+1(+4字節(jié))字節(jié))arm狀態(tài),狀態(tài),在堆棧操作中,總是要指定自動(dòng)變址(在堆棧操作中,總是要指定自動(dòng)變址(R13?。。㏕humb指令:指令:PUSH R1-R7,LR;入棧,默認(rèn);入棧,默認(rèn)SP為堆棧指針為堆棧指針POP R1-R7,LR;出棧;出棧注意:堆棧操作時(shí),進(jìn)棧、出棧的地址變化是相反的!注意:堆棧操作時(shí),進(jìn)棧、出棧的地址變化是相反的!6 6、塊拷貝尋址、塊拷貝尋址 塊拷貝尋址,是塊拷貝尋址,是多寄存器傳送多寄存器傳送指令指令LDM/STM的尋址的尋址方式。方式。LDM/STM指令,可以把存儲(chǔ)器中的一個(gè)指令,可以把存儲(chǔ)器中的一個(gè)數(shù)據(jù)塊數(shù)據(jù)塊加加載到載到多個(gè)寄存

32、器多個(gè)寄存器中,也可以把多個(gè)寄存器中的內(nèi)容保存到中,也可以把多個(gè)寄存器中的內(nèi)容保存到存儲(chǔ)器中。尋址操作中的寄存器可以是存儲(chǔ)器中。尋址操作中的寄存器可以是R0-R15這這16個(gè)寄存?zhèn)€寄存器的器的子集子集或是或是所有所有寄存器。寄存器。 LDM/STM LDM/STM指令,依據(jù)其指令,依據(jù)其后綴名后綴名的不同,其尋址的方式的不同,其尋址的方式也有很大不同,見(jiàn)下表。也有很大不同,見(jiàn)下表。表中對(duì)應(yīng)符號(hào)含義如下:表中對(duì)應(yīng)符號(hào)含義如下:IA (Increment After) 操作完成后地址遞增操作完成后地址遞增IB (Increment Before) 地址先增而后完成操作地址先增而后完成操作DA (D

33、ecrement After) 操作完成后地址遞減操作完成后地址遞減DB (Decrement Before ) 地址先減而后完成操作地址先減而后完成操作FD (Full Decrement) 滿遞減堆棧滿遞減堆棧ED (Empty Decrement) 空遞減堆??者f減堆棧FA (Full Aggrandizement) 滿遞增堆棧滿遞增堆棧EA ( Empty Aggrandizement ) 空遞增堆??者f增堆棧6 6、塊拷貝尋址、塊拷貝尋址20:29386 6、塊拷貝尋址、塊拷貝尋址塊拷貝用法:塊拷貝用法:1、STMIA R9! , R0,R1,R5 注意:寄存器注意:寄存器編號(hào):編號(hào):0、1、5與與存儲(chǔ)器地址存儲(chǔ)器地址

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論