嵌入式系統(tǒng)課件2_第1頁(yè)
嵌入式系統(tǒng)課件2_第2頁(yè)
嵌入式系統(tǒng)課件2_第3頁(yè)
嵌入式系統(tǒng)課件2_第4頁(yè)
嵌入式系統(tǒng)課件2_第5頁(yè)
已閱讀5頁(yè),還剩54頁(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)介

ARM體系結(jié)構(gòu)ARM體系結(jié)構(gòu)簡(jiǎn)介ARM微處理器結(jié)構(gòu)ARM微處理器的寄存器結(jié)構(gòu)ARM微處理器的異常處理ARM的存儲(chǔ)結(jié)構(gòu)ARM微處理器的指令系統(tǒng)ARM微處理器的接口ARM體系結(jié)構(gòu)簡(jiǎn)介一個(gè)典型的ARM體系結(jié)構(gòu)方框圖如下圖所示,包含有32位ALU、31個(gè)32位通用寄存器及6位狀態(tài)寄存器、32×8位乘法器32×32位桶形移位寄存器、指令譯碼及控制邏輯、指令流水線和數(shù)據(jù)/地址寄存器等。ARM體系結(jié)構(gòu)簡(jiǎn)介1.ALUARM體系結(jié)構(gòu)的ALU與常用的ALU邏輯結(jié)構(gòu)基本相同,由兩個(gè)操作數(shù)鎖存器、加法器、邏輯功能、結(jié)果及零檢測(cè)邏輯構(gòu)成。ALU的最小數(shù)據(jù)通路周期包含寄存器讀時(shí)間、移位器延遲、ALU延遲、寄存器寫建立時(shí)間、雙相時(shí)鐘間非重疊時(shí)間等幾部分。2.桶形移位寄存器

ARM采用了32×32位桶形移位寄存器,左移/右移n位、環(huán)移n位和算術(shù)右移n位等都可以一次完成,可以有效的減少移位的延遲時(shí)間。在桶形移位寄存器中,所有的輸入端通過(guò)交叉開(kāi)關(guān)(Crossbar)與所有的輸出端相連。交叉開(kāi)關(guān)采用NMOS晶體管來(lái)實(shí)現(xiàn)。3.高速乘法器

ARM為了提高運(yùn)算速度,采用兩位乘法的方法,2位乘法可根據(jù)乘數(shù)的2位來(lái)實(shí)現(xiàn)“加-移位”運(yùn)算。ARM的高速乘法器采用32×8位的結(jié)構(gòu),完成32×2位乘法也只需5個(gè)時(shí)鐘周期。ARM體系結(jié)構(gòu)簡(jiǎn)介4.浮點(diǎn)部件在ARM體系結(jié)構(gòu)中,浮點(diǎn)部件作為選件可根據(jù)需要選用,F(xiàn)PA10浮點(diǎn)加速器以協(xié)處理器方式與ARM相連,并通過(guò)協(xié)處理器指令的解釋來(lái)執(zhí)行。浮點(diǎn)的Load/Store指令使用頻度要達(dá)到67%,故FPA10內(nèi)部也采用Load/Store結(jié)構(gòu),有8個(gè)80位浮點(diǎn)寄存器組,指令執(zhí)行也采用流水線結(jié)構(gòu)。5.控制器

ARM的控制器采用硬接線的可編程邏輯陣列PLA,其輸入端有14根、輸出端有40根,分散控制Load/Store多路、乘法器、協(xié)處理器以及地址、寄存器ALU和移位器。6.寄存器

ARM內(nèi)含37個(gè)寄存器,包括31個(gè)通用32位寄存器和6個(gè)狀態(tài)寄存器。ARM微處理器結(jié)構(gòu)

ARM9系列微處理器采用5級(jí)整數(shù)流水線,指令執(zhí)行效率更高。提供1.1MIPS/MHz的哈佛結(jié)構(gòu)。支持?jǐn)?shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。全性能的MMU,支持WindowsCE、Linux、PalmOS等多種主流嵌入式操作系統(tǒng)。MPU支持實(shí)時(shí)操作系統(tǒng)。ARM微處理器的寄存器結(jié)構(gòu)ARM處理器共有37個(gè)寄存器,被分為若干個(gè)組(BANK),這些寄器包括:●31個(gè)通用寄存器,包括程序計(jì)數(shù)器(PC指針),均為32位的寄存器?!?個(gè)狀態(tài)寄存器,用以標(biāo)識(shí)CPU的工作狀態(tài)及程序的運(yùn)行狀態(tài),均為32位,目前只使用了其中的一部分。ARM微處理器的寄存器結(jié)構(gòu)ARM微處理器支持7種運(yùn)行模式,分別為:●usr(用戶模式):ARM處理器正常程序執(zhí)行模式。●fiq(快速中斷模式):用于高速數(shù)據(jù)傳輸或通道處理●irq(外部中斷模式):用于通用的中斷處理●svc(管理模式):操作系統(tǒng)使用的保護(hù)模式ARM微處理器的寄存器結(jié)構(gòu)ARM微處理器支持7種運(yùn)行模式,分別為:●abt(數(shù)據(jù)訪問(wèn)終止模式):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。●sys(系統(tǒng)模式):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。●und(未定義指令中止模式):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。ARM微處理器的寄存器結(jié)構(gòu)

ARM微處理器的運(yùn)行模式可以通過(guò)軟件改變,也可以通過(guò)外部中斷或異常處理改變。大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時(shí),某些被保護(hù)的系統(tǒng)資源是不能被訪問(wèn)的。除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權(quán)模式(PrivilegedModes);其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式(ExceptionModes),常用于處理中斷或異常,以及需要訪問(wèn)受保護(hù)的系統(tǒng)資源等情況。

ARM處理器在每一種處理器模式下均有一組相應(yīng)的寄存器與之對(duì)應(yīng)。ARM微處理器的寄存器結(jié)構(gòu)ARM處理器有32位ARM和16位Thumb兩種工作狀態(tài)。在32位ARM狀態(tài)下執(zhí)行字對(duì)齊的ARM指令,在16位Thumb狀態(tài)下執(zhí)行半字對(duì)齊的Thumb指令。ARM處理器在兩種工作狀態(tài)之間可以切換,切換不影響處理器的模式或寄存器的內(nèi)容。ARM微處理器的異常處理在一個(gè)正常的程序流程執(zhí)行過(guò)程中,由內(nèi)部或外部源產(chǎn)生的一個(gè)事件使正常的程序產(chǎn)生暫時(shí)的停止時(shí),稱之為異常。多個(gè)異常同時(shí)發(fā)生時(shí),處理器將會(huì)按固定的優(yōu)先級(jí)進(jìn)行處理。ARM體系結(jié)構(gòu)支持7種類型的異常,異常類型、異常處理模式和優(yōu)先級(jí)如表2.4.1所示。異常出現(xiàn)后,強(qiáng)制從異常類型對(duì)應(yīng)的固定存儲(chǔ)器地址開(kāi)始執(zhí)行程序。這些固定的地址稱為異常向量(ExceptionVectors)。ARM微處理器的異常處理異常類型異常進(jìn)入模式地址(異常向量)優(yōu)先級(jí)復(fù)位復(fù)位管理模式0x0000,00001(最高)未定義指令未定義指令未定義模式0x0000,00046(最低)軟件中斷軟件中斷管理模式0x0000,00086(最低)指令預(yù)取中止中止(預(yù)取指令)中止模式0x0000,000C5數(shù)據(jù)中止中止(數(shù)據(jù))中止模式0x0000,00102IRQ(外部中斷請(qǐng)求)IRQIRQ0x0000,00184FIQ(快速中斷請(qǐng)求)FIQFIQ0x0000,001C3表1ARM體系結(jié)構(gòu)的異常類型和異常處理模式ARM微處理器的異常處理異常類型的含義:(1)復(fù)位當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,ARM處理器立刻停止執(zhí)行當(dāng)前指令。復(fù)位后,ARM處理器在禁止中斷的管理模式下,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行(從地址0x00000000或0xFFFF0000開(kāi)始執(zhí)行指令)。(2)未定義指令異常當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常。當(dāng)ARM處理器執(zhí)行協(xié)處理器指令時(shí),它必須等待任一外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒(méi)有響應(yīng),就會(huì)出現(xiàn)未定義指令異常。若試圖執(zhí)行未定義的指令,也會(huì)出現(xiàn)未定義指令異常。未定義指令異??捎糜谠跊](méi)有物理協(xié)處理器(硬件)的系統(tǒng)上,對(duì)協(xié)處理器進(jìn)行軟件仿真,或在軟件仿真時(shí)進(jìn)行指令擴(kuò)展。ARM微處理器的異常處理異常類型的含義:(1)復(fù)位當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,ARM處理器立刻停止執(zhí)行當(dāng)前指令。復(fù)位后,ARM處理器在禁止中斷的管理模式下,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行(從地址0x00000000或0xFFFF0000開(kāi)始執(zhí)行指令)。(2)未定義指令異常當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異常。當(dāng)ARM處理器執(zhí)行協(xié)處理器指令時(shí),它必須等待任一外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒(méi)有響應(yīng),就會(huì)出現(xiàn)未定義指令異常。若試圖執(zhí)行未定義的指令,也會(huì)出現(xiàn)未定義指令異常。未定義指令異??捎糜谠跊](méi)有物理協(xié)處理器(硬件)的系統(tǒng)上,對(duì)協(xié)處理器進(jìn)行軟件仿真,或在軟件仿真時(shí)進(jìn)行指令擴(kuò)展。ARM微處理器的異常處理(3)軟件中斷異常(SoftWareInterrupt,SWI)軟件中斷異常由執(zhí)行SWI指令產(chǎn)生,可使用該異常機(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用,用于用戶模式下的程序調(diào)用特權(quán)操作指令,以請(qǐng)求特定的管理(操作系統(tǒng))函數(shù)。(4)指令預(yù)取中止若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn),存儲(chǔ)器會(huì)向處理器發(fā)出存儲(chǔ)器中止(Abort)信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。(5)數(shù)據(jù)中止(數(shù)據(jù)訪問(wèn)存儲(chǔ)器中止)若處理器數(shù)據(jù)訪問(wèn)指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn)時(shí),產(chǎn)生數(shù)據(jù)中止異常。存儲(chǔ)器系統(tǒng)發(fā)出存儲(chǔ)器中止信號(hào)。響應(yīng)數(shù)據(jù)訪問(wèn)(加載或存儲(chǔ))激活中止,標(biāo)記數(shù)據(jù)為無(wú)效。在后面的任何指令或異常改變CPU狀態(tài)之前,數(shù)據(jù)中止異常發(fā)生。ARM微處理器的異常處理(6)外部中斷請(qǐng)求(IRQ)異常當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且CPSR中的I位為0時(shí),產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過(guò)該異常請(qǐng)求中斷服務(wù)。IRQ異常的優(yōu)先級(jí)比FIQ異常的低。當(dāng)進(jìn)入FIQ處理時(shí),會(huì)屏蔽掉IRQ異常。(7)快速中斷請(qǐng)求(FIQ)異常當(dāng)處理器的快速中斷請(qǐng)求引腳有效,且CPSR中的F位為0時(shí),產(chǎn)生FIQ異常。FIQ支持?jǐn)?shù)據(jù)傳送和通道處理,并有足夠的私有寄存器。ARM微處理器的異常處理異常的響應(yīng)過(guò)程當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處理器會(huì)執(zhí)行以下幾步操作:①將下一條指令的地址存入相應(yīng)連接寄存器LR,以便程序在處理異常返回時(shí)能從正確的位置重新開(kāi)始執(zhí)行。②將CPSR狀態(tài)傳送到相應(yīng)的SPSR中。③根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。④強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,跳轉(zhuǎn)到相應(yīng)的異常處理程序。ARM微處理器的異常處理從異常返回:①將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。②將SPSR內(nèi)容送回CPSR中。③若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除。在應(yīng)用程序的設(shè)計(jì)中,異常處理采用的方式是在異常向量表中的特定位置放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序。ARM的存儲(chǔ)結(jié)構(gòu)ARM體系結(jié)構(gòu)使用2^32個(gè)字節(jié)的單一、線性地址空間。對(duì)于字對(duì)齊的地址A,地址空間規(guī)則要求如下:●地址位于A的字由地址為A、A+1、A+2和A+3的字節(jié)組成;●地址位于A的半字由地址為A和A+1的字節(jié)組成;●地址位于A+2的半字由地址為A+2和A+3的字節(jié)組成;●地址位于A的字由地址為A和A+2的半字組成。ARM的存儲(chǔ)結(jié)構(gòu)ARM體系結(jié)構(gòu)使用2^32個(gè)字節(jié)的單一、線性地址空間。對(duì)于字對(duì)齊的地址A,地址空間規(guī)則要求如下:●地址位于A的字由地址為A、A+1、A+2和A+3的字節(jié)組成;●地址位于A的半字由地址為A和A+1的字節(jié)組成;●地址位于A+2的半字由地址為A+2和A+3的字節(jié)組成;●地址位于A的字由地址為A和A+2的半字組成。

ARM存儲(chǔ)系統(tǒng)可以使用小端存儲(chǔ)或者大端存儲(chǔ)兩種方法,大端存儲(chǔ)和小端存儲(chǔ)格式ARM的存儲(chǔ)結(jié)構(gòu)ARM體系結(jié)構(gòu)通常希望所有的存儲(chǔ)器訪問(wèn)能適當(dāng)?shù)貙?duì)齊。特別是用于字訪問(wèn)的地址通常應(yīng)當(dāng)字對(duì)齊,用于半字訪問(wèn)的地址通常應(yīng)當(dāng)半字對(duì)齊。未按這種方式對(duì)齊的存儲(chǔ)器訪問(wèn)稱作非對(duì)齊的存儲(chǔ)器訪問(wèn)。ARM處理器有的帶有指令Cache和數(shù)據(jù)Cache,但不帶有片內(nèi)RAM和片內(nèi)ROM。系統(tǒng)所需的RAM和ROM(包括Flash)都通過(guò)總線外接。由于系統(tǒng)的地址范圍較大(2^32=4GB),有的片內(nèi)還帶有存儲(chǔ)器管理單元MMU(MemoryManagementUnit)。ARM的存儲(chǔ)結(jié)構(gòu)ARM系統(tǒng)使用存儲(chǔ)器映射I/O。I/O口使用特定的存儲(chǔ)器地址,當(dāng)從這些地址加載(用于輸入)或向這些地址存儲(chǔ)(用于輸出)時(shí),完成I/O功能。然而,存儲(chǔ)器映射I/O位置的行為通常不同于對(duì)一個(gè)正常存儲(chǔ)器位置所期望的行為。例如,從一個(gè)正常存儲(chǔ)器位置兩次連續(xù)的加載,每次返回的值相同。而對(duì)于存儲(chǔ)器映射I/O位置,第2次加載的返回值可以不同于第1次加載的返回值。ARM微處理器的指令系統(tǒng)基本尋址方式:1.寄存器尋址操作數(shù)的值在寄存器中,指令中的地址碼字段給出的是寄存器編號(hào),寄存器的內(nèi)容是操作數(shù),指令執(zhí)行時(shí)直接取出寄存器值操作。例如指令:

MOVR1,R2;R1←R2SUBR0,R1,R2;R0←R1-R2ARM微處理器的指令系統(tǒng)2.立即尋址 在立即尋址指令中數(shù)據(jù)就包含在指令當(dāng)中,立即尋址指令的操作碼字段后面的地址碼部分就是操作數(shù)本身,取出指令也就取出了可以立即使用的操作數(shù)(也稱為立即數(shù))。立即數(shù)要以“#”為前綴,表示16進(jìn)制數(shù)值時(shí)以“0x”表示。 例如指令:

ADDR0,R0,#1;R0←R0+1 MOVR0,#0xff00;R0←0xff00ARM微處理器的指令系統(tǒng)3.寄存器移位尋址 寄存器移位尋址是ARM指令集特有的尋址方式。第2個(gè)寄存器操作數(shù)在與第1個(gè)操作數(shù)結(jié)合之前,先進(jìn)行移位操作。 例如指令:

MOVR0,R2,LSL#3;R2的值左移3位,結(jié)果放入R0,即R0=R2*8 ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相與操作,結(jié)果放入R1ARM微處理器的指令系統(tǒng)4.寄存器間接尋址 指令中的地址碼給出的是一個(gè)通用寄存器編號(hào),所需要的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針,操作數(shù)存放在存儲(chǔ)器中。 例如指令:

LDRR0,[R1];R0←[R1](將R1中的數(shù)值作為地址,取出此地址中的數(shù)據(jù)保存在R0中)

STRR0,[R1];[R1]←R0ARM微處理器的指令系統(tǒng)5.變址尋址 變址尋址是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址,變址尋址用于訪問(wèn)基址附近的存儲(chǔ)單元,常用于查表,數(shù)組操作,功能部件寄存器訪問(wèn)等。 例如指令:

LDRR2,[R3,#4];R2←[R3+4](將R3中的數(shù)值加4作為地址,取出此地址的數(shù)值保存在R2中)

STRR1,[R0,#-2];[R0-2]←R1(將R0中的數(shù)值減2作為地址,把R1中的內(nèi)容保存到此地址位置)ARM微處理器的指令系統(tǒng)6.多寄存器尋址 采用多寄存器尋址方式,一條指令可以完成多個(gè)寄存器值的傳送,這種尋址方式用一條指令最多可以完成16個(gè)寄存器值的傳送。例如指令:

LDMIAR0,{R1,R2,R3,R5};R1←[R0]

;R2←[R0+4]

;R3←[R0+8]

;R4←[R0+12]ARM微處理器的指令系統(tǒng)7.堆棧尋址 堆棧是一種數(shù)據(jù)結(jié)構(gòu),堆棧是特定順序進(jìn)行存取的存儲(chǔ)區(qū),操作順序分為“后進(jìn)先出”和“先進(jìn)后出”,堆棧尋址時(shí)隱含的,它使用一個(gè)專門的寄存器(堆棧指針)指向一塊存儲(chǔ)區(qū)域(堆棧),指針?biāo)赶虻拇鎯?chǔ)單元就是堆棧的棧頂。存儲(chǔ)器生長(zhǎng)堆??煞譃閮煞N: ●向上生長(zhǎng):向高地址方向生長(zhǎng),稱為遞增堆棧(AscendingStack)。 ●向下生長(zhǎng):向低地址方向生長(zhǎng),稱為遞減堆棧(DecendingStack)。ARM微處理器的指令系統(tǒng)7.堆棧尋址 堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧(FullStack);堆棧指針指向下一個(gè)要放入的空位置,稱為空堆棧(EmptyStack)。 這樣就有四種類型的堆棧工作方式,ARM微處理器支持這四種類型的堆棧工作方式:滿遞增堆棧、滿遞減堆棧、空遞增堆棧、空遞減堆棧。ARM微處理器的指令系統(tǒng)8.塊復(fù)制尋址 塊復(fù)制尋址用于把一塊從存儲(chǔ)器的某一位置復(fù)制到另一位置,是一個(gè)多寄存器傳送指令。 例如指令:

STMIAR0!,{R1-R7};將R1~R7的數(shù)據(jù)保存到存儲(chǔ)器中,存儲(chǔ)器指針在保存第一個(gè)值之后增加,增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。

STMDAR0!,{R1-R7};將R1~R7的數(shù)據(jù)保存到存儲(chǔ)器中,存儲(chǔ)器指針在保存第一個(gè)值之后增加,增長(zhǎng)方向?yàn)橄蛳略鲩L(zhǎng)。ARM微處理器的指令系統(tǒng)9.相對(duì)尋址 相對(duì)尋址是變址尋址的一種變通,由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。 例如指令:

BLROUTE1;調(diào)用到ROUTE1子程序

BEQLOOP;條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處

…LOOPMOVR2,#2…ROUTE1…ARM微處理器的指令系統(tǒng)ARM指令集基本格式

<opcode>{<cond>}{S}<Rd>,<Rn>{,<opcode2>}

其中,<>內(nèi)的項(xiàng)是必須的,{}內(nèi)的項(xiàng)是可選的。opcode

指令助記符,如LDR,STR等;cond

執(zhí)行條件,如EQ,NE等;S是否影響CPSR寄存器的值,書寫時(shí)影響CPSR,否則不影響;Rd目標(biāo)寄存器;Rn

第一個(gè)操作數(shù)的寄存器,operand2第二個(gè)操作數(shù)。ARM微處理器的指令系統(tǒng)<cond>——條件碼 幾乎所有的ARM指令都包含一個(gè)可選擇的條件碼,即{<cond>}。使用指令條件碼,可實(shí)現(xiàn)高效的邏輯操作,提高代碼效率。ARM條件碼如表2所示。ARM微處理器的指令系統(tǒng)操作碼[31:28]條件碼助記符標(biāo)志含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無(wú)符號(hào)數(shù)大于或等于0011CC/LOC=0無(wú)符號(hào)數(shù)小于0100MIN=1負(fù)數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒(méi)有溢出表2ARM指令條件碼ARM微處理器的指令系統(tǒng)1000HIC=1,Z=0無(wú)符號(hào)數(shù)大于1001LSC=0,Z=1無(wú)符號(hào)數(shù)小于或等于1010GEN=V帶符號(hào)數(shù)大于或等于1011LTN!=V帶符號(hào)數(shù)小于1100GTZ=0,N=V帶符號(hào)數(shù)大于1101LEZ=1,N!=V帶符號(hào)數(shù)小于或等于1110AL任何無(wú)條件執(zhí)行(指令默認(rèn)條件)ARM微處理器的指令系統(tǒng)ARM存儲(chǔ)器訪問(wèn)指令

ARM微處理器支持加載/存儲(chǔ)指令用于在寄存器和存儲(chǔ)器之間傳送數(shù)據(jù),加載指令用于將存儲(chǔ)器中的數(shù)據(jù)傳送到寄存器,存儲(chǔ)指令則完成相反的操作。ARM的加載/存儲(chǔ)指令是可以實(shí)現(xiàn)字、半字、無(wú)符/有符字節(jié)操作;批量加載/存儲(chǔ)指令可實(shí)現(xiàn)一條指令加載/存儲(chǔ)多個(gè)寄存器的內(nèi)容;SWP指令是一條寄存器和存儲(chǔ)器內(nèi)容交換的指令,可用于信號(hào)量操作等。

ARM存儲(chǔ)訪問(wèn)指令見(jiàn)表3。助記符說(shuō)明操作條件碼位置LDRRd,addressing

加載字?jǐn)?shù)據(jù)

Rd←[addressing],addressing

索引

LDR{cond}LDRBRd,addressing

加載無(wú)符字節(jié)數(shù)據(jù)

Rd←[addressing],addressing

索引

LDR{cond}B

LDRTRd,addressing以用戶模式加載字?jǐn)?shù)據(jù)

Rd←[addressing],addressing

索引

LDR{cond}T

LDRBTRd,addressing以用戶模式加載無(wú)符號(hào)字?jǐn)?shù)據(jù)

Rd←[addressing],addressing

索引LDR{cond}BT

LDRHRd,addressing加載無(wú)符半字?jǐn)?shù)據(jù)

Rd←[addressing],addressing

索引

LDR{cond}H

表3ARM存儲(chǔ)訪問(wèn)指令表STRBRd,addressing存儲(chǔ)字節(jié)數(shù)據(jù)

[addressing]←Rd,addressing

索引

STR{cond}B

STRTRd,addressing以用戶模式存儲(chǔ)字?jǐn)?shù)據(jù)

[addressing]←Rd,addressing

索引

STR{cond}T

SRTBTRd,addressing以用戶模式存儲(chǔ)字節(jié)數(shù)據(jù)

[addressing]←Rd,addressing

索引

STR{cond}BT

STRHRd,addressing存儲(chǔ)半字?jǐn)?shù)據(jù)

[addressing]←Rd,addressing

索引

STR{cond}H

LDM{mode}Rn{!},reglist

批量(寄存器)加載

reglist←[Rn…],Rn

回存等

LDM{cond}{more}STM{mode}Rn{!},rtglist

批量(寄存器)存儲(chǔ)

[Rn…]←reglist,Rn

回存等

STM{cond}{more}SWPRd,Rm,Rn

寄存器和存儲(chǔ)器字?jǐn)?shù)據(jù)交換

Rd←[Rd],[Rn]←[Rm](Rn≠Rd

或Rm)SWP{cond}SWPBRd,Rm,Rn

寄存器和存儲(chǔ)器字節(jié)數(shù)據(jù)交換

Rd←[Rd],[Rn]←[Rm](Rn≠Rd

或Rm)SWP{cond}B

ARM微處理器的指令系統(tǒng)ARM數(shù)據(jù)處理指令 數(shù)據(jù)處理指令可分為數(shù)據(jù)傳送指令、算術(shù)邏輯運(yùn)算指令和比較指令等。數(shù)據(jù)傳送指令用于在寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)的雙向傳輸。所有ARM數(shù)據(jù)處理指令均可選擇使用S后綴,以影響狀態(tài)標(biāo)志。比較指令不需要后綴S,它們會(huì)直接影響狀態(tài)標(biāo)志。算術(shù)邏輯運(yùn)算指令完成常用的算術(shù)與邏輯的運(yùn)算,該類指令不但將運(yùn)算結(jié)果保存在目的寄存器中,同時(shí)更新CPSR中的相應(yīng)條件標(biāo)志位。比較指令不保存運(yùn)算結(jié)果,只更新CPSR中相應(yīng)的條件標(biāo)志位。助記符號(hào)說(shuō)明操作條件碼位置MOVRd,operand2數(shù)據(jù)傳送

Rd←operand2MOV{cond}{S}MVNRd,operand2數(shù)據(jù)取反傳送

Rd←(operand2)MVN{cond}{S}ADDRd,Rnoperand2加法運(yùn)算指令

Rd←Rn+operand2ADD{cond}{S}SUBRd,Rnoperand2減法運(yùn)算指令

Rd←Rn-operand2SUB{cond}{S}RSBRd,Rnoperand2逆向減法指令

Rd←operand2-RnRSB{cond}{S}ADCRd,Rnoperand2帶進(jìn)位加法

Rd←Rn+operand2+carryADC{cond}{S}SBCRd,Rnoperand2帶進(jìn)位減法指令

Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rnoperand2帶進(jìn)位逆向減法指令

Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}表2.6.3數(shù)據(jù)處理指令表ANDRd,Rnperand2邏輯與操作指令

Rd←Rn&operand2AND{cond}{S}ORRRd,Rnperand2邏輯或操作指令

Rd←Rn|operand2ORR{cond}{S}EORRd,Rnperand2邏輯異或操作指令

Rd←Rn^operand2EOR{cond}{S}BICRd,Rnoperand2位清除指令

Rd←Rn&(~operand2)BIC{cond}{S}CMPRn,operand2比較指令

標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令

標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測(cè)試指令

標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測(cè)試指令

標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}ARM微處理器的指令系統(tǒng)ARM跳轉(zhuǎn)指令 跳轉(zhuǎn)指令用于實(shí)現(xiàn)程序流程的跳轉(zhuǎn),在ARM中有兩種方式可以實(shí)現(xiàn)程序的跳轉(zhuǎn),一種是使用跳轉(zhuǎn)指令直接跳轉(zhuǎn),另一種則是直接向PC寄存器賦值實(shí)現(xiàn)跳轉(zhuǎn)。 通過(guò)向程序計(jì)數(shù)器PC寫入跳轉(zhuǎn)地址值,可以實(shí)現(xiàn)在4GB的地址空間中的任意跳轉(zhuǎn),在跳轉(zhuǎn)之前結(jié)合使用MOVLR,PC等類似指令,可以保存將來(lái)的返回地址值,從而實(shí)現(xiàn)在4GB連續(xù)的線性地址空間的子程序調(diào)用。

ARM指令集中的跳轉(zhuǎn)指令可以完成從當(dāng)前指令向前或向后的32MB的地址空間的跳轉(zhuǎn),包括以下4條。ARM微處理器的指令系統(tǒng)ARM跳轉(zhuǎn)指令 (1)B(跳轉(zhuǎn)指令) (2)BL(帶返回的跳轉(zhuǎn)指令) (3)BLX(帶返回和狀態(tài)切換的跳轉(zhuǎn)指令) (4)BX(帶狀態(tài)切換的跳轉(zhuǎn)指令)ARM微處理器的指令系統(tǒng)ARM協(xié)處理器指令

ARM微處理器支持協(xié)處理器操作,協(xié)處理器的控制要通過(guò)協(xié)處理器命令實(shí)現(xiàn)。

ARM的協(xié)處理器指令主要用于ARM處理器初始化ARM協(xié)處理器的數(shù)據(jù)處理操作,以及在ARM處理器的寄存器和協(xié)處理器的寄存器之間傳送數(shù)據(jù),和在ARM協(xié)處理器的寄存器和存儲(chǔ)器之間傳送數(shù)據(jù)。

ARM微處理器的指令系統(tǒng)ARM雜項(xiàng)指令(1)異常產(chǎn)生指令

ARM微處理器所支持的異常指令有如下兩條:

①SWI(軟件中斷指令) 格式為:SWI{條件}24位的立即數(shù)

SWI指令用于產(chǎn)生軟件中斷,以便用戶程序能調(diào)用操作系統(tǒng)的系統(tǒng)例程。操作系統(tǒng)在SWI的異常處理程序中提供相應(yīng)的系統(tǒng)服務(wù)。 ②BKPT(斷點(diǎn)中斷指令) 格式為:BKPT16位的立即數(shù)

BKPT指令產(chǎn)生軟件斷點(diǎn)中斷,可用于程序的調(diào)試。ARM微處理器的指令系統(tǒng)ARM雜項(xiàng)指令 (2)程序狀態(tài)寄存器訪問(wèn)指令 用于在程序狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù),包括兩條: ①M(fèi)RS(程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令)

MRS指令的格式為:

MRS{條件}通用寄存器,程序狀態(tài)寄存器(CPSR或SPSR) ②MSR(通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令)

MSR指令的格式為:

MSR{條件}程序狀態(tài)寄存器(CPSR或SPSR)_<域>,操作數(shù)

<域>用于設(shè)置程序狀態(tài)寄存器中需要操作的位,32位的程序狀態(tài)寄存器可分為4個(gè)域: 位[31:24]為條件標(biāo)志位域,用f表示;位[23:16]為狀態(tài)位域,用s表示;位[15:8]為擴(kuò)展位域,用x表示;位[7:0]為控制位域,用c表示。ARM微處理器的指令系統(tǒng)ARM偽指令

ARM偽指令不是ARM指令集中的指令,只是為了編程方便編譯器定義的指令,使用時(shí)可以像其它ARM指令一樣使用,但在編譯時(shí)這些指令將被等效的ARM指令代替。ARM偽指令有ADR,ADRL,LDR,NOP四條。

ADR指令將基于PC相對(duì)偏移的地址值加載到寄存器中。ADRL指令將程序相對(duì)偏移或寄存器相對(duì)偏移地址加載到寄存器中。LDR偽指令用于加載32位的立即數(shù)或一個(gè)地址值到指定寄存器。NOP為空操作偽指令。ARM微處理器的指令系統(tǒng)Thumb指令集

Thumb指令集是ARM指令集的一個(gè)子集,允許指令編碼為16位的長(zhǎng)度。與等價(jià)的32位代碼相比較,Thumb指令集在保留32代碼優(yōu)勢(shì)的同時(shí),大大的節(jié)省了系統(tǒng)的存儲(chǔ)空間。 所有的Thumb指令都有對(duì)應(yīng)的ARM指令,而且Thumb的編程模型也對(duì)應(yīng)于ARM的編程模型,在應(yīng)用程序的編寫過(guò)程中,只要遵循一定調(diào)用的規(guī)則,Thumb子程序和ARM子程序就可以互相調(diào)用。ARM微處理器的指令系統(tǒng)Thumb指令集

當(dāng)處理器在執(zhí)行ARM程序段時(shí),稱ARM處理器處于ARM工作狀態(tài),當(dāng)處理器在執(zhí)行Thumb程序段時(shí),稱ARM處理器處于Thumb工作狀態(tài)。 與ARM指令集相比較,Thumb指令集中的數(shù)據(jù)處理指令的操作數(shù)仍然是32位,指令地址也為32位,但Thumb指令集為實(shí)現(xiàn)16位的指令長(zhǎng)度,舍棄了ARM指令集的一些特性,如大多數(shù)的Thumb指令是無(wú)條件執(zhí)行的,而幾乎所有的ARM指令都是有條件執(zhí)行的;大多數(shù)的Thumb數(shù)據(jù)處理指令的目的寄存器與其中一個(gè)源寄存器相同。ARM微處理器的指令系統(tǒng)Thumb指令集

Thumb指令集不是一個(gè)完整的體系結(jié)構(gòu)。Thumb指令集沒(méi)有協(xié)處理器指令,信號(hào)量指令以及訪問(wèn)C

溫馨提示

  • 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)論