第13講-存儲機(jī)制_第1頁
第13講-存儲機(jī)制_第2頁
第13講-存儲機(jī)制_第3頁
第13講-存儲機(jī)制_第4頁
第13講-存儲機(jī)制_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第十三講ARM存儲機(jī)制河南大學(xué)計(jì)算機(jī)與信息工程學(xué)院授課人:金勇聯(lián)系電話mail:jy@計(jì)算機(jī)專業(yè)核心課程之一ARM存儲系統(tǒng)概述快速上下文切換技術(shù)高速緩沖區(qū)和寫緩沖區(qū)ARM存儲器管理單元ARM存儲機(jī)制ARM存儲器訪問指令3ARM存儲系統(tǒng)概述與其他中低檔單片機(jī)不同,ARM處理器中一般都包含一個存儲器管理部件,用于對存儲器的管理。為了適應(yīng)不同的嵌入式應(yīng)用,ARM存儲系統(tǒng)的體系結(jié)構(gòu)存在很多差別。簡單的可以使用像單片機(jī)系統(tǒng)中使用的平板式地址映射機(jī)制即可;而一些復(fù)雜的系統(tǒng)中則可能包含多種技術(shù)來提供功能強(qiáng)大的存儲系統(tǒng)。4系統(tǒng)中可能包含多種類型的存儲器件,如FLASH、ROM、SDRAM、SRAM等;而且不同類型的存儲器件要求不同的速度、數(shù)據(jù)寬度等;通過CACHE和WRITEBUFFER技術(shù)縮小處理器和存儲系統(tǒng)速度差別,從而提高系統(tǒng)性能;內(nèi)存管理部件使用內(nèi)存映射技術(shù)實(shí)現(xiàn)虛擬空間到物理空間的映射。引入存儲保護(hù)機(jī)制,增強(qiáng)系統(tǒng)的安全性;引入一些機(jī)制保證I/O操作映射成內(nèi)存操作后,各種I/O操作能夠得到正確的結(jié)果。ARM存儲系統(tǒng)概述5S3C2410X的存儲器管理器提供訪問外部存儲器的所有控制信號:27位地址信號、32位數(shù)據(jù)信號、8個片選信號、以及讀/寫控制信號等。S3C2410X的存儲空間分成8組,最大容量是1GB,bank0bank5為固定128MB,bank6和bank7的容量可編程改變,可以是2、4、8、16、32、64、128MB,并且bank7的開始地址與bank6的結(jié)束地址相連接,但是二者的容量必須相等。bank0可以作為引導(dǎo)ROM,其數(shù)據(jù)線寬只能是16位和32位,復(fù)位時由OM0、OM1引腳確定;其它存儲器的數(shù)據(jù)線寬可以是8位、16位和32位。S3C2410X的存儲器格式,可以編程設(shè)置為大端格式,也可以設(shè)置為小端格式。ARM存儲器管理單元6S3C2410X存儲器組織示意圖ARM存儲器管理單元ARM存儲器管理單元寄存器地址功能操作復(fù)位值BWSCON0x48000000總線寬度和等待控制讀/寫0x0BANKCON00x48000004BANK0控制讀/寫0x0700BANKCON10x48000008BANK1控制讀/寫0x0700BANKCON20x4800000CBANK2控制讀/寫0x0700BANKCON30x48000010BANK3控制讀/寫0x0700BANKCON40x48000014BANK4控制讀/寫0x0700BANKCON50x48000018BANK5控制讀/寫0x0700BANKCON60x4800001CBANK6控制讀/寫0x18008BANKCON70x48000020BANK7控制讀/寫0x18008REFRESH0x48000024SDRAM刷新控制讀/寫0xAC0000BANKSIZE0x48000028可變的組大小設(shè)置讀/寫0x0MRSRB60x4800002CBANK6模式設(shè)置讀/寫xxxMRSRB70x48000030BANK7模式設(shè)置讀/寫xxx13個控制寄存器為訪問外部存儲空間提供存儲器控制信號。8用于存儲管理的系統(tǒng)控制協(xié)處理寄存器CP15在基于ARM的嵌入式系統(tǒng)中,存儲系統(tǒng)通常使用CP15來完成存儲器的大部分管理工作;除了CP15之外,在具體的存儲機(jī)制中可能還會用到其他技術(shù)如:頁表技術(shù)等。CP15可以保護(hù)16個32位的寄存器,編號0-15。實(shí)際上對于某些編號的寄存器可能對應(yīng)有多個物理寄存器,在指令中指定特定的標(biāo)志位來區(qū)分相應(yīng)的寄存器。ARM存儲器管理單元CP15寄存器列表-1寄存器編號基本作用在MMU中的作用0ID編碼(只讀)ID碼和Cache類型1控制位各種控制位2存儲保護(hù)和控制地址轉(zhuǎn)換表基地址3存儲保護(hù)和控制域訪問控制位4存儲保護(hù)和控制保留5存儲保護(hù)和控制內(nèi)存失效狀態(tài)6存儲保護(hù)和控制內(nèi)存失效地址ARM存儲器管理單元CP15寄存器列表-2寄存器編號基本作用在MMU中的作用7高速緩存和寫緩存高速緩存和寫緩存控制8存儲保護(hù)和控制TLB控制9高速緩存和寫緩存高速緩存鎖定10存儲保護(hù)和控制TLB鎖定11保留

12保留

ARM存儲器管理單元11CP15寄存器列表-3寄存器編號基本作用在MMU中的作用13進(jìn)程標(biāo)識符進(jìn)程標(biāo)識符14保留

15因不同設(shè)計(jì)而異因不同設(shè)計(jì)而異ARM存儲器管理單元12訪問CP15寄存器的指令訪問CP15寄存器的指令有如下兩條:MCR Register->CoprocessorRegisterMRC CoprocessorRegister->Register【注】這兩條指令只能在系統(tǒng)模式下執(zhí)行;在用戶模式下執(zhí)行該指令將引起異常。ARM存儲器管理單元指令語法

MCR{cond}p15,<op1>,<Rd>,<CRn>,<CRm>{,<op2>}MCR2p15,<op1>,<Rd>,<CRn>,<CRm>{,<op2>}

OP1為協(xié)處理器將執(zhí)行的操作的代碼。對于CP15來說,該值必須為0;Rd為源寄存器,其值將被傳送到協(xié)處理器中;該寄存器不能為PC;CRn是協(xié)處理器的目標(biāo)寄存器,可以是C0-15;CRm是附加的目標(biāo)寄存器或源操作數(shù)寄存器,用于區(qū)分同一編號的不同物理寄存器,當(dāng)指令中不需要附加信息時要將C0指定為CRm;OP2也提供附加信息,用于區(qū)分同一編號的不同物理寄存器,當(dāng)指令中不需要附加信息時,可以省略或者將其置0。ARM存儲器管理單元14MCR訪問CP15示例 MCR P15,0,R4,C1,C0,0上述指令從ARM寄存器R4中將數(shù)據(jù)傳送到協(xié)處理器CP15的寄存器C1中。其中R4為ARM寄存器,存放源操作數(shù);C1和C0為協(xié)處理器寄存器,為目標(biāo)寄存器;操作碼1為0,操作碼附加信息也為0。ARM存儲器管理單元15指令語法

MRC{cond}p15,<op1>,<Rd>,<CRn>,<CRm>{,<op2>}MRC2p15,<op1>,<Rd>,<CRn>,<CRm>{,<op2>}

OP1為協(xié)處理器將執(zhí)行的操作的代碼。對于CP15來說,該值必須為0;Rd為目標(biāo)寄存器,指令處理的結(jié)果將存放在該寄存器中;CRn是協(xié)處理器寄存器,存放第一個源操作數(shù);CRm是附加的源操作數(shù)寄存器,用于區(qū)分同一編號的不同物理寄存器,當(dāng)指令中不需要附加信息時要將C0指定為CRm;OP2也提供附加信息,用于區(qū)分同一編號的不同物理寄存器,當(dāng)指令中不需要附加信息時,可以省略或者將其置0。ARM存儲器管理單元16存儲管理單元MMU的作用實(shí)現(xiàn)虛擬地址空間到物理存儲空間的映射;存儲器訪問權(quán)限的控制;設(shè)置虛擬存儲空間的緩沖特性。

頁表是實(shí)現(xiàn)上述功能的一個重要手段,它實(shí)際上是位于內(nèi)存中的一個對照表。ARM存儲器管理單元17存儲器單元的段頁式管理為了實(shí)現(xiàn)不同層次的管理,系統(tǒng)提供了基于段或頁的存儲器訪問方式段(section):由1MB的存儲器塊構(gòu)成

大頁(largepage):由64KB的存儲器塊構(gòu)成

小頁(smallpage):由4KB的存儲器塊構(gòu)成

微頁(tinypage):由1KB的存儲器塊構(gòu)成ARM存儲器管理單元18用于存儲管理的頁表地址變換條目:頁表的每一行對應(yīng)與虛擬地址空間的一個頁,該行同時保含了該虛擬內(nèi)存頁對應(yīng)的物理內(nèi)存頁的地址、該頁的訪問權(quán)限以及緩沖特性等。我們將頁表中的一行稱為地址變換條目。頁表存放在內(nèi)存中,系統(tǒng)通常有一個寄存器來保存頁表的基地址。ARM系統(tǒng)中使用的就是CP15的寄存器C2??毂恚簭奶摂M地址到物理地址的轉(zhuǎn)換實(shí)際上就是查詢頁表的過程。由于程序在執(zhí)行過程中具有局部性,即在一段時間內(nèi)只是局限在少數(shù)幾個單元,為了加快頁表的查詢速度,在系統(tǒng)中通常使用一個容量更小、速度更快的存儲器件來保存當(dāng)前需要訪問的地址變換條目,這個容量小的頁表又稱作快表(TLB)。ARM存儲器管理單元19快表的使用更新:當(dāng)CPU需要訪問內(nèi)存時,首先在TLB中查找需要的地址變換條目。若不存在則在內(nèi)存頁表中查詢,并把查詢的結(jié)果添加到TLB中。清除:當(dāng)內(nèi)存中頁表的內(nèi)容改變或者使用新的頁表時,TLB中的內(nèi)容需要清空。CP15的寄存器8用于完成該功能。鎖定:可以將一個地址變換條目鎖定在TLB中,以加快訪問速度,CP15的寄存器10用于完成該功能。ARM存儲器管理單元20域(domain)管理域是段、大頁和小頁的集合。ARM結(jié)構(gòu)支持16個域。對域的訪問由域訪問控制寄存器(CP15的寄存器3)的兩個位字段控制。因?yàn)槊總€字段對訪問對應(yīng)的域的使能非常迅速,所以整個存儲器區(qū)間能很快地交換進(jìn)出虛擬存儲器。這里支持2種域訪問方式客戶:域的用戶(執(zhí)行程序,訪問數(shù)據(jù)),被形成這個域的節(jié)或頁來監(jiān)督訪問權(quán)限。管理者:控制域的行為(域中的當(dāng)前段和頁,對域的訪問),不被形成這個域的段或頁來監(jiān)督訪問權(quán)限。一個程序可以是一些域的客戶,也是另外一些域的管理者,同時沒有對其它域的訪問權(quán)限。這允許對程序訪問不同存儲器資源的非常靈活的存儲器保護(hù)。ARM存儲器管理單元21內(nèi)存訪問失效管理當(dāng)存儲器訪問失敗時,MMU單元提供了相應(yīng)的機(jī)制用于處理這種情況。CP15的寄存器5和寄存器6用于完成該功能。ARM存儲器管理單元22寄存器1的MMU控制位M(bit[0])使能MMU0=禁止MMU1=允許MMU在沒有MMU和保護(hù)單元的系統(tǒng)上,這個位應(yīng)該讀出為0,并忽略寫。A(bit[1])使能對齊錯檢查0=禁止1=允許..RRVIZFRSBLDPWCAM..14131211109876543210ARM存儲器管理單元23禁止和使能MMU下面指令使能MMU MRC P15,0,R0,C1,0,0 OR R0,#1 MCR P15,0,R0,C1,0,0下面指令禁止MMU MRC P15,0,R0,C1,0,0 BIC R0,#1 MCR P15,0,R0,C1,0,0ARM存儲器管理單元24地址變換過程虛擬存儲空間到物理存儲空間的映射是以內(nèi)存塊為單位進(jìn)行的。在MMU中采用兩級頁表實(shí)現(xiàn)上述地址映射:一級頁表中包含有以段為單位的地址變換條目以及指向二級頁表的指針。一級頁表實(shí)現(xiàn)的地址映射粒度較大;二級頁表中包含以大頁和小頁為單位的地址變換條目。其中一種類型的二級表還包含有極小頁為單位的地址變換條目。ARM存儲器管理單元25基于一級頁表的地址變換ARM存儲器管理單元26一級頁表描述符可能的格式ARM存儲器管理單元如果bits[1:0]=0b10時,該頁表項(xiàng)為段描述符(Section

Descriptor),段描述符定義了對應(yīng)的1MB的虛擬存儲空間的地址映射關(guān)系。

如果bits[1:0]=0b01時,該頁表項(xiàng)包含了粗二級頁表的物理地址。該粗二級頁表定義了對應(yīng)的1MB虛擬存儲空間的地址映射關(guān)系。它可以實(shí)現(xiàn)以大頁和小頁為單位的地址映射。

如果bits[1:0]=0b11時,該頁表項(xiàng)包含了細(xì)二級頁表的物理地址。該細(xì)二級頁表定義了對應(yīng)的1MB虛擬存儲空間的地址映射關(guān)系。它可以實(shí)現(xiàn)以大頁、小頁和極小頁為單位的地址映射。

如果bits[1:0]=0b00時,說明此頁表項(xiàng)是一個錯誤頁表項(xiàng)。它將產(chǎn)生一個存儲頁錯誤。錯誤條件會導(dǎo)致預(yù)取指令中止或數(shù)據(jù)中止,這取決于具體的存儲器訪問類型。27基于段地址的映射示意圖ARM存儲器管理單元28處理器主頻較高,通常為幾十兆甚至幾百兆,而一般存儲器(DRAM)的存儲周期為100~200ns。存儲器的速度嚴(yán)重制約著系統(tǒng)的性能。高速緩沖存儲器(cache)是一個硬件部件,對我們來說是透明的。Cache與主存儲器間以塊(cacheline)為單位進(jìn)行數(shù)據(jù)交換。Cache的存取速度遠(yuǎn)遠(yuǎn)大于主存儲器的速度,存儲器訪問的時間局部性決定了采用Cache后,系統(tǒng)的整體性能可以得到大大提高。高速緩沖區(qū)和寫緩沖區(qū)29Cache的工作原理高速緩沖區(qū)和寫緩沖區(qū)30Cache的工作原理在Cache存儲系統(tǒng)中,把Cache和主存劃分為相同大小的塊。主存地址可以使用塊號(B)和塊內(nèi)地址(W)兩部分組成。同樣Cache的地址也可以使用塊號(B)和塊內(nèi)地址(W)兩部分組成。命中率:當(dāng)CPU訪問存儲器時,通過存儲器地址變換部件把地址變換成cache的塊號和塊內(nèi)地址,如果變換成功(稱為cache命中),就用得到的cache地址訪問cache,從cache中取數(shù);如果變換失敗,則產(chǎn)生cache失效信息,并用主存儲器的地址訪問主存儲器,同時將包含被訪問字在內(nèi)的一整塊都從主存儲器讀出來,裝入到cache中,但如果這時cache已滿,需要采用適當(dāng)?shù)奶鎿Q算法來更新cache。高速緩沖區(qū)和寫緩沖區(qū)31Cache的地址映象和變換方法地址映象指把主存地址空間映象到cache地址空間,具體說就是把存放在主存中的程序按照某種規(guī)則裝入到cache中,并建立主存地址到cache地址之間的對應(yīng)關(guān)系。地址變換是指當(dāng)程序已經(jīng)裝入到cache中后(形成地址映象),在實(shí)際運(yùn)行過程中,把主存地址如何變換成cache地址。地址映象和變換是密切相關(guān)的,算法需要統(tǒng)一。但所有方法都將主存和cache劃分為同樣大小的存儲單元(稱為塊),在進(jìn)行變換時都是以塊為單位。地址映象和變換方法包括:全相聯(lián)映象、直接映象、組相聯(lián)映象三種方法。高速緩沖區(qū)和寫緩沖區(qū)32地址映象和變換方法-全相聯(lián)映象方式主存中任意一塊可以映射到cache中的任意一塊的位置上。如果cache的塊容量為C,主存的塊容量為M,則兩則之間的映象關(guān)系有C*M中,如果采用目錄表來存放這些映象關(guān)系,目錄表的容量為C。高速緩沖區(qū)和寫緩沖區(qū)缺點(diǎn):電路設(shè)計(jì)難以實(shí)現(xiàn)33地址映象和變換方法-直接映象方式這是最簡單也是最直接的方法。主存中一塊只能映象到cache中的一個特定的塊中。假設(shè)主存的塊號為B,cache的塊號為b,則他們之間的映象關(guān)系可以使用下面的公式表示:

b=BmodeCb

其中Cb為cache的塊容量高速緩沖區(qū)和寫緩沖區(qū)34地址映象和變換方法-組相聯(lián)映象方式在這種方式下,把主存和cache按照同樣大小劃分成組,每個組都由相同的塊數(shù)組成。這樣,主存的組數(shù)要比cache的組數(shù)多;主存的組與cache的組之間采用直接映象的方式;在兩個對應(yīng)的組之間采用全相聯(lián)映象方式。高速緩沖區(qū)和寫緩沖區(qū)35Cache的分類統(tǒng)一/獨(dú)立的數(shù)據(jù)和指令cache

適應(yīng)獨(dú)立的數(shù)據(jù)和指令cache,可以在同一個時鐘周期中讀取指令和數(shù)據(jù),而不需要雙端口的cache。但這時需要保證指令和數(shù)據(jù)的一致性。寫回和寫通cache

寫回cache指執(zhí)行寫操作時,被寫的數(shù)據(jù)只寫入cache,僅當(dāng)cache需要被替換時才將數(shù)據(jù)寫入到實(shí)際的存儲器中; 寫通則是在指執(zhí)行寫操作時,同時向cache和存儲器執(zhí)行寫操作,從而保證數(shù)據(jù)的一致性。高速緩沖區(qū)和寫緩沖區(qū)36Cache替換算法隨機(jī)替換算法和輪轉(zhuǎn)法隨機(jī)替換算法通過一個隨機(jī)數(shù)發(fā)生器產(chǎn)生隨機(jī)數(shù),用新塊將編號為該隨機(jī)數(shù)的塊進(jìn)行替換。輪轉(zhuǎn)法維護(hù)一個邏輯的計(jì)數(shù)器,利用該計(jì)數(shù)器依次選擇將要被替換出去的cache塊。高速緩沖區(qū)和寫緩沖區(qū)37Cache的編程接口與cache和寫緩沖區(qū)相關(guān)的寄存器包括CP15中的寄存器C7、寄存器C9以及寄存器C1中的某些位。MCRP15,0,<Rd>,<C1>,<CRm>,<Op2>MCRP15,0,<Rd>,<C7>,<CRm>,<Op2>MCRP15,0,<Rd>,<C9>,c0,<Op2>MRCP15,0,<Rd>,<C1>,<CRm>,<Op2>MRCP15,0,<Rd>,<C7>,<CRm>,<Op2>MRCP15,0,<Rd>,<C9>,c0,<Op2>高速緩沖區(qū)和寫緩沖區(qū)38快速上下文切換技術(shù)通過修改系統(tǒng)中不同進(jìn)程的虛擬地址,避免在進(jìn)行進(jìn)程間切換時造成的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能??焖偕舷挛那袚Q技術(shù)39快速上下文切換技術(shù)原理(FCSE)如果兩個進(jìn)程占用的虛擬地址空間有重疊,系統(tǒng)在這兩個進(jìn)程之間進(jìn)行切換時,必須進(jìn)行虛擬地址到物理地址的重映射,包括重建TLB,清除cache,整個工作需要帶來巨大的系統(tǒng)開銷。而快速上下文切換技術(shù)的引入避免了這種開銷。FCSE位于CPU和MMU之間,他的責(zé)任就是將不同進(jìn)程使用的相同的虛擬地址映射為不同的虛擬空間,使得在上下文切換時無需重建TLB等。 如果兩個進(jìn)程使用了同樣的虛擬地址空間,則對CPU而言,兩個進(jìn)程使用了同樣的虛擬地址空間,F(xiàn)CSE機(jī)構(gòu)對各個進(jìn)程的虛擬地址進(jìn)行變換,這樣系統(tǒng)中除了CPU之外的部分看到的是經(jīng)過上下文切換機(jī)構(gòu)變換后的虛擬地址。快速上下文切換技術(shù)40在ARM系統(tǒng)中,4G的虛擬地址空間被分成128個進(jìn)程空間塊,每個空間塊中可以包含一個進(jìn)程,該進(jìn)程可以使用的虛擬地址空間為0~0x01ff’ffff。編號為I的進(jìn)程空間塊中的進(jìn)程實(shí)際使用的虛擬地址空間為: (I*0x0200’0000)~(I*0x0200’0000+0x01ffffff)快速上下文切換技術(shù)原理(FCSE)快速上下文切換技術(shù)助記符說明操作條件碼位置STRRd,addressing存儲字?jǐn)?shù)據(jù)[addressing]←Rd,addressing索引STR{cond}STRBRd,addressing存儲字節(jié)數(shù)據(jù)[addressing]←Rd,addressing索引STR{cond}BSTRTRd,addressing以用戶模式存儲字?jǐn)?shù)據(jù)[addressing]←Rd,

addressing索引STR{cond}TSTRBTRd,addressing以用戶模式存儲字節(jié)數(shù)據(jù)[addressing]←Rd,addressing索引STR{cond}BTSTRHRd,addressing存儲半字?jǐn)?shù)據(jù)[addressing]←Rd,addressing索引STR{cond}HARM存儲器訪問指令——單寄存器存儲LDR/STR指令用于對內(nèi)存變量的訪問、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問、查表、外圍部件的控制操作等。若使用LDR指令加載數(shù)據(jù)到PC寄存器,則實(shí)現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。所有單寄存器加載/存儲指令可分為“字和無符號字節(jié)加載存儲指令”和“半字和有符號字節(jié)加載存儲指令。LDR和STR——字和無符號字節(jié)加載/存儲指令

LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中,STR指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:ARM存儲器訪問指令——單寄存器存儲LDR{cond}{T} Rd,<地址>;將指定地址上的字?jǐn)?shù)據(jù)讀入RdSTR{cond}{T} Rd,<地址>;將Rd中的字?jǐn)?shù)據(jù)存入指定地址

LDR{cond}B{T} Rd,<地址>;將指定地址上的字節(jié)數(shù)據(jù)讀入RdSTR{cond}B{T} Rd,<地址>;將Rd中的字節(jié)數(shù)據(jù)存入指定地址

其中,T為可選后綴。若指令有T,那么即使處理器是在特權(quán)模式下,存儲系統(tǒng)也將訪問看成是在用戶模式下進(jìn)行的。T在用戶模式下無效,不能與前索引偏移一起使用T。ARM存儲器訪問指令——單寄存器存儲LDR和STR——字和無符號字節(jié)加載/存儲指令編碼指令執(zhí)行的條件碼I為0時,偏移量為12位立即數(shù),為1時,偏移量為寄存器移位P表示前/后變址U表示加/減B為1表示字節(jié)訪問,為0表示字訪問W表示回寫為指令的尋址方式Rd為源/目標(biāo)寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)ARM存儲器訪問指令——單寄存器存儲LDR和STR——字和無符號字節(jié)加載/存儲指令

LDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個基址寄存器,可以為任一個通用寄存器;另一部分為一個地址偏移量。地址偏移量有以下3種格式:立即數(shù)。立即數(shù)可以是一個無符號的數(shù)值。這個數(shù)據(jù)可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,#0x12]

;R1<-[R0+0x12]寄存器。寄存器中的數(shù)值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,R2]

;

R1<-[R0+R2]

LDRR1,[R0,-R2];R1<-[R0-R2]寄存器及移位常數(shù)。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數(shù)值。如:LDRR1,[R0,R2,LSL#2]

;R1<-[R0+R2*4]

ARM存儲器訪問指令——單寄存器存儲

從尋址方式的地址計(jì)算方法分,加載/存儲指令有以下4種格式:零偏移。 如:LDRRd,[Rn]

前索引偏移。 如:LDRRd,[Rn,#0x04]!程序相對偏移。 如:LDRRd,labe1

后索引偏移。 如:LDRRd,[Rn],#-0x04注意:必須保證字?jǐn)?shù)據(jù)操作的地址是32位對齊的。LDR和STR——字和無符號字節(jié)加載/存儲指令LDR和STR——半字和有符號字節(jié)加載/存儲指令

這類LDR/STR指令可加載有符號半字或字節(jié),可加載/存儲無符號半字。偏移量格式、尋址方式與加載/存儲字和無符號字節(jié)指令相同。ARM存儲器訪問指令——單寄存器存儲LDR{cond}SBRd,<地址>;將指定地址上的有符號字節(jié)讀入RdLDR{cond}SHRd,<地址>;將指定地址上的有符號半字讀入RdLDR{cond}HRd,<地址>;將指定地址上的半字?jǐn)?shù)據(jù)讀入RdSTR{cond}HRd,<地址>;將Rd中的半字?jǐn)?shù)據(jù)存入指定地址注意:1.有符號位半字/字節(jié)加載是指用符號位加載擴(kuò)展到32位,無符號半字加載是指用零擴(kuò)展到32位;2.半字讀寫的指定地址必須為偶數(shù),否則將產(chǎn)生不可靠的結(jié)果;ARM存儲器訪問指令——單寄存器存儲LDR和STR——半字和有符號字節(jié)加載/存儲指令編碼指令執(zhí)行的條件碼I為0時,偏移量為12位立即數(shù),為1時,偏移量為寄存器移位P表示前/后變址U表示加/減W表示回寫為指令的尋址方式Rd為源/目標(biāo)寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)S為1表示有符號訪問,為0表示無符號訪問H為1表示半字訪問,為0表示字節(jié)訪問LDR和STR指令應(yīng)用示例:1.加載/存儲字和無符號字節(jié)指令LDR R2,[R5] ;將R5指向地址的字?jǐn)?shù)據(jù)存入R2STR R1,[R0,#0x04] ;將R1的數(shù)據(jù)存儲到R0+0x04地址LDRB R3,[R2],#-1 ;將R2指向地址的字節(jié)數(shù)據(jù)存入R3,R2=R2-1STRB R0,[R3,-R8ASR#2];R0->[R3-R8/4],存儲R0的最低有效字節(jié)2.加載/存儲半字和有符號字節(jié)指令LDRSBR1,[R0,R3] ;將R0+R3地址上的字節(jié)數(shù)據(jù)存入R1,

;高24位用符號擴(kuò)展LDRHR6,[R2],#2 ;將R2指向地址的半字?jǐn)?shù)據(jù)存入R6,高16位用0擴(kuò)展

;讀出后,R2=R2+2STRHR1,[R0,#2]! ;將R1的半字?jǐn)?shù)據(jù)保存到R0+2地址,

;只修改低2字節(jié)數(shù)據(jù),然后R0=R0+2ARM存儲器訪問指令——單寄存器存儲(3)LDR和STR雙字:加載/存儲兩個相鄰的寄存器,64位雙字。其句法有4種:Op{cond}DRd,[Rn]零偏移Op{cond}DRd,[Rn,offset]{!}前索引偏移Op{cond}DRd,label程序相對偏移Op{cond}D{T}Rd,[Rn],offset后索引偏移

ARM存儲器訪問指令——單寄存器存儲

其中:

Rd加載/存儲寄存器中的一個,另一個是R(d+1)。Rd必須是偶數(shù)寄存器,且不是R14。

Rn除非指令為零偏移,或不帶寫回的前索引,否則,Rn不允許與Rd和R(d+1)相同。labellabel必須是在當(dāng)前指令的上下252字節(jié)范圍內(nèi)。例如:LDRDR6,[R11];R6←[R11],R7←[R11+4]STRDR4,[R9,#24];R4→[R9+24],R5→[R9+28]ARM存儲器訪問指令——單寄存器存儲助記符說明操作條件碼位置LDM{mode}Rn{!},reglist多寄存器加載reglist←[Rn...],Rn回寫等LDM{cond}{mode}STM{mode}Rn{!},reglist多寄存器存儲[Rn...]←reglist,Rn回寫等STM{cond}{mode}ARM存儲器訪問指令——多寄存器存取

多寄存器加載/存儲指令可以實(shí)現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個寄存器;STM為存儲多個寄存器。允許一條指令傳送16個寄存器的任何子集或所有寄存器。它們主要用于現(xiàn)場保護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳遞等。ARM存儲器訪問指令——多寄存器存取

多寄存器加載/存儲指令格式如下:LDM{cond}<模式>Rn{!},reglist{^}STM{cond}<模式>Rn{!},reglist{^}cond:指令執(zhí)行的條件;模式:控制地址的增長方式,一共有8種模式;!:表示在操作結(jié)束后,將最后的地址寫回Rn中;reglist

:表示寄存器列表,可以包含多個寄存器,它們使用“,”隔開,如{R1,R2,R6-R9},寄存器由小到大排列;^:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個功能:1)若op是LDM且寄存器列表包含R15時,那么除了正常的多寄存器傳送外,還將SPSR也復(fù)制到CPSR中。這用于異常處理返回,僅在異常模式下使用。2)數(shù)據(jù)傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式的寄存器。ARM存儲器訪問指令——多寄存器存取LDM和STM——多寄存器加載/存儲指令編碼指令執(zhí)行的條件碼S對應(yīng)于指令中的”^”符號P表示前/后變址U表示加/減W表示回寫寄存器列表Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)ARM存儲器訪問指令——多寄存器存取

多寄存器加載/存儲指令的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。模式說明模式說明IA每次傳送后地址加4FD滿遞減堆棧IB每次傳送前地址加4ED空遞減堆棧DA每次傳送后地址減4FA滿遞增堆棧DB每次傳送前地址減4EA空遞增堆棧數(shù)據(jù)塊傳送操作堆棧操作

進(jìn)行數(shù)據(jù)復(fù)制時,先設(shè)置好源數(shù)據(jù)指針和目標(biāo)指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進(jìn)行讀取和存儲。進(jìn)行堆棧操作操作時,要先設(shè)置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實(shí)現(xiàn)堆棧操作。ARM存儲器訪問指令——多寄存器存取數(shù)據(jù)塊傳送指令操作過程如右圖所示,其中R1為指令執(zhí)行前的基址寄存器,R1’則為指令執(zhí)行后的基址寄存器。R5R6R7R1R1’指令STMIAR1!,{R5-R7}4008H4004H4000H4014H4010H400CHR5R6R7R1R1’指令STMDAR1!,{R5-R7}40

溫馨提示

  • 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

提交評論