ARM體系結(jié)構(gòu)與指令集_第1頁
ARM體系結(jié)構(gòu)與指令集_第2頁
ARM體系結(jié)構(gòu)與指令集_第3頁
ARM體系結(jié)構(gòu)與指令集_第4頁
ARM體系結(jié)構(gòu)與指令集_第5頁
已閱讀5頁,還剩148頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)技術(shù)與設(shè)計(jì)第2章ARM體系結(jié)構(gòu)與指令集ARM體系結(jié)構(gòu)的特點(diǎn)2.1ARM處理器工作模式2.2寄存器組織2.3流水線2.4ARM存儲(chǔ)系統(tǒng)2.5異常2.6ARM處理器的尋址方式2.7ARM處理器的指令集2.8本章將要介紹ARM體系結(jié)構(gòu)、ARM處理器的工作模式及常用指令集等。通過本章的學(xué)習(xí),希望讀者能夠了解ARM處理器內(nèi)部的主要工作單元、基本工作原理,掌握常用指令集,并為以后的程序設(shè)計(jì)打下基礎(chǔ)。本章主要內(nèi)容:●ARM體系結(jié)構(gòu)的特點(diǎn)●ARM處理器的工作模式●寄存器組織●流水線●ARM存儲(chǔ)●異常●ARM處理器的尋址方式●ARM處理器的指令集2.1ARM體系結(jié)構(gòu)的特點(diǎn)ARM內(nèi)核采用RISC體系結(jié)構(gòu)。RISC技術(shù)的主要特點(diǎn)參見1.3節(jié)。ARM體系結(jié)構(gòu)的主要特征如下(在本書的后續(xù)章節(jié)中將對(duì)這些特征做詳細(xì)講解):(1)大量的寄存器,它們都可以用于多種用途;(2)Load/Store體系結(jié)構(gòu);(3)每條指令都條件執(zhí)行;(4)多寄存器的Load/Store指令;(5)能夠在單時(shí)鐘周期執(zhí)行的單條指令內(nèi)完成一項(xiàng)普通的移位操作和一項(xiàng)普通的ALU操作;(6)通過協(xié)處理器指令集來擴(kuò)展ARM指令集,包括在編程模式中增加了新的寄存器和數(shù)據(jù)類型。(7)如果把Thumb指令集也當(dāng)作ARM體系結(jié)構(gòu)的一部分,那么還可以加上:在Thumb體系結(jié)構(gòu)中以高密度16位壓縮形式表示指令集。2.2ARM處理器工作模式表2-1 ARM處理器的工作模式處理器工作模式簡(jiǎn)

寫描

述用戶模式(User)usr正常程序執(zhí)行模式,大部分任務(wù)執(zhí)行在這種模式下快速中斷模式(FIQ)fiq當(dāng)一個(gè)高優(yōu)先級(jí)(fast)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式,一般用于高速數(shù)據(jù)傳輸和通道處理外部中斷模式(IRQ)irq當(dāng)一個(gè)低優(yōu)先級(jí)(normal)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式,一般用于通常的中斷處理特權(quán)模式(Supervisor)svc當(dāng)復(fù)位或軟中斷指令執(zhí)行時(shí)進(jìn)入這種模式,是一種供操作系統(tǒng)使用的保護(hù)模式數(shù)據(jù)訪問中止模式(Abort)abt當(dāng)存取異常時(shí)將會(huì)進(jìn)入這種模式,用于虛擬存儲(chǔ)或存儲(chǔ)保護(hù)未定義指令中止模式(Undef)und當(dāng)執(zhí)行未定義指令時(shí)進(jìn)入這種模式,有時(shí)用于通過軟件仿真協(xié)處理器硬件的工作方式系統(tǒng)模式(System)sys使用和User模式相同寄存器集的模式,用于運(yùn)行特權(quán)級(jí)操作系統(tǒng)任務(wù)除用戶模式外的其他6種處理器模式稱為特權(quán)模式(PrivilegedModes)。在特權(quán)模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進(jìn)行處理器模式切換。其中以下5種又稱為異常模式:(1)快速中斷模式(FIQ);(2)外部中斷模式(IRQ);(3)特權(quán)模式(Supervior);(4)數(shù)據(jù)訪問中止模式(Abort);(5)未定義指令中止模式(Undef)。2.3寄存器組織ARM處理器有如下37個(gè)32位長的寄存器:(1)30個(gè)通用寄存器;(2)6個(gè)狀態(tài)寄存器:1個(gè)CPSR(CurrentProgramStatusRegister,當(dāng)前程序狀態(tài)寄存器),5個(gè)SPSR(SavedProgramStatusRegister,備份程序狀態(tài)寄存器);(3)1個(gè)PC(ProgramCounter,程序計(jì)數(shù)器)。ARM處理器共有7種不同的處理器模式,在每一種處理器模式中有一組相應(yīng)的寄存器組。表2-2列出了ARM處理器的寄存器組織概要。表2-2ARM處處理器器的寄寄存器器組織織概要要User

FIQIRQ

SVC

Undef

AbortR0UsermodeR0~R7,R15和CPSRUsermodeR0~R12,R15和CPSRUsermodeR0~R12,R15和CPSRUsermodeR0~R12,R15和CPSRUsermodeR0~R12,R15和CPSR

R1R2R3R4R5R6R7R8R8R9R9R10R10R11R11R12R12R13(SP)R13(SP)R13R13R13R13R14(LR)R14(LR)R14R14R14R14R15(PC)

CPSR

SPSRSPSRSPSRSPSRSPSR通通用用寄存存器通用寄寄存器器根據(jù)據(jù)其分分組與與否可可分為為以下下2類類。(1))未分分組寄寄存器器(theUnbankedRegister),,包括括R0~R7。。(2))分組組寄存存器((theBankedRegister)),包包括R8~~R14。。未分分組組寄寄存存器器包包括括R0~~R7。。未分分組組寄寄存存器器沒沒有有被被系系統(tǒng)統(tǒng)用用于于特特殊殊的的用用途途,,任任何何可可采采用用通通用用寄寄存存器器的的應(yīng)應(yīng)用用場(chǎng)場(chǎng)合合都都可可以以使使用用未未分分組組寄寄存存器器。。1..未未分分組組寄寄存存器器對(duì)于于分分組組寄寄存存器器R13和和R14來來說說,,每每個(gè)個(gè)寄寄存存器器對(duì)對(duì)應(yīng)應(yīng)6個(gè)個(gè)不不同同的的物物理理寄寄存存器器。。其其中中的的一一個(gè)個(gè)是是用用戶戶模模式式和和系系統(tǒng)統(tǒng)模模式式公公用用的的,,而而另另外外5個(gè)個(gè)分分別別用用于于5種種異異常常模模式式。。訪訪問問時(shí)時(shí)需需要要指指定定它它們們的的模模式式。。名名字字形形式式如如下下::(1))R13_<mode>(2))R14_<mode>其中,,<mode>可以以是以以下幾幾種模模式之之一::usr、、svc、、abt、、und、、irp及及fiq。。2.分分組寄寄存器器寄存器器R14又又被稱稱為連連接寄寄存器器(LinkRegister,LR)),在在ARM體體系結(jié)結(jié)構(gòu)中中具有有下面面兩種種特殊殊的作作用。。(1))每一一種處處理器器模式式用自自己的的R14存存放當(dāng)當(dāng)前子子程序序的返返回地地址。。(2))當(dāng)異異常中中斷發(fā)發(fā)生時(shí)時(shí),該該異常常模式式特定定的物物理寄寄存器器R14被被設(shè)置置成該該異常常模式式的返返回地地址,,對(duì)于于有些些模式式R14的的值可可能與與返回回地址址有一一個(gè)常常數(shù)的的偏移移量((如數(shù)數(shù)據(jù)異異常使使用SUBPC,,LR,#8返返回))。R14也可可以被被用做做通用用寄存存器使使用。。狀狀態(tài)態(tài)寄存存器當(dāng)前程程序狀狀態(tài)寄寄存器器(CurrentProgramStatusRegister,CPSR))可以以在任任何處處理器器模式式下被被訪問問,它它包含含下列列內(nèi)容容:(1))ALU((ArithmeticLogicUnit,,算術(shù)術(shù)邏輯輯單元元)狀狀態(tài)標(biāo)標(biāo)志的的備份份;(2))當(dāng)前前的處處理器器模式式;(3))中斷斷使能能標(biāo)志志;(4))設(shè)置置處理理器的的狀態(tài)態(tài)(只只在4T架架構(gòu)))。圖2-1程程序狀狀態(tài)寄寄存器器格式式N(Negative))、Z(Zero))、C(Carry)和和V((oVerflow)通通稱為為條件件標(biāo)志志位。。(1))N(2))Z(3))C(4))V1.標(biāo)標(biāo)志位位在帶DSP指令令擴(kuò)展展的ARMv5及及更高高版本本中,,bit[27]被被指定定用于于指示示增強(qiáng)強(qiáng)的DAP指令令是否否發(fā)生生了溢溢出,,因此此也就就被稱稱為Q標(biāo)志志位。。同樣樣,在在SPSR中bit[27]也被被稱為為Q標(biāo)標(biāo)志位位,用用于在在異常常中斷斷發(fā)生生時(shí)保保存和和恢復(fù)復(fù)CPSR中的的Q標(biāo)標(biāo)志位位。2.Q標(biāo)志志位CPSR的低低8位(I、、F、T及M[4∶0])統(tǒng)稱為控控制位。當(dāng)異異常發(fā)生時(shí),,這些位的值值將發(fā)生相應(yīng)應(yīng)的變化。另另外,如果在在特權(quán)模式下下,也可以通通過軟件編程程來修改這些些位的值。(1)中斷禁禁止位(2)狀態(tài)控控制位(3)模式控控制位3.控制位表2-3狀狀態(tài)控制制位M[4∶∶0]含義M[4∶0]處理器模式可以訪問的寄存器0b10000UserPC,R14~R0,CPSR0b10001FIQPC,R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq0b10010IRQPC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq0b10011SupervisorPC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc0b10111AbortPC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt0b11011UndefinedPC,R14_und~R13_und,R12~R0,CPSR,SPSR_und0b11111SystemPC,R14~R0,CPSR(ARMv4及更高版本)程程序計(jì)數(shù)數(shù)器程序計(jì)數(shù)器R15又被記記為PC。程序計(jì)數(shù)器在在下面兩種情情況下用于特特殊的目的。。(1)讀程序序計(jì)數(shù)器。(2)寫程序序計(jì)數(shù)器。2.4流流水線線流流水線的的概念與原理理處理器按照一一系列步驟來來執(zhí)行每一條條指令,典型型的步驟如下下:(1)從存儲(chǔ)儲(chǔ)器讀取指令令(fetch);(2)譯碼以以鑒別它是屬屬于哪一條指指令(decode);;(3)從指令令中提取指令令的操作數(shù)((這些操作數(shù)數(shù)往往存在于于寄存器中))(reg));(4)將操作作數(shù)進(jìn)行組合合以得到結(jié)果果或存儲(chǔ)器地地址(ALU);(5)如果需需要,則訪問問存儲(chǔ)器以存存儲(chǔ)數(shù)據(jù)(mem);(6)將結(jié)果果寫回到寄存存器堆(res)。流流水線的的分類到ARM7為為止的ARM處理器使用用簡(jiǎn)單的3級(jí)級(jí)流水線,它它包括下列流流水線級(jí)。(1)取指令令(fetch):從寄寄存器裝載一一條指令。(2)譯碼((decode):識(shí)別別被執(zhí)行的指指令,并為下下一個(gè)周期準(zhǔn)準(zhǔn)備數(shù)據(jù)通路路的控制信號(hào)號(hào)。在這一級(jí)級(jí),指令占有有譯碼邏輯,,不占用數(shù)據(jù)據(jù)通路。(3)執(zhí)行((excute):處理理指令并將結(jié)結(jié)果寫回寄存存器。1.3級(jí)流水水線ARM組組織在ARM9TDMI中使使用了典型的的5級(jí)流水線線,5級(jí)流水水線包括下面面的流水線級(jí)級(jí)。(1)取指令令(fetch):從存存儲(chǔ)器中取出出指令,并將將其放入指令令流水線。(2)譯碼((decode):指令令被譯碼,從從寄存器堆中中讀取寄存器器操作數(shù)。在在寄存器堆中中有3個(gè)操作作數(shù)讀端口,,因此,大多多數(shù)ARM指指令能在1個(gè)個(gè)周期內(nèi)讀取取其操作數(shù)。。2.5級(jí)流水水線ARM組組織(3)執(zhí)行((execute):將將其中1個(gè)操操作數(shù)移位,,并在ALU中產(chǎn)生結(jié)果果。如果指令令是Load或Store指令,則則在ALU中中計(jì)算存儲(chǔ)器器的地址。(4)緩沖/數(shù)據(jù)(buffer/data)):如果需要要?jiǎng)t訪問數(shù)據(jù)據(jù)存儲(chǔ)器,否否則ALU只只是簡(jiǎn)單地緩緩沖1個(gè)時(shí)鐘鐘周期。(5)回寫((write-back):將指令令的結(jié)果回寫寫到寄存器堆堆,包括任何何從寄存器讀讀出的數(shù)據(jù)。。在ARM10中,將流水水線的級(jí)數(shù)增增加到6級(jí),,使系統(tǒng)的平平均處理能力力達(dá)到了1.3DMIPS/MHz。3.6級(jí)流水水線ARM組組織圖2-46級(jí)流水線線指令的執(zhí)行行過程影影響流水水線性能的因因素1.互鎖2.跳轉(zhuǎn)指令令2.5ARM存儲(chǔ)系系統(tǒng)將某個(gè)分區(qū)或或是設(shè)備掛載載了以后才能能使用,但是是當(dāng)計(jì)算機(jī)重重新啟動(dòng)以后后,又需要重重新掛載,這這個(gè)時(shí)候可以以通過修改/etc/fstab文文件實(shí)現(xiàn)開機(jī)機(jī)自動(dòng)掛載文文件系統(tǒng)。ARM存存儲(chǔ)儲(chǔ)系系統(tǒng)統(tǒng)有有非非常常靈靈活活的的體體系系結(jié)結(jié)構(gòu)構(gòu),,可可以以適適應(yīng)應(yīng)不不同同的的嵌嵌入入式式應(yīng)應(yīng)用用系系統(tǒng)統(tǒng)的的需需要要。。ARM存存儲(chǔ)儲(chǔ)器器系系統(tǒng)統(tǒng)可可以以使使用用簡(jiǎn)簡(jiǎn)單單的的平平板板式式地地址址映映射射機(jī)機(jī)制制((就就像像一一些些簡(jiǎn)簡(jiǎn)單單的的單單片片機(jī)機(jī)一一樣樣,,地地址址空空間間的的分分配配方方式式是是固固定定的的,,系系統(tǒng)統(tǒng)中中各各部部分分都都使使用用物物理理地地址址)),,也也可可以以使使用用其其他他技技術(shù)術(shù)提提供供功功能能更更為為強(qiáng)強(qiáng)大大的的存存儲(chǔ)儲(chǔ)系系統(tǒng)統(tǒng)。。例如如::(1))系系統(tǒng)統(tǒng)可可能能提提供供多多種種類類型型的的存存儲(chǔ)儲(chǔ)器器件件,,如如Flash、、ROM、、SRAM等等;;(2))Cache技技術(shù)術(shù);;(3))寫寫緩緩存存技技術(shù)術(shù)((writebuffers));;(4)虛擬擬內(nèi)存和I/O地址址映射技術(shù)術(shù)。大多數(shù)的系系統(tǒng)通過下下面的方法法之一可實(shí)實(shí)現(xiàn)對(duì)復(fù)雜雜存儲(chǔ)系統(tǒng)統(tǒng)的管理。。(1)使用用Cache,縮小小處理器和和存儲(chǔ)系統(tǒng)統(tǒng)速度差別別,從而提提高系統(tǒng)的的整體性能能。(2)使用用內(nèi)存映射射技術(shù)實(shí)現(xiàn)現(xiàn)虛擬空間間到物理空空間的映射射。(3)引入入存儲(chǔ)保護(hù)護(hù)機(jī)制,增增強(qiáng)系統(tǒng)的的安全性。。(4)引入入一些機(jī)制制保證將I/O操作作映射成內(nèi)內(nèi)存操作后后,各種I/O操作作能夠得到到正確的結(jié)結(jié)果。(1)內(nèi)核核級(jí)的寄存存器。(2)芯片片級(jí)的緊耦耦合存儲(chǔ)器器TCM。。(3)芯片片級(jí)的片上上Cache存儲(chǔ)器器的容量在在8~32KB之間間,訪問時(shí)時(shí)間大約為為10ns。(4)板卡卡級(jí)的DRAM。(5)外設(shè)設(shè)級(jí)的后援援存儲(chǔ)器,,通常是硬硬盤,可能能從幾百M(fèi)B到幾個(gè)個(gè)GB,訪訪問時(shí)間為為幾十ms。2.5.1協(xié)處處理器(CP15))ARM處理理器支持16個(gè)協(xié)處處理器。CP15,,即通常所所說的系統(tǒng)統(tǒng)控制協(xié)處處理器(SystemControlCoprocesssor),,它負(fù)責(zé)完完成大部分分的存儲(chǔ)系系統(tǒng)管理。。CP15包包含16個(gè)個(gè)32位寄寄存器,其其編號(hào)為0~15。。CP15中中的寄存器器可能是只只讀的,也也可能是只只寫的,還還有一些是是可讀可寫寫的。2.5.2存儲(chǔ)儲(chǔ)管理單元元(MMU)在創(chuàng)建多任任務(wù)嵌入式式系統(tǒng)時(shí),,最好有一一個(gè)簡(jiǎn)單的的方式來編編寫、裝載載及運(yùn)行各各自獨(dú)立的的任務(wù)。目目前大多數(shù)數(shù)的嵌入式式系統(tǒng)不再再使用自己己定制的控控制系統(tǒng),,而使用操操作系統(tǒng)來來簡(jiǎn)化這個(gè)個(gè)過程。較較高級(jí)的操操作系統(tǒng)采采用基于硬硬件的存儲(chǔ)儲(chǔ)管理單元元(MMU)來實(shí)現(xiàn)現(xiàn)上述操作作。MMU提供供的一個(gè)關(guān)關(guān)鍵服務(wù)是是使各個(gè)任任務(wù)作為各各自獨(dú)立的的程序在其其自己的私私有存儲(chǔ)空空間中運(yùn)行行。在帶MMU的操操作系統(tǒng)控控制下,運(yùn)運(yùn)行的任務(wù)務(wù)無須知道道其他與之之無關(guān)的任任務(wù)的存儲(chǔ)儲(chǔ)需求情況況,這就簡(jiǎn)簡(jiǎn)化了各個(gè)個(gè)任務(wù)的設(shè)設(shè)計(jì)。MMU提供供了一些資資源以允許許使用虛擬擬存儲(chǔ)器((將系統(tǒng)物物理存儲(chǔ)器器重新編址址,可將其其看成一個(gè)個(gè)獨(dú)立于系系統(tǒng)物理存存儲(chǔ)器的存存儲(chǔ)空間))。MMU作為轉(zhuǎn)換換器,將程程序和數(shù)據(jù)據(jù)的虛擬地地址(編譯譯時(shí)的連接接地址)轉(zhuǎn)轉(zhuǎn)換成實(shí)際際的物理地地址,即在在物理主存存中的地址址。這個(gè)轉(zhuǎn)轉(zhuǎn)換過程允允許運(yùn)行的的多個(gè)程序序使用相同同的虛擬地地址,而各各自存儲(chǔ)在在物理存儲(chǔ)儲(chǔ)器的不同同位置。這樣存儲(chǔ)器器就有兩種種類型的地地址:虛擬擬地址和物物理地址。。2.5.3高速速緩沖存儲(chǔ)儲(chǔ)器(Cache))Cache是一個(gè)容容量小但存存取速度非非常快的存存儲(chǔ)器,它它保存最近近用到的存存儲(chǔ)器數(shù)據(jù)據(jù)副本。Cache經(jīng)常與寫寫緩存器((writebuffer)一起使使用。通過引入Cache和寫緩存存區(qū),存儲(chǔ)儲(chǔ)系統(tǒng)的性性能得到了了很大的提提高,但同同時(shí)也帶來來了一些問問題。2.6異異常常ARM體體系結(jié)構(gòu)構(gòu)中,存存在7種種異常處處理。當(dāng)當(dāng)異常發(fā)發(fā)生時(shí),,處理器器會(huì)把PC設(shè)置置為一個(gè)個(gè)特定的的存儲(chǔ)器器地址。。這一地地址放在在被稱為為向量表表(vectortable)的的特定地地址范圍圍內(nèi)。向向量表的的入口是是一些跳跳轉(zhuǎn)指令令,跳轉(zhuǎn)轉(zhuǎn)到專門門處理某某個(gè)異常?;蛑袛鄶嗟淖映坛绦?。異異常的的種類表2-4ARM的7種種異常異常類型處理器模式執(zhí)行低地址執(zhí)行高地址復(fù)位異常(Reset)特權(quán)模式0x000000000xFFFF0000未定義指令異常(Undefinedinterrupt)未定義指令中止模式0x000000040xFFFF0004軟中斷異常(SoftwareAbort)特權(quán)模式0x000000080xFFFF0008預(yù)取異常(PrefetchAbort)數(shù)據(jù)訪問中止模式0x0000000C0xFFFF000C數(shù)據(jù)異常(DataAbort)數(shù)據(jù)訪問中止模式0x000000100xFFFF0010外部中斷請(qǐng)求(IRQ)外部中斷請(qǐng)求模式0x000000180xFFFF0018快速中斷請(qǐng)求(FIQ)快速中斷請(qǐng)求模式0x0000001C0xFFFF001C異異常的的優(yōu)先級(jí)級(jí)表2-5異異常優(yōu)優(yōu)先級(jí)優(yōu)先級(jí)異常最高1復(fù)位異常2數(shù)據(jù)中止3快速中斷請(qǐng)求4外部中斷請(qǐng)求5預(yù)取指令異常6軟中斷最低7未定義指令構(gòu)構(gòu)建異異常向量量表當(dāng)處理器器的復(fù)位位引腳有有效時(shí),,系統(tǒng)產(chǎn)產(chǎn)生復(fù)位位異常中中斷,程程序跳轉(zhuǎn)轉(zhuǎn)到復(fù)位位異常中中斷處理理程序處處執(zhí)行。。復(fù)位異異常中斷斷通常用用在下面面兩種情情況下::(1)系系統(tǒng)上電電;(2)系系統(tǒng)復(fù)位位。1.復(fù)位位異常圖2-6異異常處理理向量表表當(dāng)ARM處理器器執(zhí)行協(xié)協(xié)處理器器指令時(shí)時(shí),它必必須等待待一個(gè)外外部協(xié)處處理器應(yīng)應(yīng)答后,,才能真真正執(zhí)行行這條指指令。若若協(xié)處理理器沒有有響應(yīng),,則發(fā)生生未定義義指令異異常。2.未定定義指令令異常軟中斷((SWI)異常常發(fā)生時(shí)時(shí),處理理器進(jìn)入入特權(quán)模模式,執(zhí)執(zhí)行一些些特權(quán)模模式下的的操作系系統(tǒng)功能能。3.軟中斷預(yù)取指令異常常是由系統(tǒng)存存儲(chǔ)器報(bào)告的的。當(dāng)處理器器試圖去取一一條被標(biāo)記為為預(yù)取無效的的指令時(shí),發(fā)發(fā)生預(yù)取指令令異常。如果系統(tǒng)中不不包含MMU時(shí),指令預(yù)預(yù)取異常中斷斷處理程序只只是簡(jiǎn)單地報(bào)報(bào)告錯(cuò)誤并退退出。若包含含MMU,引引起異常的指指令的物理地地址被存儲(chǔ)到到內(nèi)存中。4.預(yù)取指令令異常數(shù)據(jù)訪問中止止異常是由存存儲(chǔ)器發(fā)出數(shù)數(shù)據(jù)中止信號(hào)號(hào),它由存儲(chǔ)儲(chǔ)器訪問指令令Load/Store產(chǎn)生。當(dāng)數(shù)數(shù)據(jù)訪問指令令的目標(biāo)地址址不存在或者者該地址不允允許當(dāng)前指令令訪問時(shí),處處理器產(chǎn)生數(shù)數(shù)據(jù)訪問中止止異常。5.?dāng)?shù)據(jù)訪問問中止異常當(dāng)處理器的外外部中斷請(qǐng)求求(IRQ))引腳有效,,而且CPSR寄存器的的I控制位被被清除時(shí),處處理器產(chǎn)生外外部中斷IRQ異常。系系統(tǒng)中各外部部設(shè)備通常通通過該異常中中斷請(qǐng)求處理理器服務(wù)。6.外部中斷斷請(qǐng)求當(dāng)處理器的快快速中斷請(qǐng)求求(FIQ))引腳有效且且CPSR寄寄存器的F控控制位被清除除時(shí),處理器器產(chǎn)生快速中中斷請(qǐng)求FIQ異常。7.快速中斷斷請(qǐng)求異異常響應(yīng)應(yīng)流程當(dāng)異常發(fā)生時(shí)時(shí),處理器自自動(dòng)切換到ARM狀態(tài),,所以在異常常處理函數(shù)中中要判斷在異異常發(fā)生前處處理器是ARM狀態(tài)還是是Thumb狀態(tài)。這可可以通過檢測(cè)測(cè)SPSR的的T位來判斷斷。1.判斷處理理器狀態(tài)通常情況下,,只有在SWI處理函數(shù)數(shù)中才需要知知道異常發(fā)生生前處理器的的狀態(tài)。所以以在Thumb狀態(tài)下,,調(diào)用SWI軟中斷異常常必須注意以以下兩點(diǎn)。(1)發(fā)生異異常的指令地地址為(lr?2),而而不是(lr?4)。(2)Thumb狀態(tài)下下的指令是16位的,在在判斷中斷向向量信號(hào)時(shí)使使用半字加載載指令LDRH。前面介紹向量量表時(shí)提到,,每一個(gè)異常常發(fā)生時(shí)總是是從異常向量量表開始跳轉(zhuǎn)轉(zhuǎn)。最簡(jiǎn)單的的一種情況是是向量表里面面的每一條指指令直接跳向向?qū)?yīng)的異常常處理函數(shù)。。其中快速中中斷處理函數(shù)數(shù)FIQ_handler()可以以直接從地址址0x1C處處開始,省下下一條跳轉(zhuǎn)指指令,如圖2-7所示。。(1)MOVPC,##imme_value(2)LDRPC,[PC+offset]2.向量表圖2-7異異常處理向向量表從從異常處處理程序中返返回當(dāng)一個(gè)異常處處理返回時(shí),,一共有3件件事情需要處處理:通用寄寄存器的恢復(fù)復(fù)、狀態(tài)寄存存器的恢復(fù)及及PC指針的的恢復(fù)。通用用寄存器的恢恢復(fù)采用一般般的堆棧操作作指令即可,,下面重點(diǎn)介介紹狀態(tài)寄存存器的恢復(fù)及及PC指針的的恢復(fù)。PC和CPSR的恢復(fù)可可以通過一條條指令來實(shí)現(xiàn)現(xiàn),下面是3個(gè)例子。(1)MOVSPC,LR(2)SUBSPC,LR,##4(3)LDMFDSP!,{PC}^1.恢復(fù)被中中斷程序的處處理器狀態(tài)異常返回時(shí),,另一個(gè)非常常重要的問題題就是返回地地址的確定。。2.異常的返返回地址圖2-83級(jí)流水線線示例(1)軟中斷斷異常(2)IRQ或FIQ異異常(3)DataAbort數(shù)據(jù)中中止異常表2-6異異常和返返回地址異常地址用途復(fù)位-復(fù)位沒有定義LR數(shù)據(jù)中止LR-8指向?qū)е聰?shù)據(jù)中止異常的指令FIQLR-4指向發(fā)生異常時(shí)正在執(zhí)行的指令I(lǐng)RQLR-4指向發(fā)生異常時(shí)正在執(zhí)行的指令預(yù)取指令中止LR-4指向?qū)е骂A(yù)取指令異常的那條指令SWILR執(zhí)行SWI指令的下一條指令未定義指令LR指向未定義指令的下一條指令2.7ARM處理器器的尋址方式式ARM指指令令集集可可以以分分為為跳跳轉(zhuǎn)轉(zhuǎn)指指令令、、數(shù)數(shù)據(jù)據(jù)處處理理指指令令、、程程序序狀狀態(tài)態(tài)寄寄存存器器傳傳輸輸指指令令、、Load/Store指指令令、、協(xié)協(xié)處處理理器器指指令令和和異異常常中中斷斷產(chǎn)產(chǎn)生生指指令令。。根根據(jù)據(jù)使使用用的的指指令令類類型型不不同同,,指指令令的的尋尋址址方方式式分分為為數(shù)數(shù)據(jù)據(jù)處處理理指指令令尋尋址址方方式式和和內(nèi)內(nèi)存存訪訪問問指指令令尋尋址址方方式式。。數(shù)數(shù)據(jù)據(jù)處處理理指指令令尋尋址址方方式式數(shù)據(jù)據(jù)處處理理指指令令的的基基本本語語法法格格式式如如下下::<opcode>{<cond>}{S}<Rd>,<Rn>,<shifter_operand>其中中,,<shifter_operand>有有11種種形形式式,,如如表表2-7所所示示。。表2-7<shifter_operand>的的尋尋址址方方式式語法尋址方式1#<immediate>立即數(shù)尋址2<Rm>寄存器尋址3<Rm>,LSL#<shift_imm>立即數(shù)邏輯左移4<Rm>,LSL<Rs>寄存器邏輯左移5<Rm>,LSR#<shift_imm>立即數(shù)邏輯右移6<Rm>,LSR<Rs>寄存器邏輯右移7<Rm>,ASR#<shift_imm>立即數(shù)算術(shù)右移8<Rm>,ASR<Rs>寄存器算術(shù)右移9<Rm>,ROR#<shift_imm>立即數(shù)循環(huán)右移10<Rm>,ROR<Rs>寄存器循環(huán)右移11<Rm>,RRX寄存器擴(kuò)展循環(huán)右移數(shù)據(jù)據(jù)處處理理指指令令尋尋址址方方式式可可以以分分為為以以下下幾幾種種。。(1))立立即即數(shù)數(shù)尋尋址址方方式式;;(2))寄寄存存器器尋尋址址方方式式;;(3))寄寄存存器器移移位位尋尋址址方方式式。。指令令中中的的立立即即數(shù)數(shù)是是由由一一個(gè)個(gè)8bit的的常常數(shù)數(shù)移移動(dòng)動(dòng)4bit偶偶數(shù)數(shù)位位((0,,2,,4,,……,,26,,28,,30))得得到到的的。。所所以以,,每每一一條條指指令令都都包包含含一一個(gè)個(gè)8bit的的常常數(shù)數(shù)X和和移移位位值值Y,,得得到到的的立立即即數(shù)數(shù)=X循循環(huán)環(huán)右右移移((2××Y))。。1..立立即即數(shù)數(shù)尋尋址址方方式式寄存存器器的的值值可可以以被被直直接接用用于于數(shù)數(shù)據(jù)據(jù)操操作作指指令令,這這種種尋尋址址方方式式是是各各類類處處理理器器經(jīng)經(jīng)常常采采用用的的一一種種方方式式,,也也是是一一種種執(zhí)執(zhí)行行效效率率較較高高的的尋尋址址方方式式,,2.寄寄存器器尋址址方式式寄存器器的值值在被被送到到ALU之之前,,可以以事先先經(jīng)過過桶形形移位位寄存存器的的處理理。預(yù)預(yù)處理理和移移位發(fā)發(fā)生在在同一一周期期內(nèi),,所以以有效效地使使用移移位寄寄存器器,可可以增增加代代碼的的執(zhí)行行效率率。3.寄寄存器器移位位尋址址方式式內(nèi)內(nèi)存存訪問問指令令尋址址方式式內(nèi)存訪訪問指指令的的尋址址方式式可以以分為為以下下幾種種。(1))字及及無符符號(hào)字字節(jié)的的Load/Store指令令的尋尋址方方式;;(2))雜類類Load/Store指令令的尋尋址方方式;;(3))批量量Load/Store指令令的尋尋址方方式;;(4))協(xié)處處理器器Load/Store指令令的尋尋址方方式。。字及無無符號(hào)號(hào)字節(jié)節(jié)的Load/Store指指令語語法格格式如如下::LDR|STR{<cond>}{B}{T}<Rd>,<addressing_mode>1.字字及無無符號(hào)號(hào)字節(jié)節(jié)的Load/Store指指令的的尋址址方式式表2-8字字及及無符符合字字節(jié)的的Load/Store指令令的尋尋址方方式格式模式1[Rn,#±<offset_12>]立即數(shù)偏移尋址(Immediateoffset)2[Rn,±Rm]寄存器偏移尋址(Registeroffset)3[Rn,Rm,<shift>#<offset_12>]帶移位的寄存器偏移尋址(Scaledregisteroffset)4[Rn,#±<offset_12>]!立即數(shù)前索引尋址(Immediatepre-indexed)5[Rn,±Rm]!寄存器前索引尋址(Registerpost-indexed)6[Rn,Rm,<shift>#<offset_12>]!帶移位的寄存器前索引尋址(Scaledregisterpre-indexed)格式模式7[Rn],#±<offset_12>立即數(shù)后索引尋址(Immediatepost-indeded)8[Rn],±<Rm>寄存器后索引尋址(Registerpost-indexed)9[Rn],±<Rm>,<shift>#<offset_12>帶移位的寄存器后索引尋址(Scaledregisterpost-indexed)使用該該類尋尋址方方式的的指令令的語語法格格式如如下::LDR|STR{<cond>}H|SH|SB|D<Rd>,<addressing_mode>2.雜雜類Load/Store指指令的的尋址址方式式表2-9雜雜類類Load/Store指令令的尋尋址方方式格式模式1[Rn,#±<offset_8>]立即數(shù)偏移尋址(Immediateoffset)2[Rn,±Rm]寄存器偏移尋址(Registeroffset)3[Rn,#±<offset_8>]!立即數(shù)前索引尋址(Immediatepre-indexed)4[Rn,±Rm]!寄存器前索引尋址(Registerpost-indexed)5[Rn],#±<offset_8>立即數(shù)后索引尋址(Immediatepost-indeded)6[Rn],±<Rm>寄存器后索引尋址(Registerpost-indexed)批量Load/Store指指令將將一片片連續(xù)續(xù)內(nèi)存存單元元的數(shù)數(shù)據(jù)加加載到到通用用寄存存器組組中或或?qū)⒁灰唤M通通用寄寄存器器的數(shù)數(shù)據(jù)存存儲(chǔ)到到內(nèi)存存單元元中。。該類指指令的的語法法格式式如下下:LDM|STM{<cond>}<addressing_mode><Rn>{!},<registers><^>3.批量Load/Store指令令尋址方式表2-10批批量Load/Store指指令的尋址方方式格式模式1IA(IncrementAfter)后遞增方式2IB(IncrementBefore)先遞增方式3DA(DecrementAfter)后遞減方式4DB(DecrementBefore)先遞減方式堆棧操作尋址址方式和批量量Load/Store指令尋址方方式十分類似似。但對(duì)于堆堆棧的操作,,數(shù)據(jù)寫入內(nèi)內(nèi)存和從內(nèi)存存中讀出要使使用不同的尋尋址模式,因因?yàn)檫M(jìn)棧操作作(pop))和出棧操作作(push)要在不同同的方向上調(diào)調(diào)整堆棧。4.堆棧操作作尋址方式根據(jù)不同的尋尋址方式,將將堆棧分為以以下4種。(1)Full棧:堆棧棧指針指向棧棧頂元素(lastusedlocation)。(2)Empty棧:堆堆棧指針指向向第一個(gè)可用用元素(thefirstunusedlocation)。。(3)遞減棧棧:堆棧向內(nèi)內(nèi)存地址減小小的方向生長長。(4))遞遞增增棧棧::堆堆棧棧向向內(nèi)內(nèi)存存地地址址增增加加的的方方向向生生長長。。根據(jù)據(jù)堆堆棧棧的的不不同同種種類類,,將將其其尋尋址址方方式式分分為為以以下下4種種。。(1))滿滿遞遞減減FD((FullDescending))。。(2))空空遞遞減減ED((EmptyDescending))。。(3))滿滿遞遞增增FA((FullAscending))。。(4))空空遞遞增增EA((EmptyAscending))。。表2-11堆堆棧棧尋址址方式式和批批量Load/Store指指令尋尋址方方式對(duì)對(duì)應(yīng)關(guān)關(guān)系批量數(shù)據(jù)尋址方式堆棧尋址方式L位P位U位LDMDALDMFA100LDMIALDMFD101LDMDBLDMEA110LDMIBLDMED111STMDASTMED000STMIASTMEA001STMDBSTMFD010STMIBSTMFA011協(xié)處理理器Load/Store指指令的的語法法格式式如下下:<opcode>{<cond>}{L}<coproc>,<CRd>,<addressing_mode>5.協(xié)協(xié)處理理器Load/Store尋尋址方方式2.8ARM處處理器器的指指令集集數(shù)據(jù)操操作指指令是是指對(duì)對(duì)存放放在寄寄存器器中的的數(shù)據(jù)據(jù)進(jìn)行行操作作的指指令。。主要要包括括數(shù)據(jù)據(jù)傳送送指令令、算算術(shù)指指令、、邏輯輯指令令、比比較與與測(cè)試試指令令及乘乘法指指令。。數(shù)數(shù)據(jù)據(jù)操作作指令令表2-12數(shù)數(shù)據(jù)處處理指指令列列表助記符操作行為MOV數(shù)據(jù)傳送MVN數(shù)據(jù)取反傳送AND邏輯與Rd:=RnANDop2EOR邏輯異或Rd:=RnEORop2SUB減Rd:=Rn?op2RSB翻轉(zhuǎn)減Rd:=op2?RnADD加Rd:=Rn+op2ADC帶進(jìn)位的加Rd:=Rn+op2+CSBC帶進(jìn)位的減Rd:=Rn?op2+C?1RSC帶進(jìn)位的翻轉(zhuǎn)減Rd:=op2?Rn+C?1TST測(cè)試RnANDop2并更新標(biāo)志位TEQ測(cè)試相等RnEORop2并更新標(biāo)志位CMP比較Rn?op2并更新標(biāo)志位CMN負(fù)數(shù)比較Rn+op2并更新標(biāo)志位ORR邏輯或Rd:=RnORop2BIC位清0Rd:=RnANDNOT(op2)MOV指令令是最最簡(jiǎn)單單的ARM指令令,執(zhí)執(zhí)行的的結(jié)果果就是是把一一個(gè)數(shù)數(shù)N送送到目目標(biāo)寄寄存器器Rd,其其中N可以以是寄寄存器器,也也可以以是立立即數(shù)數(shù)。MOV指令令多用用于設(shè)設(shè)置初初始值值或者者在寄寄存器器間傳傳送數(shù)數(shù)據(jù)。。MOV指令令將移移位碼碼(shifter_operand)表表示的的數(shù)據(jù)據(jù)傳送送到目目的寄寄存器器Rd,并并根據(jù)據(jù)操作作的結(jié)結(jié)果更更新CPSR中中相應(yīng)應(yīng)的條條件標(biāo)標(biāo)志位位。1.MOV指令令(1)指指令的語語法格式式MOV{<cond>}{S}<Rd>,<shifter_operand>(2)指指令舉例例(3)指指令的使使用MVN是是反相傳傳送(MoveNegative)指令令。它將將操作數(shù)數(shù)的反碼碼傳送到到目的寄寄存器。。MVN指令多多用于向寄存存器傳送一個(gè)個(gè)負(fù)數(shù)或生成成位掩碼。MVN指令將將shifter_operand表示的數(shù)據(jù)據(jù)的反碼傳送送到目的寄存存器Rd。并并根據(jù)操作的的結(jié)果更新CPSR中相相應(yīng)的條件標(biāo)標(biāo)志位。2.MVN指指令(1)指令的的語法格式MVN{<cond>}{S}<Rd>,<shifter_operand>(2)指令舉舉例(3)指令的使用用AND指令將將shifter_operand表示的數(shù)值值與寄存器Rn的值按位位(bitwise)做做邏輯與操作作,并將結(jié)果果保存到目標(biāo)標(biāo)寄存器Rd中,同時(shí)根根據(jù)操作的結(jié)結(jié)果更新CPSR寄存器器。(1)指令的的語法格式AND{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)指令舉舉例3.AND指指令EOR(ExclusiveOR)指令將寄存存器Rn中的值和shifter_operand的值執(zhí)行按位位“異或”操操作,并將執(zhí)執(zhí)行結(jié)果存儲(chǔ)儲(chǔ)到目的寄存存器Rd中,同時(shí)根據(jù)據(jù)指令的執(zhí)行行結(jié)果更新CPSR中相應(yīng)的條件件標(biāo)志位。(1)指令的語法法格式EOR{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)指令舉例4.EOR指指令SUB(Subtract)指令從寄存存器Rn中減去shifter_operand表示的數(shù)值,,并將結(jié)果保保存到目標(biāo)寄寄存器Rd中,并根據(jù)指指令的執(zhí)行結(jié)結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志志位。(1)指令的語法法格式SUB{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)SUB指令舉例5.SUB指指令RSB(ReverseSubtract)指令從寄存存器shifter_operand中減去Rn表示的數(shù)值,,并將結(jié)果保保存到目標(biāo)寄寄存器Rd中,并根據(jù)指指令的執(zhí)行結(jié)結(jié)果設(shè)置CPSR中相應(yīng)的標(biāo)志志位。(1)指令的語法法格式RSB{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)RSB指令舉例6.RSB指指令A(yù)DD指令將將寄存器shifter_operand的值值加上Rn表表示的數(shù)值,,并將結(jié)果保保存到目標(biāo)寄寄存器Rd中中,并根據(jù)指指令的執(zhí)行結(jié)結(jié)果設(shè)置CPSR中相應(yīng)應(yīng)的標(biāo)志位。。(1)指令的的語法格式ADD{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)ADD指令舉例7.ADD指指令A(yù)DC指令令將將寄寄存存器器shifter_operand的值值加加上上Rn表示示的的數(shù)數(shù)值值,,再再加加上上CPSR中的的C條件件標(biāo)標(biāo)志志位位的的值值,,將將結(jié)結(jié)果果保保存存到到目目標(biāo)標(biāo)寄寄存存器器Rd中,,并并根根據(jù)據(jù)指指令令的的執(zhí)執(zhí)行行結(jié)結(jié)果果設(shè)設(shè)置置CPSR中相相應(yīng)應(yīng)的的標(biāo)標(biāo)志志位位。。(1)指令的的語法格格式ADC{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)ADC指令舉例例8.ADC指令令SBC(SubtractwithCarry)指令用用于執(zhí)行行操作數(shù)數(shù)大于32位時(shí)的減減法操作作。該指指令從寄寄存器Rn中減去shifter_operand表示的數(shù)數(shù)值,再再減去寄寄存器CPSR中C條件標(biāo)志志位的反反碼[NOT(Carryflag)],并并將結(jié)果果保存到到目標(biāo)寄寄存器Rd中,,并根據(jù)據(jù)指令的的執(zhí)行結(jié)結(jié)果設(shè)置置CPSR中相相應(yīng)的標(biāo)標(biāo)志位。。9.SBC指令令RSC(ReverseSubtractwithCarry)指令用用于從寄寄存器shifter_operand中減去Rn表示的數(shù)數(shù)值,再再減去寄寄存器CPSR中C條件標(biāo)志志位的反反碼[NOT(CarryFlag)],并并將結(jié)果果保存到到目標(biāo)寄寄存器Rd中,并根根據(jù)指令令的執(zhí)行行結(jié)果設(shè)設(shè)置CPSR中相應(yīng)的的標(biāo)志位位。(1)指令的的語法格格式RSC{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)RSC指令舉例例10.RSC指指令TST((Test)測(cè)測(cè)試指令令用于將將一個(gè)寄寄存器的的值和一一個(gè)算術(shù)術(shù)值進(jìn)行行比較。。條件標(biāo)標(biāo)志位根根據(jù)兩個(gè)個(gè)操作數(shù)數(shù)做“邏邏輯與””后的結(jié)結(jié)果設(shè)置置。(1)指指令的語語法格式式TST{<cond>}<Rn>,<shifter_operand>(2)TST指指令舉例例11.TST測(cè)測(cè)試指令令TEQ((TestEquivalence)指指令用于于將一個(gè)個(gè)寄存器器的值和和一個(gè)算算術(shù)值做做比較。。條件標(biāo)標(biāo)志位根根據(jù)兩個(gè)個(gè)操作數(shù)數(shù)做“邏邏輯或””后的結(jié)結(jié)果設(shè)置置。以便便后面的的指令根根據(jù)相應(yīng)應(yīng)的條件件標(biāo)志來來判斷是是否執(zhí)行行。(1))指指令令的的語語法法格格式式TEQ{<cond>}<Rn>,<shifter_operand>(2))TEQ指指令令舉舉例例12..TEQ指指令令CMP((Compare))指指令令使使用用寄寄存存器器Rn的的值值減減去去operand2的的值值,,根根據(jù)據(jù)操操作作的的結(jié)結(jié)果果更更新新CPSR中中相相應(yīng)應(yīng)的的條條件件標(biāo)標(biāo)志志位位,,以以便便后后面面的的指指令令根根據(jù)據(jù)相相應(yīng)應(yīng)的的條條件件標(biāo)標(biāo)志志來來判判斷斷是是否否執(zhí)執(zhí)行行。。(1)指指令的語語法格式式CMP{<cond>}<Rn>,<shifter_operand>(2)CMP指指令舉例例13.CMP指指令CMN((CompareNegative)指指令使用用寄存器器Rn的的值減去去operand2的的負(fù)數(shù)值值(加上上operand2)),根據(jù)據(jù)操作的的結(jié)果更更新CPSR中中相應(yīng)的的條件標(biāo)標(biāo)志位,,以便后后面的指指令根據(jù)據(jù)相應(yīng)的的條件標(biāo)標(biāo)志來判判斷是否否執(zhí)行。。(1)指指令的語語法格式式CMN{<cond>}<Rn>,<shifter_operand>(2)CMN指指令舉例例14.CMN指指令ORR(LogicalOR)為邏輯或或操作指令令,它將第第2個(gè)源操作數(shù)數(shù)shifter_operand的值與寄存存器Rn的值按位做做“邏輯或或”操作,,結(jié)果保存存到Rd中。(1)指令的語語法格式ORR{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)ORR指令舉例15.ORR指令BIC(BitClear)位清零指指令,將寄寄存器Rn的值與第2個(gè)源操作數(shù)數(shù)shifter_operand的值的反碼碼按位做““邏輯與””操作,結(jié)結(jié)果保存到到Rd中。(1)指令的語語法格式BIC{<cond>}{S}<Rd>,<Rn>,<shifter_operand>(2)BIC指令舉例16.BIC位清零零指令A(yù)RM乘法法指令完成成兩個(gè)數(shù)據(jù)據(jù)的乘法。。兩個(gè)32位二進(jìn)制制數(shù)相乘的的結(jié)果是64位的積積。在有些些ARM的的處理器版版本中,將將乘積的結(jié)結(jié)果保存到到兩個(gè)獨(dú)立立的寄存器器中。另外外一些版本本只將最低低有效32位存放到到一個(gè)寄存存器中。2.8.2乘法法指令表2-13 各種種形式乘法法指令的功功能操作碼[23∶21]助記符意義操作000MUL乘(保留32位結(jié)果)Rd:=(Rm×Rs)[31∶0]001MLA乘—累加(32位結(jié)果)Rd:=(Rm×Rs+Rn)[31∶0]100UMULL無符號(hào)數(shù)長乘RdHi:RdLo:=Rm×Rs101UMLAL無符號(hào)長乘—累加RdHi:RdLo:+=Rm×Rs110SMULL有符號(hào)數(shù)長乘RdHi:RdLo:=Rm×Rs111SMLAL有符號(hào)數(shù)長乘—累加RdHi:RdLo:+=Rm×RsMUL(Multiply))32位乘乘法指令將將Rm和Rs中的值值相乘,結(jié)結(jié)果的最低低32位保保存到Rd中。(1)指令令的語法格格式MUL{<cond>}{S}<Rd>,<Rm>,<Rs>(2)指令令舉例1.MUL指令MLA(MultiplyAccumulate)32位乘—累加指令將將Rm和Rs中的值相乘乘,再將乘乘積加上第第3個(gè)操作數(shù),,結(jié)果的最最低32位保存到Rd中。(1)指令的語語法格式MLA{<cond>}{S}<Rd>,<Rm>,<Rs>,<Rn>(2)指令舉例例2.MLA乘—累加加指令UMULL(UnsignedMultiplyLong)為64位無符號(hào)乘乘法指令。。它將Rm和Rs中的值做無無符號(hào)數(shù)相相乘,結(jié)果果的低32位保存到RsLo中,高32位保存到RdHi中。(1)指令的語語法格式UMULL{<cond>}{S}<RdLo>,<RdHi>,<Rm>,<Rs>(2)指令舉例例3.UMULL指令令UMLAL(UnsignedMultiplyAccumulateLong)為64位無符號(hào)長長乘—累加指令。。指令將Rm和Rs中的值做無無符號(hào)數(shù)相相乘,64位乘積與RdHi、RdLo相加,結(jié)果果的低32位保存到RsLo中,高32位保存到RdHi中。(1)指令的語語法格式UMALL{<cond>}{S}<RdLo>,<RdHi>,<Rm>,<Rs>(2)指令舉例例4.UMLAL指令令SMULL(SignedMultiplyLong)為64位有符號(hào)長長乘法指令令。指令將將Rm和Rs中的值做有有符號(hào)數(shù)相相乘,結(jié)果果的低32位保存到RsLo中,高32位保存到RdHi中。(1)指令的語語法格式SMULL{<cond>}{S}<RdLo>,<RdHi>,<Rm>,<Rs>(2)指指令令舉舉例例5..SMULL指指令令SMLAL(SignedMultiplyAccumulateLong)為為64位有有符符號(hào)號(hào)長長乘乘—累加加指指令令。。指指令令將將Rm和Rs中的的值值做做有有符符號(hào)號(hào)數(shù)數(shù)相相乘乘,,64位乘乘積積與與RdHi、RdLo相加加,,結(jié)結(jié)果果的的低低32位保保存存到到RsLo中,,高高32位保保存存到到RdHi中。。(1)指指令令的的語語法法格格式式SMLAL{<cond>}{S}<RdLo>,<RdHi>,<Rm>,<Rs>(2)指指令令舉舉例例6..SMLAL指指令令Load/Store內(nèi)存訪訪問指令令在ARM寄存存器和存存儲(chǔ)器之之間傳送送數(shù)據(jù)。。ARM指令中中有3種種基本的的數(shù)據(jù)傳傳送指令令。2.8.3Load/Store指令令這些指令令在ARM寄存存器和存存儲(chǔ)器之之間提供供更靈活活的單數(shù)數(shù)據(jù)項(xiàng)傳傳送方式式。數(shù)據(jù)據(jù)項(xiàng)可以以是字節(jié)節(jié)、16位半字字或32位字。。1.單寄寄存器Load/Store指令((SingleRegister)這些指令令的靈活活性比單單寄存器器傳送指指令差,,但可以以使大量量的數(shù)據(jù)據(jù)更有效效地傳送送。它們們用于進(jìn)進(jìn)程的進(jìn)進(jìn)入和退退出、保保存和恢恢復(fù)工作作寄存器器以及復(fù)復(fù)制存儲(chǔ)儲(chǔ)器中的的一塊數(shù)數(shù)據(jù)。2.多寄寄存器Load/Store內(nèi)存訪訪問指令令這些指令令允許寄寄存器和和存儲(chǔ)器器中的數(shù)數(shù)值進(jìn)行行交換,,在一條條指令中中有效地地完成Load/Store操作。。它們?cè)谠谟脩艏?jí)級(jí)編程中中很少用用到。它它的主要要用途是是在多處處理器系系統(tǒng)中實(shí)實(shí)現(xiàn)信號(hào)號(hào)量(Semaphores)的操操作,以以保證不不會(huì)同時(shí)時(shí)訪問公公用的數(shù)數(shù)據(jù)結(jié)構(gòu)構(gòu)。3.單寄寄存器交交換指令令(SingleRegisterSwap)單單寄存器器的Load/Store指指令表2-14單單寄寄存器Load/Store指令指令作用操作LDR把一個(gè)字裝入一個(gè)寄存器Rd←mem32[address]STR將存儲(chǔ)器中的字保存到寄存器Rd→mem32[address]LDRB把一個(gè)字節(jié)裝入一個(gè)寄存器Rd←mem8[address]STRB將寄存器中的低8位字節(jié)保存到存儲(chǔ)器Rd→mem8[address]LDRH把一個(gè)半字裝入一個(gè)寄存器Rd←mem16[address]STRH將寄存器中的低16位半字保存到存儲(chǔ)器Rd→mem16[address]LDRBT用戶模式下將一個(gè)字節(jié)裝入寄存器Rd←mem8[address]underusermodeSTRBT用戶模式下將寄存器中的低8位字節(jié)保存到存儲(chǔ)器Rd→mem8[address]underusermodeLDRT用戶模式下把一個(gè)字裝入一個(gè)寄存器Rd←mem32[address]underusermodeSTRT用戶模式下將存儲(chǔ)器中的字保存到寄存器Rd→mem32[address]]underusermodeLDRSB把一個(gè)有符號(hào)字節(jié)裝入一個(gè)寄存器Rd←sign{mem8[address]}LDRSH把一個(gè)有符號(hào)半字裝入一個(gè)寄存器Rd←sign{mem16[address]}LDR指指令用于于從內(nèi)存存中將一一個(gè)32位的字字讀取到到目標(biāo)寄寄存器。。(1)指指令的語語法格式式LDR{<cond>}<Rd>,<addr_mode>(2)指指令舉例例1.LDR指令令STR指指令用于于將一個(gè)個(gè)32位位的字?jǐn)?shù)數(shù)據(jù)寫入入到指令令中指定定的內(nèi)存存單元。。(1)指指令的語語法格式式STR{<cond>}<Rd>,<addr_mode>(2)指指令舉例例2.STR指令令LDRB指令根據(jù)據(jù)addr_mode所確定的的地址模模式將一一個(gè)8位字節(jié)讀讀取到指指令中的的目標(biāo)寄寄存器Rd。指令的語語法格式式:LDR{<cond>}B<Rd>,<addr_mode>3.LDRB指令STRB指令從寄存器器中取出指定定的8位字節(jié)放入寄寄存器的低8位,并將寄存存器的高位補(bǔ)補(bǔ)0。指令的語法格格式:STR{<cond>}B<Rd>,<addr_mode>4.STRB指令LDRH指令用于從從內(nèi)存中將將一個(gè)16位的半字讀讀取到目標(biāo)標(biāo)寄存器。。如果指令的的內(nèi)存地址址不是半字字節(jié)對(duì)齊的的,指令的的執(zhí)行結(jié)果果不可預(yù)知知。指令的語法法格式:LDR{<cond>}H<Rd>,<addr_mode>5.LDRH指令STRH指指令從寄存存器中取出出指定的16位半字字放入寄存存器的低16位,并并將寄存器器的高位補(bǔ)補(bǔ)0。指令的語法法格式:STR{<cond>}H<Rd>,<addr_mode>6.STRH指令多多寄存器器的Load/Store內(nèi)內(nèi)存訪問指指令表2-15多多寄存器的的Load/Store內(nèi)存存訪問指令令指令作用操作LDM裝載多個(gè)寄存器{Rd}*N←mem32[startaddress+4*N]STM保存多個(gè)寄存器{Rd}*N→mem32[startaddress+4*N]LDM指令令將數(shù)據(jù)從從連續(xù)的內(nèi)內(nèi)存單元中中讀取到指指令中指定定的寄存器器列表中的的各寄存器器中。當(dāng)PC包包含含在在LDM指指令令的的寄寄存存器器列列表表中中時(shí)時(shí),,指指令令從從內(nèi)內(nèi)存存中中讀讀取取的的字字?jǐn)?shù)數(shù)據(jù)據(jù)將將被被作作為為目目標(biāo)標(biāo)地地址址值值,,指指令令執(zhí)執(zhí)行行后后程程序序?qū)膹哪磕繕?biāo)標(biāo)地地址址處處開開始始執(zhí)執(zhí)行行,,從從而而實(shí)實(shí)現(xiàn)現(xiàn)了了指指令令的的跳跳轉(zhuǎn)轉(zhuǎn)。。指令的語語法格式式:LDM{<cond>}<addressing_mode><Rn>{!},<registers>1.LDM指令令LDM指指令將數(shù)數(shù)據(jù)從連連續(xù)的內(nèi)內(nèi)存單元元中讀取取到指令令中指定定的寄存存器列表表中的各各寄存器器中。指令的語語法格式式:LDM{<cond>}<addressing_mode><Rn>,<registers_without_pc>???STM指指令將指指令中寄寄存器列列表中的的各寄存存器數(shù)值值寫入到到連續(xù)的的內(nèi)存單單元中。。主要用用于塊數(shù)數(shù)據(jù)的寫寫入、數(shù)數(shù)據(jù)棧操操作及進(jìn)進(jìn)入子程程序時(shí)保保存相關(guān)關(guān)寄存器器的操作作。指令的語法法格式:STM{<cond>}<addressing_mode><Rn>{!},<registers>2.STM指令STM指令令將指令中中寄存器列列表中的各各寄存器數(shù)數(shù)值寫入到到連續(xù)的內(nèi)內(nèi)存單元中中。主要用用于塊數(shù)據(jù)據(jù)的寫入、、數(shù)據(jù)棧操操作及進(jìn)入入子程序時(shí)時(shí)保存相關(guān)關(guān)寄存器等等操作。指令的語法法格式:STM{<cond>}<addressing_mode><Rn>,<registers>?LDM/STM批量量加載/存存儲(chǔ)指令可可以實(shí)現(xiàn)在在一組寄存存器和一塊塊連續(xù)的內(nèi)內(nèi)存單元之之間傳輸數(shù)數(shù)據(jù)。LDM為加載載多個(gè)寄存存器,STM為存儲(chǔ)儲(chǔ)多個(gè)寄存存器。允許許一條指令令傳送16個(gè)寄存器器的任何子子集或所有有寄存器。。指令格式式如下:LDM{cond}<模式>Rn{!},regist{??}STM{cond}<模式>Rn{!},regist{??}數(shù)數(shù)據(jù)傳送送指令應(yīng)用用表2-16多多寄存器的的Load/Store內(nèi)存存訪問指令令映射向上生長向下生長滿空滿空增加之前STMIBLDMIBSTMFALDMED之后STMIALDMIASTMEALDMFD增加之前LDMDBSTMDBLDMEASTMFD之后LDMDASTMDALDMFASTMED交換指令是是Load/Store指令令的一種特特例,它把把一個(gè)寄存存器單元的的內(nèi)容與寄寄存器內(nèi)容容交換。交交換指令是是一個(gè)原子子操作(AtomicOperation)),也就是是說,在連連續(xù)的總線線操作中讀讀/寫一個(gè)個(gè)存儲(chǔ)單元元,在操作作期間阻止止其他任何何指令對(duì)該該存儲(chǔ)單元元的讀/寫寫。交換指令如如表2-17所示。。2.8.4單數(shù)數(shù)據(jù)交換指指令表2-17交交換指令SWP指令作用操作SWP字交換tmp=men32[Rn]mem32[Rn]=RmRd=tmpSWPB字節(jié)交換tmp=men8[Rn]mem8[Rn]=RmRd=tmpSWP指令用于將將內(nèi)存中的的一個(gè)字單單元和一個(gè)個(gè)指定寄存存器的值相相交換。指令的語法法格式:SWP{<cond>}<Rd>,<Rm>,[<Rn>]1.SWP字交換指指令SWPB指指

溫馨提示

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