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

下載本文檔

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

文檔簡介

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

2、嵌入式程序設(shè)計的基本知識。式程序設(shè)計的基本知識。 基于基于ARM的嵌入式軟件開發(fā)基礎(chǔ)的嵌入式軟件開發(fā)基礎(chǔ)ARM指令集指令集Thumb指令集指令集ARM匯編語言程序設(shè)計基礎(chǔ)匯編語言程序設(shè)計基礎(chǔ)嵌入式嵌入式C語言程序設(shè)計基礎(chǔ)語言程序設(shè)計基礎(chǔ) 嵌入式嵌入式C語言程序設(shè)計技巧語言程序設(shè)計技巧 C與匯編語言混合編程與匯編語言混合編程 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í)目的:對對ARM指令集有初步認(rèn)知指令集有初步認(rèn)知如何使用如何使用ARM指令集指令集3.1.1

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

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

5、的指令編碼表中,統(tǒng)一占用編碼的最高四位高四位31:28來表示來表示“條件碼條件碼”。每種。每種“條件碼條件碼”用兩個用兩個英文縮寫字符表示它的含義,可以添加在指令助記符英文縮寫字符表示它的含義,可以添加在指令助記符的后面表示指令執(zhí)行時必須要滿足的條件。的后面表示指令執(zhí)行時必須要滿足的條件。ARM指令根據(jù)指令根據(jù)CPSR中的條件位,自動判斷是否執(zhí)行中的條件位,自動判斷是否執(zhí)行指令,在條件滿足時,指令執(zhí)行;否則指令被忽略指令,在條件滿足時,指令執(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é)果是帶符號的二進(jìn)制補(bǔ)碼情況下,如果結(jié)果為負(fù)數(shù),則在結(jié)果是帶符號的二進(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è)置分以下幾種情況; 對于加法指令(包括對于加法指令(包括CMN),如果產(chǎn)生進(jìn)位,則),如果產(chǎn)生進(jìn)位,則C=1;否則;否則C=0。 對于減法指令(包括對于減法指令(包括CMP),如果產(chǎn)生借位,則),如果產(chǎn)生借位,則C=0;否則;否則C=1。 對于有移位操作的非

7、加減法指令,對于有移位操作的非加減法指令,C為移位操作中最后移出位的值。為移位操作中最后移出位的值。 對于其他指令,對于其他指令,C通常不變。通常不變。V它的設(shè)置也分為以下兩種情況:它的設(shè)置也分為以下兩種情況: 對于加減法指令,在操作數(shù)和結(jié)果是帶符號的整數(shù)時,如果發(fā)生溢出,則對于加減法指令,在操作數(shù)和結(jié)果是帶符號的整數(shù)時,如果發(fā)生溢出,則 V=1;如果無溢出發(fā)生,則;如果無溢出發(fā)生,則V=0。 對于其他指令,對于其他指令,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”時,才會發(fā)時,才會發(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、 指令分類及指令格式指令分類及指令格式指令分類簡述指令分類簡述ARM指令集是指令集是

9、Load/Store型的,只能通過型的,只能通過Load/Store指令,實現(xiàn)對系統(tǒng)指令,實現(xiàn)對系統(tǒng)存儲器存儲器的訪問,而其它類型的指令是的訪問,而其它類型的指令是基于處理器內(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 ;讀?。蛔x取R1地址上的存儲單元內(nèi)容給地址上的存儲單元內(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ù)指令編碼中給出的地址地址碼字段來尋找真碼字段來尋找真實實操作數(shù)操作數(shù)的方式。的方式。ARM處理器支持

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

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

13、立即數(shù)時,每個立即數(shù)都是采用一個時,每個立即數(shù)都是采用一個8位位的常數(shù)的常數(shù)循環(huán)右移偶循環(huán)右移偶數(shù)位數(shù)位而而間接得到間接得到。 其中循環(huán)右移的位數(shù),由一個其中循環(huán)右移的位數(shù),由一個4位二進(jìn)制的兩倍表示,位二進(jìn)制的兩倍表示,如果立即數(shù)記作如果立即數(shù)記作,8位常數(shù)記作位常數(shù)記作immed_8,4位的循環(huán)右移值記作位的循環(huán)右移值記作rotate_imm,有效的立即數(shù)是由一個,有效的立即數(shù)是由一個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ù)問題有效立即數(shù)問題數(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ù)為寄存器寄存器型時,在執(zhí)行寄存器尋址操作時,可以選型時,在執(zhí)行寄存器尋址操作時,可以選擇是否對第二操作數(shù)進(jìn)行移位,即擇是否對第二操作數(shù)進(jìn)行移位,即RmRm,其中,其中RmRm稱為第二操作數(shù)寄存器,稱為第二操作數(shù)寄存器,用來指定移位用來指定移位類型類型(LSLLSL,LSRLSR,ASLASL,ASRASR,RORROR或或RRXRRX)和移位)和移位位數(shù)位數(shù)。移位位數(shù)可以是移位位數(shù)可以是5 5位立即數(shù)(二

16、進(jìn)制)位立即數(shù)(二進(jìn)制)(#)或)或寄寄存器存器(RsRs)。在指令執(zhí)行時將移位后的內(nèi)容作為第二操)。在指令執(zhí)行時將移位后的內(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ù)移位的對象是帶符號數(shù),移位過程中:算術(shù)右移,算術(shù)移位的對象是帶符號數(shù),移位過程中必須保持操作數(shù)的符號不變。如果源操作數(shù)是正數(shù),必須保持操作數(shù)的符號不變。如果源操作數(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位,位,空位用原來空位用原來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ù)本身存放在本身存放在存儲器存儲器中。例如以下指令:中。例如以下指令: LDRLDRR0R0,R1R1/ /* *R0R1R0R1* */ / STR STRR0R0,R1R1/ /* *R1R0R1R0* */ / 第一條指令,將以第一條指令,將以R1R1的值為地址的存儲器中的數(shù)據(jù),的值為地址的存儲器中的數(shù)據(jù),傳送到傳送到R0R0中。第二條指令,將中。第二條指令

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

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

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ù)可以是有符號、無符號的傳送數(shù)據(jù)可以是有符號、無符號的8位、位、16位半字和位半字和32位位字。相對應(yīng)的在

23、指令中增加一個字。相對應(yīng)的在指令中增加一個字母字母表示數(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ù)存取的存儲區(qū),這種特定的順

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

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

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

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

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

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

30、0X1000spspR0R1R5空棧(空棧(遞增遞增) spsp0X10180X10180X100C0X100C0X10000X1000spspR0R1R5堆棧的兩種方式:堆棧的兩種方式:滿棧、空棧。寄存器滿棧、空棧。寄存器編號編號、地址地址關(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),在堆棧操作中,總是要指定自動變址(在堆棧操作中,總是要指定自動變址(R13?。。㏕humb指令:指令:PUSH R1-R7,LR;入棧,默認(rèn);入棧,默認(rèn)SP為堆棧指針為堆棧指針POP R1-R7,LR;出棧;出棧注意:堆棧操作時,進(jìn)棧、出棧的地址變化是相反的!注意:堆棧操作時,進(jìn)棧、出棧的地址變化是相反的!6 6、塊拷貝尋址、塊拷貝尋址 塊拷貝尋址,是塊拷貝尋址,是多寄存器傳送多寄存器傳送指令指令LDM/STM的尋址的尋址方式。方式。LDM/STM指令,可以把存儲器中的一個指令,可以把存儲器中的一個數(shù)據(jù)塊數(shù)據(jù)塊加加載到載到多個寄存

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

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

溫馨提示

  • 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

提交評論