




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十三講ARM存儲機制河南大學計算機與信息工程學院授課人:金勇聯(lián)系電話mail:jy@計算機專業(yè)核心課程之一ARM存儲系統(tǒng)概述快速上下文切換技術高速緩沖區(qū)和寫緩沖區(qū)ARM存儲器管理單元ARM存儲機制ARM存儲器訪問指令3ARM存儲系統(tǒng)概述與其他中低檔單片機不同,ARM處理器中一般都包含一個存儲器管理部件,用于對存儲器的管理。為了適應不同的嵌入式應用,ARM存儲系統(tǒng)的體系結構存在很多差別。簡單的可以使用像單片機系統(tǒng)中使用的平板式地址映射機制即可;而一些復雜的系統(tǒng)中則可能包含多種技術來提供功能強大的存儲系統(tǒng)。4系統(tǒng)中可能包含多種類型的存儲器件,如FLASH、ROM、SDRAM、SRAM等;而且不同類型的存儲器件要求不同的速度、數據寬度等;通過CACHE和WRITEBUFFER技術縮小處理器和存儲系統(tǒng)速度差別,從而提高系統(tǒng)性能;內存管理部件使用內存映射技術實現(xiàn)虛擬空間到物理空間的映射。引入存儲保護機制,增強系統(tǒng)的安全性;引入一些機制保證I/O操作映射成內存操作后,各種I/O操作能夠得到正確的結果。ARM存儲系統(tǒng)概述5S3C2410X的存儲器管理器提供訪問外部存儲器的所有控制信號:27位地址信號、32位數據信號、8個片選信號、以及讀/寫控制信號等。S3C2410X的存儲空間分成8組,最大容量是1GB,bank0bank5為固定128MB,bank6和bank7的容量可編程改變,可以是2、4、8、16、32、64、128MB,并且bank7的開始地址與bank6的結束地址相連接,但是二者的容量必須相等。bank0可以作為引導ROM,其數據線寬只能是16位和32位,復位時由OM0、OM1引腳確定;其它存儲器的數據線寬可以是8位、16位和32位。S3C2410X的存儲器格式,可以編程設置為大端格式,也可以設置為小端格式。ARM存儲器管理單元6S3C2410X存儲器組織示意圖ARM存儲器管理單元ARM存儲器管理單元寄存器地址功能操作復位值BWSCON0x48000000總線寬度和等待控制讀/寫0x0BANKCON00x48000004BANK0控制讀/寫0x0700BANKCON10x48000008BANK1控制讀/寫0x0700BANKCON20x4800000CBANK2控制讀/寫0x0700BANKCON30x48000010BANK3控制讀/寫0x0700BANKCON40x48000014BANK4控制讀/寫0x0700BANKCON50x48000018BANK5控制讀/寫0x0700BANKCON60x4800001CBANK6控制讀/寫0x18008BANKCON70x48000020BANK7控制讀/寫0x18008REFRESH0x48000024SDRAM刷新控制讀/寫0xAC0000BANKSIZE0x48000028可變的組大小設置讀/寫0x0MRSRB60x4800002CBANK6模式設置讀/寫xxxMRSRB70x48000030BANK7模式設置讀/寫xxx13個控制寄存器為訪問外部存儲空間提供存儲器控制信號。8用于存儲管理的系統(tǒng)控制協(xié)處理寄存器CP15在基于ARM的嵌入式系統(tǒng)中,存儲系統(tǒng)通常使用CP15來完成存儲器的大部分管理工作;除了CP15之外,在具體的存儲機制中可能還會用到其他技術如:頁表技術等。CP15可以保護16個32位的寄存器,編號0-15。實際上對于某些編號的寄存器可能對應有多個物理寄存器,在指令中指定特定的標志位來區(qū)分相應的寄存器。ARM存儲器管理單元CP15寄存器列表-1寄存器編號基本作用在MMU中的作用0ID編碼(只讀)ID碼和Cache類型1控制位各種控制位2存儲保護和控制地址轉換表基地址3存儲保護和控制域訪問控制位4存儲保護和控制保留5存儲保護和控制內存失效狀態(tài)6存儲保護和控制內存失效地址ARM存儲器管理單元CP15寄存器列表-2寄存器編號基本作用在MMU中的作用7高速緩存和寫緩存高速緩存和寫緩存控制8存儲保護和控制TLB控制9高速緩存和寫緩存高速緩存鎖定10存儲保護和控制TLB鎖定11保留
12保留
ARM存儲器管理單元11CP15寄存器列表-3寄存器編號基本作用在MMU中的作用13進程標識符進程標識符14保留
15因不同設計而異因不同設計而異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é)處理器的目標寄存器,可以是C0-15;CRm是附加的目標寄存器或源操作數寄存器,用于區(qū)分同一編號的不同物理寄存器,當指令中不需要附加信息時要將C0指定為CRm;OP2也提供附加信息,用于區(qū)分同一編號的不同物理寄存器,當指令中不需要附加信息時,可以省略或者將其置0。ARM存儲器管理單元14MCR訪問CP15示例 MCR P15,0,R4,C1,C0,0上述指令從ARM寄存器R4中將數據傳送到協(xié)處理器CP15的寄存器C1中。其中R4為ARM寄存器,存放源操作數;C1和C0為協(xié)處理器寄存器,為目標寄存器;操作碼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為目標寄存器,指令處理的結果將存放在該寄存器中;CRn是協(xié)處理器寄存器,存放第一個源操作數;CRm是附加的源操作數寄存器,用于區(qū)分同一編號的不同物理寄存器,當指令中不需要附加信息時要將C0指定為CRm;OP2也提供附加信息,用于區(qū)分同一編號的不同物理寄存器,當指令中不需要附加信息時,可以省略或者將其置0。ARM存儲器管理單元16存儲管理單元MMU的作用實現(xiàn)虛擬地址空間到物理存儲空間的映射;存儲器訪問權限的控制;設置虛擬存儲空間的緩沖特性。
頁表是實現(xiàn)上述功能的一個重要手段,它實際上是位于內存中的一個對照表。ARM存儲器管理單元17存儲器單元的段頁式管理為了實現(xiàn)不同層次的管理,系統(tǒng)提供了基于段或頁的存儲器訪問方式段(section):由1MB的存儲器塊構成
大頁(largepage):由64KB的存儲器塊構成
小頁(smallpage):由4KB的存儲器塊構成
微頁(tinypage):由1KB的存儲器塊構成ARM存儲器管理單元18用于存儲管理的頁表地址變換條目:頁表的每一行對應與虛擬地址空間的一個頁,該行同時保含了該虛擬內存頁對應的物理內存頁的地址、該頁的訪問權限以及緩沖特性等。我們將頁表中的一行稱為地址變換條目。頁表存放在內存中,系統(tǒng)通常有一個寄存器來保存頁表的基地址。ARM系統(tǒng)中使用的就是CP15的寄存器C2??毂恚簭奶摂M地址到物理地址的轉換實際上就是查詢頁表的過程。由于程序在執(zhí)行過程中具有局部性,即在一段時間內只是局限在少數幾個單元,為了加快頁表的查詢速度,在系統(tǒng)中通常使用一個容量更小、速度更快的存儲器件來保存當前需要訪問的地址變換條目,這個容量小的頁表又稱作快表(TLB)。ARM存儲器管理單元19快表的使用更新:當CPU需要訪問內存時,首先在TLB中查找需要的地址變換條目。若不存在則在內存頁表中查詢,并把查詢的結果添加到TLB中。清除:當內存中頁表的內容改變或者使用新的頁表時,TLB中的內容需要清空。CP15的寄存器8用于完成該功能。鎖定:可以將一個地址變換條目鎖定在TLB中,以加快訪問速度,CP15的寄存器10用于完成該功能。ARM存儲器管理單元20域(domain)管理域是段、大頁和小頁的集合。ARM結構支持16個域。對域的訪問由域訪問控制寄存器(CP15的寄存器3)的兩個位字段控制。因為每個字段對訪問對應的域的使能非常迅速,所以整個存儲器區(qū)間能很快地交換進出虛擬存儲器。這里支持2種域訪問方式客戶:域的用戶(執(zhí)行程序,訪問數據),被形成這個域的節(jié)或頁來監(jiān)督訪問權限。管理者:控制域的行為(域中的當前段和頁,對域的訪問),不被形成這個域的段或頁來監(jiān)督訪問權限。一個程序可以是一些域的客戶,也是另外一些域的管理者,同時沒有對其它域的訪問權限。這允許對程序訪問不同存儲器資源的非常靈活的存儲器保護。ARM存儲器管理單元21內存訪問失效管理當存儲器訪問失敗時,MMU單元提供了相應的機制用于處理這種情況。CP15的寄存器5和寄存器6用于完成該功能。ARM存儲器管理單元22寄存器1的MMU控制位M(bit[0])使能MMU0=禁止MMU1=允許MMU在沒有MMU和保護單元的系統(tǒ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地址變換過程虛擬存儲空間到物理存儲空間的映射是以內存塊為單位進行的。在MMU中采用兩級頁表實現(xiàn)上述地址映射:一級頁表中包含有以段為單位的地址變換條目以及指向二級頁表的指針。一級頁表實現(xiàn)的地址映射粒度較大;二級頁表中包含以大頁和小頁為單位的地址變換條目。其中一種類型的二級表還包含有極小頁為單位的地址變換條目。ARM存儲器管理單元25基于一級頁表的地址變換ARM存儲器管理單元26一級頁表描述符可能的格式ARM存儲器管理單元如果bits[1:0]=0b10時,該頁表項為段描述符(Section
Descriptor),段描述符定義了對應的1MB的虛擬存儲空間的地址映射關系。
如果bits[1:0]=0b01時,該頁表項包含了粗二級頁表的物理地址。該粗二級頁表定義了對應的1MB虛擬存儲空間的地址映射關系。它可以實現(xiàn)以大頁和小頁為單位的地址映射。
如果bits[1:0]=0b11時,該頁表項包含了細二級頁表的物理地址。該細二級頁表定義了對應的1MB虛擬存儲空間的地址映射關系。它可以實現(xiàn)以大頁、小頁和極小頁為單位的地址映射。
如果bits[1:0]=0b00時,說明此頁表項是一個錯誤頁表項。它將產生一個存儲頁錯誤。錯誤條件會導致預取指令中止或數據中止,這取決于具體的存儲器訪問類型。27基于段地址的映射示意圖ARM存儲器管理單元28處理器主頻較高,通常為幾十兆甚至幾百兆,而一般存儲器(DRAM)的存儲周期為100~200ns。存儲器的速度嚴重制約著系統(tǒng)的性能。高速緩沖存儲器(cache)是一個硬件部件,對我們來說是透明的。Cache與主存儲器間以塊(cacheline)為單位進行數據交換。Cache的存取速度遠遠大于主存儲器的速度,存儲器訪問的時間局部性決定了采用Cache后,系統(tǒng)的整體性能可以得到大大提高。高速緩沖區(qū)和寫緩沖區(qū)29Cache的工作原理高速緩沖區(qū)和寫緩沖區(qū)30Cache的工作原理在Cache存儲系統(tǒng)中,把Cache和主存劃分為相同大小的塊。主存地址可以使用塊號(B)和塊內地址(W)兩部分組成。同樣Cache的地址也可以使用塊號(B)和塊內地址(W)兩部分組成。命中率:當CPU訪問存儲器時,通過存儲器地址變換部件把地址變換成cache的塊號和塊內地址,如果變換成功(稱為cache命中),就用得到的cache地址訪問cache,從cache中取數;如果變換失敗,則產生cache失效信息,并用主存儲器的地址訪問主存儲器,同時將包含被訪問字在內的一整塊都從主存儲器讀出來,裝入到cache中,但如果這時cache已滿,需要采用適當的替換算法來更新cache。高速緩沖區(qū)和寫緩沖區(qū)31Cache的地址映象和變換方法地址映象指把主存地址空間映象到cache地址空間,具體說就是把存放在主存中的程序按照某種規(guī)則裝入到cache中,并建立主存地址到cache地址之間的對應關系。地址變換是指當程序已經裝入到cache中后(形成地址映象),在實際運行過程中,把主存地址如何變換成cache地址。地址映象和變換是密切相關的,算法需要統(tǒng)一。但所有方法都將主存和cache劃分為同樣大小的存儲單元(稱為塊),在進行變換時都是以塊為單位。地址映象和變換方法包括:全相聯(lián)映象、直接映象、組相聯(lián)映象三種方法。高速緩沖區(qū)和寫緩沖區(qū)32地址映象和變換方法-全相聯(lián)映象方式主存中任意一塊可以映射到cache中的任意一塊的位置上。如果cache的塊容量為C,主存的塊容量為M,則兩則之間的映象關系有C*M中,如果采用目錄表來存放這些映象關系,目錄表的容量為C。高速緩沖區(qū)和寫緩沖區(qū)缺點:電路設計難以實現(xiàn)33地址映象和變換方法-直接映象方式這是最簡單也是最直接的方法。主存中一塊只能映象到cache中的一個特定的塊中。假設主存的塊號為B,cache的塊號為b,則他們之間的映象關系可以使用下面的公式表示:
b=BmodeCb
其中Cb為cache的塊容量高速緩沖區(qū)和寫緩沖區(qū)34地址映象和變換方法-組相聯(lián)映象方式在這種方式下,把主存和cache按照同樣大小劃分成組,每個組都由相同的塊數組成。這樣,主存的組數要比cache的組數多;主存的組與cache的組之間采用直接映象的方式;在兩個對應的組之間采用全相聯(lián)映象方式。高速緩沖區(qū)和寫緩沖區(qū)35Cache的分類統(tǒng)一/獨立的數據和指令cache
適應獨立的數據和指令cache,可以在同一個時鐘周期中讀取指令和數據,而不需要雙端口的cache。但這時需要保證指令和數據的一致性。寫回和寫通cache
寫回cache指執(zhí)行寫操作時,被寫的數據只寫入cache,僅當cache需要被替換時才將數據寫入到實際的存儲器中; 寫通則是在指執(zhí)行寫操作時,同時向cache和存儲器執(zhí)行寫操作,從而保證數據的一致性。高速緩沖區(qū)和寫緩沖區(qū)36Cache替換算法隨機替換算法和輪轉法隨機替換算法通過一個隨機數發(fā)生器產生隨機數,用新塊將編號為該隨機數的塊進行替換。輪轉法維護一個邏輯的計數器,利用該計數器依次選擇將要被替換出去的cache塊。高速緩沖區(qū)和寫緩沖區(qū)37Cache的編程接口與cache和寫緩沖區(qū)相關的寄存器包括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快速上下文切換技術通過修改系統(tǒng)中不同進程的虛擬地址,避免在進行進程間切換時造成的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能??焖偕舷挛那袚Q技術39快速上下文切換技術原理(FCSE)如果兩個進程占用的虛擬地址空間有重疊,系統(tǒng)在這兩個進程之間進行切換時,必須進行虛擬地址到物理地址的重映射,包括重建TLB,清除cache,整個工作需要帶來巨大的系統(tǒng)開銷。而快速上下文切換技術的引入避免了這種開銷。FCSE位于CPU和MMU之間,他的責任就是將不同進程使用的相同的虛擬地址映射為不同的虛擬空間,使得在上下文切換時無需重建TLB等。 如果兩個進程使用了同樣的虛擬地址空間,則對CPU而言,兩個進程使用了同樣的虛擬地址空間,F(xiàn)CSE機構對各個進程的虛擬地址進行變換,這樣系統(tǒng)中除了CPU之外的部分看到的是經過上下文切換機構變換后的虛擬地址??焖偕舷挛那袚Q技術40在ARM系統(tǒng)中,4G的虛擬地址空間被分成128個進程空間塊,每個空間塊中可以包含一個進程,該進程可以使用的虛擬地址空間為0~0x01ff’ffff。編號為I的進程空間塊中的進程實際使用的虛擬地址空間為: (I*0x0200’0000)~(I*0x0200’0000+0x01ffffff)快速上下文切換技術原理(FCSE)快速上下文切換技術助記符說明操作條件碼位置STRRd,addressing存儲字數據[addressing]←Rd,addressing索引STR{cond}STRBRd,addressing存儲字節(jié)數據[addressing]←Rd,addressing索引STR{cond}BSTRTRd,addressing以用戶模式存儲字數據[addressing]←Rd,
addressing索引STR{cond}TSTRBTRd,addressing以用戶模式存儲字節(jié)數據[addressing]←Rd,addressing索引STR{cond}BTSTRHRd,addressing存儲半字數據[addressing]←Rd,addressing索引STR{cond}HARM存儲器訪問指令——單寄存器存儲LDR/STR指令用于對內存變量的訪問、內存緩沖區(qū)數據的訪問、查表、外圍部件的控制操作等。若使用LDR指令加載數據到PC寄存器,則實現(xiàn)程序跳轉功能,這樣也就實現(xiàn)了程序散轉。所有單寄存器加載/存儲指令可分為“字和無符號字節(jié)加載存儲指令”和“半字和有符號字節(jié)加載存儲指令。LDR和STR——字和無符號字節(jié)加載/存儲指令
LDR指令用于從內存中讀取單一字或字節(jié)數據存入寄存器中,STR指令用于將寄存器中的單一字或字節(jié)數據保存到內存。指令格式如下:ARM存儲器訪問指令——單寄存器存儲LDR{cond}{T} Rd,<地址>;將指定地址上的字數據讀入RdSTR{cond}{T} Rd,<地址>;將Rd中的字數據存入指定地址
LDR{cond}B{T} Rd,<地址>;將指定地址上的字節(jié)數據讀入RdSTR{cond}B{T} Rd,<地址>;將Rd中的字節(jié)數據存入指定地址
其中,T為可選后綴。若指令有T,那么即使處理器是在特權模式下,存儲系統(tǒng)也將訪問看成是在用戶模式下進行的。T在用戶模式下無效,不能與前索引偏移一起使用T。ARM存儲器訪問指令——單寄存器存儲LDR和STR——字和無符號字節(jié)加載/存儲指令編碼指令執(zhí)行的條件碼I為0時,偏移量為12位立即數,為1時,偏移量為寄存器移位P表示前/后變址U表示加/減B為1表示字節(jié)訪問,為0表示字訪問W表示回寫為指令的尋址方式Rd為源/目標寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)ARM存儲器訪問指令——單寄存器存儲LDR和STR——字和無符號字節(jié)加載/存儲指令
LDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個基址寄存器,可以為任一個通用寄存器;另一部分為一個地址偏移量。地址偏移量有以下3種格式:立即數。立即數可以是一個無符號的數值。這個數據可以加到基址寄存器,也可以從基址寄存器中減去這個數值。如:LDRR1,[R0,#0x12]
;R1<-[R0+0x12]寄存器。寄存器中的數值可以加到基址寄存器,也可以從基址寄存器中減去這個數值。如:LDRR1,[R0,R2]
;
R1<-[R0+R2]
LDRR1,[R0,-R2];R1<-[R0-R2]寄存器及移位常數。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數值。如:LDRR1,[R0,R2,LSL#2]
;R1<-[R0+R2*4]
ARM存儲器訪問指令——單寄存器存儲
從尋址方式的地址計算方法分,加載/存儲指令有以下4種格式:零偏移。 如:LDRRd,[Rn]
前索引偏移。 如:LDRRd,[Rn,#0x04]!程序相對偏移。 如:LDRRd,labe1
后索引偏移。 如:LDRRd,[Rn],#-0x04注意:必須保證字數據操作的地址是32位對齊的。LDR和STR——字和無符號字節(jié)加載/存儲指令LDR和STR——半字和有符號字節(jié)加載/存儲指令
這類LDR/STR指令可加載有符號半字或字節(jié),可加載/存儲無符號半字。偏移量格式、尋址方式與加載/存儲字和無符號字節(jié)指令相同。ARM存儲器訪問指令——單寄存器存儲LDR{cond}SBRd,<地址>;將指定地址上的有符號字節(jié)讀入RdLDR{cond}SHRd,<地址>;將指定地址上的有符號半字讀入RdLDR{cond}HRd,<地址>;將指定地址上的半字數據讀入RdSTR{cond}HRd,<地址>;將Rd中的半字數據存入指定地址注意:1.有符號位半字/字節(jié)加載是指用符號位加載擴展到32位,無符號半字加載是指用零擴展到32位;2.半字讀寫的指定地址必須為偶數,否則將產生不可靠的結果;ARM存儲器訪問指令——單寄存器存儲LDR和STR——半字和有符號字節(jié)加載/存儲指令編碼指令執(zhí)行的條件碼I為0時,偏移量為12位立即數,為1時,偏移量為寄存器移位P表示前/后變址U表示加/減W表示回寫為指令的尋址方式Rd為源/目標寄存器Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)S為1表示有符號訪問,為0表示無符號訪問H為1表示半字訪問,為0表示字節(jié)訪問LDR和STR指令應用示例:1.加載/存儲字和無符號字節(jié)指令LDR R2,[R5] ;將R5指向地址的字數據存入R2STR R1,[R0,#0x04] ;將R1的數據存儲到R0+0x04地址LDRB R3,[R2],#-1 ;將R2指向地址的字節(jié)數據存入R3,R2=R2-1STRB R0,[R3,-R8ASR#2];R0->[R3-R8/4],存儲R0的最低有效字節(jié)2.加載/存儲半字和有符號字節(jié)指令LDRSBR1,[R0,R3] ;將R0+R3地址上的字節(jié)數據存入R1,
;高24位用符號擴展LDRHR6,[R2],#2 ;將R2指向地址的半字數據存入R6,高16位用0擴展
;讀出后,R2=R2+2STRHR1,[R0,#2]! ;將R1的半字數據保存到R0+2地址,
;只修改低2字節(jié)數據,然后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必須是偶數寄存器,且不是R14。
Rn除非指令為零偏移,或不帶寫回的前索引,否則,Rn不允許與Rd和R(d+1)相同。labellabel必須是在當前指令的上下252字節(jié)范圍內。例如: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存儲器訪問指令——多寄存器存取
多寄存器加載/存儲指令可以實現(xiàn)在一組寄存器和一塊連續(xù)的內存單元之間傳輸數據。LDM為加載多個寄存器;STM為存儲多個寄存器。允許一條指令傳送16個寄存器的任何子集或所有寄存器。它們主要用于現(xiàn)場保護、數據復制、常數傳遞等。ARM存儲器訪問指令——多寄存器存取
多寄存器加載/存儲指令格式如下:LDM{cond}<模式>Rn{!},reglist{^}STM{cond}<模式>Rn{!},reglist{^}cond:指令執(zhí)行的條件;模式:控制地址的增長方式,一共有8種模式;!:表示在操作結束后,將最后的地址寫回Rn中;reglist
:表示寄存器列表,可以包含多個寄存器,它們使用“,”隔開,如{R1,R2,R6-R9},寄存器由小到大排列;^:可選后綴。允許在用戶模式或系統(tǒng)模式下使用。它有以下兩個功能:1)若op是LDM且寄存器列表包含R15時,那么除了正常的多寄存器傳送外,還將SPSR也復制到CPSR中。這用于異常處理返回,僅在異常模式下使用。2)數據傳入或傳出的是用戶模式下的寄存器,而不是當前模式的寄存器。ARM存儲器訪問指令——多寄存器存取LDM和STM——多寄存器加載/存儲指令編碼指令執(zhí)行的條件碼S對應于指令中的”^”符號P表示前/后變址U表示加/減W表示回寫寄存器列表Rn為基址寄存器L用于區(qū)別加載(L為1)或存儲(L為0)ARM存儲器訪問指令——多寄存器存取
多寄存器加載/存儲指令的8種模式如下表所示,右邊四種為堆棧操作、左邊四種為數據傳送操作。模式說明模式說明IA每次傳送后地址加4FD滿遞減堆棧IB每次傳送前地址加4ED空遞減堆棧DA每次傳送后地址減4FA滿遞增堆棧DB每次傳送前地址減4EA空遞增堆棧數據塊傳送操作堆棧操作
進行數據復制時,先設置好源數據指針和目標指針,然后使用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進行讀取和存儲。進行堆棧操作操作時,要先設置堆棧指針(SP),然后使用堆棧尋址指令STMFD/LDMFD、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實現(xiàn)堆棧操作。ARM存儲器訪問指令——多寄存器存取數據塊傳送指令操作過程如右圖所示,其中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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國銨油現(xiàn)場混裝車行業(yè)市場前景預測及投資價值評估分析報告
- 虛擬貨幣交易稅收合規(guī)補充協(xié)議
- 高端私人直升機夜視系統(tǒng)全面租賃服務協(xié)議
- 機械類租賃協(xié)議書
- 租賃合同中拆遷協(xié)議書
- 生態(tài)農業(yè)全流程委托管理協(xié)議
- 幫忙賣東西協(xié)議書
- 認購分紅股協(xié)議書
- 炸雞網紅店區(qū)域連鎖加盟及品牌管理服務協(xié)議
- 影視版權網絡獨播授權及收益分成合同
- 2025年物業(yè)合同補充協(xié)議范本:物業(yè)小區(qū)公共收益分配及使用協(xié)議3篇
- 《中醫(yī)體重管理臨床指南》
- 人教A版(2019)高中數學必修第二冊第8章 立體幾何初步-小結(2)空間中的角【課件】
- 銀行業(yè)務專家競聘述職模板
- 2025年中國鐵路廣東廣州局集團招聘筆試參考題庫含答案解析
- 一年級100以內進退位加減綜合口算題
- 2024年電動汽車薄膜電容器市場分析報告
- 《城市地下綜合管廊運行維護及安全技術標準》
- 航空母艦發(fā)展史
- 自愿放棄孩子協(xié)議書(2篇)
- 勞動精神課件教學課件
評論
0/150
提交評論