ARM體系結構與指令系統(tǒng).ppt_第1頁
ARM體系結構與指令系統(tǒng).ppt_第2頁
ARM體系結構與指令系統(tǒng).ppt_第3頁
ARM體系結構與指令系統(tǒng).ppt_第4頁
ARM體系結構與指令系統(tǒng).ppt_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章ARM體系結構與指令系統(tǒng),合肥學院電子信息與電氣工程系干開峰,目錄,2.1ARM體系結構2.2ARM指令系統(tǒng),2.1ARM體系結構,2.1.1ARM體系結構概述2.1.2ARM存儲結構2.1.3ARM處理器模式2.1.4ARM寄存器2.1.5ARM異常中斷,2.1.1ARM體系結構概述,一、ARM體系結構特點1、總體思想:在不犧牲性能的同時,盡量簡化處理器。同時從體系結構的層面上靈活支持處理器擴展。這種簡化和開放的思路使得ARM處理器采用了很簡單的結構來實現(xiàn)。,2.1.1ARM體系結構特點,2、RISC型處理器結構ARM采用RISC結構,在簡化處理器結構,減少復雜功能指令的同時,提高了處理器的速度。RISC型處理器采用了Load/Store(加載/存儲)結構,即只有Load/Store指令可與存儲器打交道,其余指令都不允許進行存儲器操作。RISC型處理器增加了指令高速緩沖I-Cache和數(shù)據(jù)高速緩沖D-Cache及多處理器結構,使指令的操作盡可能在寄存器之間進行。,CISC與RISC的比較,2.1.1ARM體系結構特點,3、Thumb指令集新型的ARM體系結構中定義了16位的Thumb指令集。Thumb指令集比通常的8/16位CISC/RISC處理器有更好的代碼密度,而芯片面積只增加6%,卻可以使程序存儲器更小。,2.1.1ARM體系結構特點,4、多處理器狀態(tài)模式ARM體系結構定義了7種處理器模式:用戶(usr)、快中斷(fiq)、中斷(irq)、管理(svc)、終止(abt)、未定義(und)和系統(tǒng)(sys),大大提高了ARM處理器的效率。5、兩種處理器工作狀態(tài)ARM狀態(tài)(執(zhí)行32位ARM指令)和Thumb狀態(tài)(執(zhí)行16位Thumb指令)。,2.1.1ARM體系結構特點,6、嵌入式在線仿真調(diào)試ARM體系結構的處理器芯片都嵌入了在線仿真ICE-RT邏輯,便于通過JTAG來仿真調(diào)試芯片,省去了價格昂貴的在線仿真器。7、靈活方便的接口ARM體系結構具有協(xié)處理器接口,允許接16個協(xié)處理器。既可以使基本的ARM處理器內(nèi)核盡可能小,方便地擴充ARM指令集,也可以通過未定義指令來支持協(xié)處理器的軟件仿真。,2.1.1ARM體系結構特點,8、低電壓功耗的設計考慮到ARM體系結構的處理器主要用于手持式嵌入式系統(tǒng)中,ARM體系結構在設計中就十分注意功耗的設計。,2.1.1ARM體系結構特點,二、ARM流水線結構1、流水線方式:是把一個重復的過程分解為若干個子過程,每個子過程可以與其他子過程同時進行。處理器按照一系列步驟來執(zhí)行每一條指令。,2.1.1ARM體系結構特點,典型的步驟為:1)從存儲器讀取指令(fetch)2)譯碼以鑒別它是哪一類指令(dec)3)從寄存器組取得所需的操作數(shù)(reg)4)將操作數(shù)進行組合以得到結果或存儲器地址(exe)5)如果需要,則訪問存儲器存取數(shù)據(jù)(mem)6)將結果回寫到寄存器組(res),2.1.1ARM體系結構特點,2、ARM7的三級流水線取指:從程序存儲器中取指令,放入指令流水線。(占用存儲器訪問操作)譯碼:指令譯碼。(占用譯碼邏輯)執(zhí)行:執(zhí)行指令/讀寫REG。(占用ALU及數(shù)據(jù)路徑),2.1.1ARM體系結構特點,3、ARM9TDMI的五級流水線,2.1.1ARM體系結構特點,4、ARM7和ARM9流水線比較5級流水線的ARM9內(nèi)核是哈佛架構,擁有獨立的指令和數(shù)據(jù)總線;指令和數(shù)據(jù)的讀取可以在同一周期進行;3級流水的ARM7內(nèi)核是指令和數(shù)據(jù)總線復用的馮.諾依曼架構,指令和數(shù)據(jù)的讀取不能在同一周期進行;5級流水線設計把寄存器讀取、邏輯運算、結果回寫分散在不同的流水當中,每一級流水的操作簡潔,提升了處理器的主頻。,2.1.1ARM體系結構特點,隨著流水線深度(級數(shù))的增加,每一段的工作量被削減了,這使得處理器可以工作在更高的頻率,同時改進了處理器的性能;負面作用是增加了系統(tǒng)的延時,即內(nèi)核在執(zhí)行一條指令前,需要更多的周期來填充流水線;流水線級數(shù)的增加也意味著在某些段之間會產(chǎn)生數(shù)據(jù)相關。,ARM處理器性能比較,2.1.1ARM體系結構特點,三、ARM總線結構ARM微控制器使用的是AMBA總線體系結構1、AHB總線(AdvancedHigh-performanceBus):用于連接高性能系統(tǒng)模塊。它支持突發(fā)數(shù)據(jù)傳輸方式及單個數(shù)據(jù)傳輸方式,所有時序參考同一個時鐘沿。,2.1.1ARM體系結構特點,2、ASB總線(AdvancedSystemBus):用于連接高性能系統(tǒng)模塊,它支持突發(fā)數(shù)據(jù)傳輸模式。3、APB總線(AdvancePeripheralBus):是一個簡單接口支持低性能的外圍接口。,2.1.2ARM存儲結構,一、ARM存儲數(shù)據(jù)類型1、ARM處理器支持以下6種數(shù)據(jù)類型:8位有符號和無符號字節(jié)(Byte)。16位有符號和無符號半字(Halfword)它們必須以兩字節(jié)的邊界對齊(半字對齊)。半字對齊:半字單元地址的最低位A0=0b0(地址末位為0 x0,0 x2,0 x4,0 x6,0 x8,0 xa,0 xc,0 xe)。32位有符號和無符號字(word)它們必須以4字節(jié)的邊界對齊(字對齊)。單元地址的低兩位A1A0=0b00。即地址末位為0 x0,0 x4,0 x8,0 xc。,2、對于指令,ARM指令系統(tǒng)分為32位ARM指令集和16位的Thumb指令集,在存儲時分別以32位和16位的兩種不同長度存儲。3、對于數(shù)據(jù),ARM支持對32位字數(shù)據(jù),16位半字數(shù)據(jù),8位字節(jié)數(shù)據(jù)操作。因此數(shù)據(jù)存儲器可以存儲32位,16位,8位三種不同長度數(shù)據(jù)。4、在ARM內(nèi)部,所有操作都面向32位的操作數(shù),只有數(shù)據(jù)傳送指令支持較短的字節(jié)和半字的數(shù)據(jù)類型。當從存儲器讀入一個字節(jié)或半字時,根據(jù)其數(shù)據(jù)類型將其擴展到32位。,2.1.2ARM存儲結構,二、ARM存儲器組織1、ARM存儲器以8位為一個單元存儲數(shù)據(jù)(一個字節(jié)),每個存儲單元分配一個存儲地址。ARM將存儲器看作是從零地址開始的字節(jié)的線性組合。作為32位的微處理器,ARM體系結構所支持的最大尋址空間為4GB(232字節(jié))。2、ARM體系結構可以用兩種方法存儲字數(shù)據(jù),稱為大端格式和小端格式。,2.1.2ARM存儲結構,2.1.2ARM存儲結構,大端格式(big-endian):字數(shù)據(jù)的高字節(jié)存儲在低地址中,而字數(shù)據(jù)的低字節(jié)則存放在高地址中。小端格式(low-endian):與大端存儲格式相反。低地址中存放的是字數(shù)據(jù)的低字節(jié),高地址存放的是字數(shù)據(jù)的高字節(jié)。缺省設置為小端格式。,三、ARM存儲器層次微處理器希望存儲器容量大、速度快。但容量大者速度慢;速度快者容量小。解決方法是構建一個由多級存儲器組成的復合存儲器系統(tǒng)。,2.1.2ARM存儲結構,多級存儲器系統(tǒng),寄存器組訪問時間約為幾個ns。片上RAM與片外RAM比速度快、功耗小、容量小。讀寫時間約為幾個ns。片上Cache832KB,訪問時間約為十幾個ns。主存儲器一般為幾兆字節(jié)1GB的動態(tài)存儲器,訪問時間約50ns。,2.1.2ARM存儲結構,CPU,寄存器組,片上RAM,片上Cache,主存儲器,硬盤,寄存器組,片上RAM,片上Cache,主存儲器,硬盤,寄存器組,片上RAM,片上Cache,主存儲器,2.1.3ARM處理器模式,一、ARM處理器工作狀態(tài)1、有兩種工作狀態(tài):ARM狀態(tài):處理器執(zhí)行32位的字對齊的ARM指令;Thumb狀態(tài):處理器執(zhí)行16位的半字對齊的Thumb指令。2、兩種狀態(tài)可以切換:程序執(zhí)行過程中,通過執(zhí)行帶狀態(tài)切換的分支指令BX,隨時在兩種工作狀態(tài)之間進行切換。并且,處理器工作狀態(tài)的轉變,并不影響處理器的工作模式和相應寄存器中的內(nèi)容。,2.1.3ARM處理器模式,二、ARM處理器工作模式1、ARM9的7種工作模式(1)用戶模式(usr):非特權模式,大部分任務執(zhí)行在這種模式。正常程序執(zhí)行的模式(2)快速中斷模式(fiq):當一個高優(yōu)先級(fast)中斷產(chǎn)生時將會進入這種模式。高速數(shù)據(jù)傳輸或通道處理(3)外部中斷模式(irq):當一個低優(yōu)先級(normal)中斷產(chǎn)生時將會進入這種模式。通常的中斷處理(4)管理模式(svc):當復位或軟中斷指令執(zhí)行時將會進入這種模式。供操作系統(tǒng)使用的一種保護模式,2.1.3ARM處理器模式,(5)中止模式(abt):當存取異常時將會進入這種模式虛擬存儲及存儲保護(6)未定義模式(und):當執(zhí)行未定義指令時會進入這種模式軟件仿真硬件協(xié)處理器(7)系統(tǒng)模式(sys):供需要訪問系統(tǒng)資源的操作系統(tǒng)任務使用特權級的操作系統(tǒng)任務,2.1.3ARM處理器模式,2、模式分類及特點(1)用戶模式特點:應用程序不能夠訪問受操作系統(tǒng)保護的系統(tǒng)資源。應用程序不能進行處理器模式的切換。(2)系統(tǒng)模式特點:不屬于異常模式,不是通過異常進入的。系統(tǒng)模式屬于特權模式,可以訪問所有的系統(tǒng)資源,也可以直接進行模式的切換。它主要供操作系統(tǒng)使用。(3)特權模式及其特點:特權模式:除用戶模式之外的工作模式又稱為特權模式特點:應用程序可以訪問所有的系統(tǒng)資源可以任意地進行處理器模式的切換,2.1.3ARM處理器模式,(4)異常模式及其特點:異常模式:除用戶模式、系統(tǒng)模式之外的五種模式稱為異常模式。特點:以各自的中斷或異常方式進入,并且處理各自的中斷或異常。對管理模式(svc)進入方式和處理內(nèi)容有:系統(tǒng)上電復位后進入管理模式,運行系統(tǒng)初始化程序,如中斷允許/禁止,主時鐘設置,SDRAM配置,各個功能模塊初始化等。當執(zhí)行軟件中斷指令SWI時,進入管理模式。,2.1.3ARM處理器模式,3、處理器模式的切換方式:軟件控制進行切換。通過外部中斷和異常進行切換處理器啟動時的模式轉換圖,管理模式(Supervisor),多種特權模式變化,用戶程序的運行模式,復位后的缺省模式,主要完成各模式的堆棧設置,注意不要進入用戶模式,一般為用戶模式User,2.1.4ARM寄存器,一、ARM寄存器概述ARM處理器v4及以上版本有37個32位的寄存器其中31個為通用寄存器;6個為狀態(tài)寄存器。31個通用寄存器R0R15;R13_svc、R14_svc;R13_abt、R14_abt;R13_und、R14_und;R13_irq、R14_irq;R8_fiq-R14_fiq6個狀態(tài)寄存器CPSRSPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq,2.1.4ARM寄存器,每一類處理器模式都有一組相應的寄存器組;在任意的處理器模式下,可見的寄存器包括15個通用寄存器(R0R14)、1個或2個狀態(tài)寄存器和程序寄存器。帶灰色底紋的單元格表示,用戶模式或系統(tǒng)模式使用的一般寄存器,已被異常模式特定的另一寄存器所替代。,2.1.4ARM寄存器,二、ARM通用寄存器通用寄存器包括R0R15,可以分為三類:1、未分組寄存器R0R7在所有的運行模式下,未分組寄存器都指向同一個物理寄存器,他們未被系統(tǒng)用作特殊的用途,是真正的通用寄存器。,2.1.4ARM寄存器,2、分組的寄存器R8R14(1)R8R12對于R8R12,每一次所訪問的物理寄存器,與處理器當前的工作模式有關。當處理器工作于fiq模式時,訪問的寄存器為R8_fiqR12_fiq;除fiq模式以外的其他模式,訪問的寄存器為R8_usrR12_usr。(2)R13和R14:每個寄存器對應6個不同的物理寄存器,其中的一個是用戶模式與系統(tǒng)模式共用,另外5個物理寄存器,對應于其他5種不同的異常模式。采用以下的記號來區(qū)分不同的物理寄存器:R13_R14_其中,mode為以下幾種模式之一:usr、fiq、irq、svc、abt、und。,2.1.4ARM寄存器,R13:寄存器R13在ARM指令中常用作堆棧指針SP。但這只是一種習慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強制性的要求使用R13作為堆棧指針。R14:寄存器R14也稱作子程序鏈接寄存器(SubroutineLinkRegister)或鏈接寄存器LR。當執(zhí)行BL子程序調(diào)用指令時,R14中得到R15(程序計數(shù)器PC)的備份。其他情況下,R14用作通用寄存器。與之類似,當發(fā)生中斷或異常時,對應的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保存R15的返回值。,2.1.4ARM寄存器,3、程序計數(shù)器PC(R15)(1)寄存器R15用作程序計數(shù)器(PC)。在ARM狀態(tài)下,位1:0為0,位31:2用于保存PC;在Thumb狀態(tài)下,位0為0,位31:1用于保存PC;(2)使用R15時注意:雖然R15可以用作通用寄存器,但是有一些指令在使用R15時有一些特殊限制,若不注意,執(zhí)行的結果將是不可預料的。所以,一般不這么使用。(3)關于PC的值:由于ARM采用多級流水線技術,所以PC總是指向正在取指的指令,而不是正在執(zhí)行的指令。也即PC總是指向當前指令的下兩條指令的地址。因此,對于ARM指令集而言,PC的值為當前指令的地址值加8個字節(jié)。,2.1.4ARM寄存器,三、ARM狀態(tài)寄存器1、兩種程序狀態(tài)寄存器在ARM微處理器中,有CPSR和SPSR兩種程序狀態(tài)寄存器。(1)當前程序狀態(tài)寄存器CPSR(CurrentProgramStatusRegister)用來保存當前程序狀態(tài)的寄存器。所有處理器模式下都可以訪問當前程序狀態(tài)寄存器CPSR。僅一個CPSR。(2)保存程序狀態(tài)寄存器SPSR_mode(SavedProgramStatusRegister)SPSR_mode用來進行異常處理,其功能包括:保存ALU中的當前操作信息當異常發(fā)生時,用來保存CPSR的值,從異常返回時,將SPSR_mode復制到CPSR中,恢復CPSR的值??刂圃试S和禁止中斷修改SPSR的值設置處理器的運行模式修改SPSR的值,2.1.4ARM寄存器,2、ARM狀態(tài)寄存器的格式(1)條件碼標志位(保存ALU中的當前操作信息)N:正負號/大小標志位0表示:正數(shù)/大于;1表示:負數(shù)/小于Z:零標志位0表示:結果不為零;1表示:結果為零C:進位/借位/移出位0表示:未進位/借位/移出0;1表示:進位/未借位/移出1V:溢出標志位0表示:結果未溢出;1表示:結果溢出,2.1.4ARM寄存器,(2)控制位I、F中斷控制位控制允許和禁止中斷I1禁止IRQ中斷I0允許IRQ中斷F1禁止FIQ中斷F0允許FIQ中斷T控制(標志)位反映處理器的運行狀態(tài)T=1時,程序運行于Thumb狀態(tài)T=0時,程序運行于ARM狀態(tài)M控制位決定了處理器的運行模式當發(fā)生異常時這些位被改變。如果處理器運行在特權模式,這些位也可以由程序修改。,2.1.4ARM寄存器,(3)保留位CPSR中的其余位為保留位,當改變CPSR中的條件碼標志位或者控制位時,保留位不要改變,在程序中也不要使用保留位來存儲數(shù)據(jù)。保留位將用于ARM版本的擴展。,2.1.4ARM寄存器,四、Thumb狀態(tài)寄存器組織Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的子集。程序員可以直接訪問8個通用的寄存器(R0R7),程序計數(shù)器PC、堆棧指針SP、鏈接寄存器LR和當前狀態(tài)寄存器CPSP。,2.1.5ARM異常中斷,一、異常和中斷概念1、中斷當CPU正在執(zhí)行程序時,系統(tǒng)發(fā)生了一件急需處理的事件,CPU暫時停下正在執(zhí)行的程序,轉去處理相應的事件,事件處理完后,CPU再返回執(zhí)行原來的程序,這種情況稱為中斷。中斷事件:引起CPU產(chǎn)生中斷、并且與CPU當前所執(zhí)行的程序無關的、由外部硬件產(chǎn)生的事件,也叫中斷源。中斷事件也常稱為外中斷。,2.1.5ARM異常中斷,2、異常是指CPU在執(zhí)行指令時出現(xiàn)的錯誤,即不正常的情況。異常是與當前所執(zhí)行的程序有關的。如存取數(shù)據(jù)或指令錯誤、計算結果溢出等。異常的處理:也用中斷的方式進行處理。,二、ARM有7種異常1、復位處理器上一旦有復位輸入,ARM處理器立刻停止執(zhí)行當前指令。復位后,ARM處理器在禁止中斷的管理模式下,從地址0 x00000000或0 xFFFF0000開始執(zhí)行指令。2、未定義指令異常當ARM處理器執(zhí)行協(xié)處理器指令時,它必須等待任一外部協(xié)處理器應答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒有響應,就會出現(xiàn)未定義指令異常。未定義指令異??捎糜谠跊]有物理協(xié)處理器(硬件)的系統(tǒng)上,對協(xié)處理器進行軟件仿真,或在軟件仿真時進行指令擴展。,2.1.5ARM異常中斷,3、軟件中斷異常該異常由執(zhí)行SWI指令產(chǎn)生,可使用此機制進行軟件仿真。4、預取中止(取指令存儲器中止)若處理器預取指令的地址不存在,或該地址不允許當前指令訪問,存儲器會向處理器發(fā)出中止信號,但當預取的指令被執(zhí)行時,才會產(chǎn)生指令預取中止異常。5、數(shù)據(jù)中止(訪問數(shù)據(jù)存儲器中止)若處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當前指令訪問時,產(chǎn)生數(shù)據(jù)中止異常。,2.1.5ARM異常中斷,6、IRQ異常當處理器的外部中斷請求引腳有效,且CPSR中的I=0,產(chǎn)生IRQ異常。系統(tǒng)的外設可通過該異常請求中斷服務。7、FIQ異常當處理器的外部中斷請求引腳有效,且CPSR中的F=0,產(chǎn)生FIQ異常。FIQ支持數(shù)據(jù)傳送和通道處理,并有足夠的私有寄存器,從而在應用中可避免對寄存器保存的需求,減少了開銷。,2.1.5ARM異常中斷,三、ARM的異常中斷響應過程1、進入異常當發(fā)生異常時,除了復位異常立即中止當前指令外,處理器盡量完成當前指令,然后脫離當前的程序去處理異常。ARM處理器對異常中斷的響應過程如下:(1)保存返回地址將引起異常指令的下一條指令的地址保存到新的異常模式x下的R14,即R14-中,使異常處理程序執(zhí)行完后能正確返回原程序。(2)保存當前狀態(tài)寄存器CPSR的內(nèi)容將CPSR的內(nèi)容保存到將要執(zhí)行的異常中斷對應的SPSR中,便于中斷返回時恢復處理器當前的狀態(tài)位、中斷屏蔽位以及各條件標志位。,2.1.5ARM異常中斷,(3)設置當前狀態(tài)寄存器CPSR中的相應位設置CPSR模式控制位CPSR4:0,使處理器進入相應的執(zhí)行模式;設置中斷標志位(CPSR6=1),禁止IRQ中斷;設置中斷標志位(CPSR7=1)禁止FIQ中斷,當進入Reset或FIQ模式時。(4)轉去執(zhí)行中斷處理程序取相應的中斷向量給程序計數(shù)器PC,使程序開始執(zhí)行中斷處理程序。一般地說,矢量地址處將包含一條指向相應程序的轉移指令,從而可跳轉到相應的異常中斷處理程序處執(zhí)行異常中斷處理程序。,2.1.5ARM異常中斷,2.1.5ARM異常中斷,ARM處理器對異常的響應過程可以用偽代碼描述如下:R14_=returnlinkSPSR_=CPSRCPSR4:0=exceptionmodenumberCPSR5=0/*當運行于ARM狀態(tài)時*/CPSR6=1/*禁止新的IRQ中斷*/if=ResetorFIQthenCPSR7=1/*當Reset或FIQ異常中斷時*/*禁止新的FIQ中斷*/PC=exceptionvectoraddress,注意使用異常模式下的特有寄存器每個異常模式對應有兩個寄存器R13_、R14_分別保存相應模式下的堆棧指針、返回地址;堆棧指針可用來定義一個存儲區(qū)域保存其它用戶寄存器,在程序初始化時應該對各種模式堆棧設置,便于隨時使用。FIQ模式還有額外的專用寄存器R8_fiqR12_fiq,使用這些寄存器可以加快快速中斷的處理速度。,2.1.5ARM異常中斷,2、異常返回(1)異常返回應執(zhí)行的操作異常處理完畢之后,ARM微處理器會執(zhí)行以下幾步操作從異常返回:將返回地址裝入PC把連接寄存器LR的值減去相應的偏移量,然后送到PC中。恢復CPSR的值將SPSR復制回CPSR中。清除中斷屏蔽位若在進入異常處理時設置了中斷禁止位,要在此清除??梢哉J為應用程序總是從復位異常處理程序開始執(zhí)行的,因此復位異常處理程序不需要返回。,2.1.5ARM異常中斷,(2)各種異常返回方法FIQ中斷返回不管是在ARM狀態(tài)還是在Thumb狀態(tài)下進入FIQ模式,F(xiàn)IQ處理程序均可以執(zhí)行以下指令從FIQ模式返回:SUBSPC,R14-fiq,#4指令預取中止(Abort)異常返回當指令預取訪問存儲器失敗時,存儲器系統(tǒng)向ARM處理器發(fā)出存儲器中止(Abort)信號,預取的指令被記為無效,但只有當處理器試圖執(zhí)行無效指令時,指令預取中止異常才會發(fā)生,如果指令未被執(zhí)行,例如在指令流水線中發(fā)生了跳轉,則預取指令中止不會發(fā)生。如果發(fā)生了指令預取中止異常,無論是在ARM狀態(tài)還是Thumb狀態(tài),其返回指令為:SUBSPC,R14_abt,#4;重新執(zhí)行被中止的指令,2.1.5ARM異常中斷,數(shù)據(jù)中止(Abort)異常返回如果發(fā)生了數(shù)據(jù)中止異常,無論是在ARM狀態(tài)還是Thumb狀態(tài),其返回指令為:SUBSPC,R14_abt,#8重新執(zhí)行被中止的指令軟件中斷指令(SWI)異常返回用于進入管理模式,常用于請求執(zhí)行特定的管理功能。軟件中斷處理程序執(zhí)行以下指令可以從SWI模式返回,無論是在ARM狀態(tài)還是Thumb狀態(tài):MOVSPC,R14_svc以上指令恢復PC(從R14_svc)和CPSR(從SPSR_svc)的值,并返回到SWI的下一條指令。,2.1.5ARM異常中斷,未定義指令異常返回當ARM處理器遇到不能處理的指令時,會產(chǎn)生未定義指令異常。采用這種機制,可以通過軟件仿真擴展ARM或Thumb指令集。處理器執(zhí)行以下程序返回,無論是在ARM狀態(tài)還是Thumb狀態(tài):MOVSPC,R14_und以上指令恢復PC(從R14_und)和CPSR(從SPSR_und)的值,并返回到未定義指令后的下一條指令。,2.1.5ARM異常中斷,四、ARM中斷向量,2.1.5ARM異常中斷,五、異常中斷向量表,2.1.5ARM異常中斷,異常中斷向量表說明:存儲器的前8個字中除了地址0 x00000014之外,全部被用作異常矢量地址。,2.1.5ARM異常中斷,六、ARM中斷的優(yōu)先級,2.1.5ARM異常中斷,2.2ARM指令系統(tǒng),2.2.1ARM指令結構2.2.2ARM尋址方式2.2.3ARM指令集2.2.4Thumb指令集2.2.5ARM匯編偽指令和偽操作,2.2.1ARM指令結構,一、ARM指令特點1、指令系統(tǒng)概念指令:是規(guī)定計算機進行某種操作的命令。指令系統(tǒng):計算機能夠執(zhí)行的各種指令的集合。2、ARM指令的特點所有指令都是32位的。大多數(shù)指令都在單周期內(nèi)完成。所有指令都可以條件執(zhí)行。ARM指令為load/store類型?;局噶顑H36條,分成五類。有7種尋址方式。指令集可以通過協(xié)處理器擴展。,3、ARM指令是加載/存儲(Load/Store)型:也即指令集僅能處理寄存器中的數(shù)據(jù),而且處理結果都要放回寄存器中,而對系統(tǒng)存儲器的訪問則需要通過專門的加載/存儲指令來完成。4、ARM指令可以分為五大類:數(shù)據(jù)處理指令、存儲器訪問指令、分支指令、協(xié)處理器指令、雜項指令。5、ARM指令有7種尋址方式:立即尋址、寄存器尋址、寄存器間接尋址、基址尋址、堆棧尋址、塊拷貝尋址、相對尋址。,2.2.1ARM指令結構,二、ARM指令格式1、ARM指令基本的語法格式為:s,Opcode:指令操作碼。cond:指令的條件碼。S:決定指令的操作是否影響cpsr的值。Rd:目標寄存器編碼。Rn:包含第一個操作數(shù)的寄存器編碼。Operand2:第2操作數(shù)。,2.2.1ARM指令結構,2、ARM指令典型的編碼格式為:(數(shù)據(jù)處理指令類),例:ADDSR2,R1,#1SUBNESR2,R1,#0 x20LDRR0,R1,2.2.1ARM指令結構,三、ARM指令的條件碼1、條件碼的位數(shù)和位置:每條ARM指令包含4位條件碼域,它占用指令編碼的最高四位31:28。2、條件碼的表示:條件編碼共2416種,其中,15種用于指令的條件碼。每種條件碼用2個英文縮寫字符表示。(見下表),指令條件碼表,2.2.1ARM指令結構,3、帶條件指令的執(zhí)行:ARM處理器根據(jù)指令的執(zhí)行條件是否滿足,決定當前指令是否執(zhí)行。只有在cpsr中的條件標志位滿足指定的條件時,指令才會被執(zhí)行。不符合條件的代碼依然占用一個時鐘周期(相當于一個NOP指令)。4、條件碼的書寫方法:條件碼的位置在指令助記符的后面(因此也稱為條件后綴)。例如:MOVEQR0,R1,2.2.2ARM尋址方式,尋址方式:處理器根據(jù)指令中給出的(地址)信息,尋找操作數(shù)(物理地址)的方式。將ARM指令系統(tǒng)的尋址方式分為7種。立即尋址寄存器尋址寄存器間接尋址變址尋址堆棧尋址塊拷貝尋址相對尋址,一、立即尋址立即尋址也叫立即數(shù)尋址。立即尋址概念:操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù)。這個操作數(shù)被稱為立即數(shù),對應的尋址方式也就叫做立即尋址。ADDR0,R0,1;R0R01MOVR0,0 x3f;R00 x3f書寫立即數(shù)時,要求以“”為前綴。十六進制數(shù),后加0 x或R0R1STRR0,R1;R1R0第一條指令將以R1的值為地址的存儲單元中的內(nèi)容加載到寄存器R0中。第二條指令將R0的內(nèi)容存儲到以R1的值為地址的存儲單元中。R1基址寄存器R1的內(nèi)容基地址,四、變址尋址變址尋址也叫基址加偏(變)址尋址將基址寄存器的內(nèi)容與指令中給出的地址偏移量相加,得到操作數(shù)所在的存儲器的有效地址。變址尋址方式常用于訪問某基地址附近的地址單元。,例如:LDRR0,R1,4;R0mem32R14,五、堆棧尋址堆棧尋址堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針SP)指向一塊存儲區(qū)域(堆棧)。堆??煞譃閮煞N增長方式:向上生長:向高地址方向生長,稱為遞增堆棧。向下生長:向低地址方向生長,稱為遞減堆棧。,根據(jù)堆棧指針指向的數(shù)據(jù)位置的不同,可分為:滿堆棧堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項,稱為滿堆棧;空堆棧堆棧指針指向下一個待壓入數(shù)據(jù)的空位置,稱為空堆棧。這樣就有4種類型的堆棧表示遞增和遞減的滿和空堆棧的各種組合。,四種類型的堆棧工作方式滿遞增堆棧FA(FullAscending):堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生長。滿遞減堆棧FD:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生長。空遞增堆棧EA:堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由低地址向高地址生長。空遞減堆棧ED(EmptyDescending):堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由高地址向低地址生長。,六、塊拷貝尋址塊拷貝尋址把存儲器中的一個數(shù)據(jù)塊加載到多個寄存器中,或者是把多個寄存器中的內(nèi)容保存到存儲器中。應用指令:塊拷貝尋址是多寄存器傳送指令LDM/STM的尋址方式,因此也叫多寄存器尋址。塊拷貝尋址操作中的寄存器,可以是R0-R15這16個寄存器的子集(一部分),或是所有寄存器。,4種尋址操作LDMIA/STMIAIncrementAfter(先傳送,后地址加4)LDMIB/STMIBIncrementBefore(先地址加4,后傳送)LDMDA/STMDADecrementAfter(先傳送,后地址減4)LDMDB/STMDBDecrementBefore(先地址減4,后傳送),七、相對尋址相對尋址與基址變址尋址方式相類似,相對尋址以程序計數(shù)器PC的當前值為基地址,指令中的地址標號作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。相對尋址指令舉例如下:BLSUBRl;調(diào)用到SUBRl子程序.;SUBRl應為24位有符號數(shù)SUBR1MOVPC,LR;返回,2.2.3ARM指令集,ARM主要指令如下:存儲器訪問指令數(shù)據(jù)處理指令分支指令協(xié)處理器指令雜項指令,一、存儲器訪問指令ARM微處理器用加載/存儲指令訪問存儲器,實現(xiàn)在寄存器和存儲器之間傳送數(shù)據(jù)。加載指令用于將存儲器中的數(shù)據(jù)傳送到寄存器,存儲指令則完成相反的操作。由于ARM處理器對外設寄存器、I/O映射空間與存儲器統(tǒng)一編址,因此,對外圍設備的I/O操作也用此類指令?;镜募虞d/存儲指令僅有5條,分為3種:LDR和STR,單寄存器加載/存儲指令LDM和STM,多寄存器加載/存儲指令SWP,寄存器和存儲器數(shù)據(jù)交換指令,1、單寄存器的存取指令單寄存器加載/存儲指令是ARM在寄存器和存儲器間傳送單個字節(jié)和字的最靈活方式。根據(jù)傳送數(shù)據(jù)的類型不同,單個寄存器存取指令又可以分為以下兩類:單字和無符號字節(jié)的加載/存儲指令LDR:指令從內(nèi)存中取32位字或8位無符號字節(jié)數(shù)據(jù)放入寄存器;STR:指令將寄存器中的32位字或8位無符號字節(jié)數(shù)據(jù)保存到存儲器中注意:無符號字節(jié)加載時,用0將8位的操作數(shù)擴展到32位。,半字和有符號字節(jié)的加載/存儲指令這類LDR/STR指令可實現(xiàn)半字(有符號和無符號)、有符號字節(jié)數(shù)據(jù)的傳送。特點:偏移量格式、尋址方式與加載存儲字和無符號字節(jié)指令基本相同。立即數(shù)偏移量限定在8位,寄存器偏移量不可經(jīng)過移位得到。,2、多寄存器的存取指令LDM和STM指令可以實現(xiàn)在一組寄存器和一塊連續(xù)的內(nèi)存單元之間存/取數(shù)據(jù)。LDM為加載多個寄存器;STM為存儲多個寄存器。這兩條指令,允許傳送16個寄存器R0-R15的任何子集或所有寄存器。,3、單寄存器交換指令(SWP)SWP指令用于將一個存儲單元(該單元地址放在寄存器Rn中)的內(nèi)容讀取到一個寄存器Rd中,同時將另一個寄存器Rm的內(nèi)容寫入到該存儲單元中。(1)指令格式SWPcondBRd,Rm,RnB為可選后綴,若有B,則交換字節(jié),否則交換32位字Rd為被加載的寄存器Rm的數(shù)據(jù)用于存儲到Rn所指的地址中若Rm與Rd相同,則為寄存器與存儲器內(nèi)容進行交換Rn為要進行數(shù)據(jù)交換的存儲器地址,Rn不能與Rd和Rm相同。,(2)指令舉例SWPR1,R1,R0;將R1的內(nèi)容與R0指向的存儲單元的內(nèi)容進行交換。SWPBR1,R2,R0;將R0指向的存儲單元的內(nèi)容讀取1字節(jié)數(shù)據(jù)到R1中(高24位清零),并將R2的內(nèi)容寫入到該內(nèi)存單元中(最低字節(jié)有效),二、數(shù)據(jù)處理指令1、數(shù)據(jù)處理指令概述(1)ARM數(shù)據(jù)處理指令的功能主要完成寄存器中數(shù)據(jù)的算術和邏輯運算操作。(2)ARM數(shù)據(jù)處理指令的特點操作數(shù)來源:所有的操作數(shù)要么來自寄存器,要么來自立即數(shù),不會來自存儲器。操作結果:如果有結果,則結果一定是為32位寬、或64位寬(長乘法指令),并且放在一個或兩個寄存器中,不會寫入存儲器。有第二個操作數(shù)(除了乘法指令)Operand2:切記其三種形式:立即數(shù)、寄存器、寄存器移位。乘法指令的操作數(shù):全部是寄存器。,(3)ARM數(shù)據(jù)處理指令分類22條可分為5類:算術運算指令:ADDADCSUBSBCRSBRSCMULMLAUMULLUMLALSMULLSMLAL邏輯運算指令:ANDORREORBIC數(shù)據(jù)傳送指令:MOVMVN比較指令:CMPCMN測試指令:TSTTEQ上述指令只能對寄存器操作,不能針對存儲器。,(4)數(shù)據(jù)處理指令對程序狀態(tài)寄存器CPSR的影響1)選擇“S”后綴問題:指令中可以選擇s后綴,以影響狀態(tài)標志。但是比較指令(cmp、cmn、tst和teq)不需要后綴S,它們總會直接影響CPSR中的狀態(tài)標志。2)對CPSR中標志位的影響:標志位:如果結果為負,則標志位置;否則清。標志位:如果結果為,則標志位置;否則清。標志位:如果是加、減運算指令或比較指令時,標志位設置為的進位輸出;否則設置為移位器的移位輸出。如果不需要移位,則保持不變。標志位:在非加減操作中,標志位保持原值。在加減操作中,如果有溢出,則置;不發(fā)生溢出,則清。,(5)數(shù)據(jù)處理指令的詳細列表(未含6條乘法指令),2、算術運算指令(1)加減運算指令ADD加法運算指令ADC帶進位加法指令SUB減法運算指令SBC帶進位減法指令RSB反向減法指令RSC帶進位反向減法指令,(2)乘法指令ARM有兩類乘法指令:32位的乘法指令,即乘法操作的結果為32位;64位的乘法指令,即乘法操作的結果為64位。,MUL32位乘法指令MLA32位乘加指令UMULL64位無符號乘法指令UMLAL64位無符號乘加指令SMULL64位有符號乘法指令SMLAL64位有符號乘加指令,3、邏輯運算指令(1)AND邏輯“與”操作指令AND指令可用于提取寄存器中某些位的值(2)ORR邏輯“或”操作指令ORR指令用于將寄存器中某些位的值設置成1。(3)EOR邏輯“異或”操作指令EOR指令可用于將寄存器中某些位的值取反。將某一位與0異或,該位值不變;與1異或,該位值被求反。(4)BIC位清除指令BIC指令可用于將寄存器中某些位的值設置成0。將某一位與1做BIC操作,該位值被設置成0;將某一位與0做BIC操作,該位值不變。,4、數(shù)據(jù)傳送指令(1)MOV數(shù)據(jù)傳送指令功能:寄存器之間傳送。立即數(shù)傳送到寄存器中。實現(xiàn)單純的移位操作。MOVRd,Rd,LSL,#3實現(xiàn)子程序調(diào)用、從子程序中返回。當PC寄存器作為目標寄存器時可以實現(xiàn)程序跳轉。實現(xiàn)把當前處理器模式的SPSR寄存器內(nèi)容復制到CPSR中。,(2)MVN數(shù)據(jù)求反傳送指令(3)比較指令CMP比較指令CMN負數(shù)比較指令(4)測試指令TST位測試指令TEQ測試相等指令,三、分支指令在ARM中有兩種方式可以實現(xiàn)程序的跳轉:一種是使用分支轉移指令直接跳轉;另一種則是直接向PC寄存器賦值來實現(xiàn)跳轉。ARM的分支轉移指令,可以從當前指令向前或向后的32MB的地址空間跳轉。根據(jù)完成的功能它可以分為以下4種:B分支指令BL帶鏈接的分支指令BX帶狀態(tài)切換的分支指令BLX帶鏈接和狀態(tài)切換的分支指令,四、協(xié)處理器指令1、ARM協(xié)處理器:ARM支持16個協(xié)處理器,用于各種協(xié)處理器操作,最常使用的協(xié)處理器是用于控制片上功能的系統(tǒng)協(xié)處理器,例如控制高速緩存和存儲器的管理單元,浮點ARM協(xié)處理器等,還可以開發(fā)專用的協(xié)處理器。2、ARM協(xié)處理器指令根據(jù)其用途主要分為以下三類:協(xié)處理器數(shù)據(jù)操作指令。ARM寄存器與協(xié)處理器寄存器的數(shù)據(jù)傳送指令。協(xié)處理器寄存器和內(nèi)存單元之間數(shù)據(jù)存/取指令。,3、ARM的協(xié)處理器指令功能:(1)ARM處理器初始化ARM協(xié)處理器的數(shù)據(jù)處理操作;(2)在ARM處理器的寄存器和協(xié)處理器的寄存器之間傳送數(shù)據(jù);(3)在ARM協(xié)處理器的寄存器和存儲器之間傳送數(shù)據(jù)。4、ARM協(xié)處理器指令包括以下5條:CDP協(xié)處理器數(shù)操作指令coprocessorLDC協(xié)處理器數(shù)據(jù)加載指令STC協(xié)處理器數(shù)據(jù)存儲指令MCRARM處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令MRC協(xié)處理器寄存器到ARM處理器寄存器的數(shù)據(jù)傳送指令,五、雜項指令主要由兩種類型指令組成,程序狀態(tài)寄存器操作指令、中斷操作指令,一共有5條指令。狀態(tài)寄存器操作指令:MRS:讀程序狀態(tài)寄存器指令MSR:寫程序狀態(tài)寄存器指令異常中斷操作指令:SWI:軟件中斷指令BKPT:斷點指令(v5T體系)CLZ:前導0計數(shù)(v5T體系),六、例題1、算數(shù)邏輯運算指令的應用例1:實現(xiàn)乘法的指令段MOVR0,R0,LSL#n;R0=R0b)a=a-bSUBLTR1,R1,R0;if(ba)b=b-aBNEgcd;if(a!=b)跳轉到gcd繼續(xù)執(zhí)行MOVPC,LR;子程序結束,返回,例3:循環(huán)語句將內(nèi)存中從0 x400800開始的100個字數(shù)據(jù)相加,其結果存于R3、R2中(R3中為高32位)。LDRR0,=0 x400800MOVR1,#100;初始化循環(huán)次數(shù)MOVR2,#0MOVR3,#0loop;循環(huán)體LDRR4,R0,#4ADDSR2,R2,R4ADCR3,R3,#0或者ADDCSR3,R3,#1SUBSR1,R1,#1;循環(huán)計數(shù)器減1,設置條件標志BNEloop;循環(huán)計數(shù)器不為0,跳到loop繼續(xù)執(zhí)行;循環(huán)計數(shù)器為0,程序繼續(xù)執(zhí)行,例4:鏈表操作中的條件碼應用在鏈表中搜索與某一數(shù)據(jù)相等的元素。鏈表的每個元素包括兩個字,第1個字中包含一個字節(jié)數(shù)據(jù);第2個字中包含指向下一個鏈表元素的指針,當這個指針為0時表示鏈表結束。代碼執(zhí)行前R0指向鏈表的頭元素,R1中存放將要搜索的數(shù)據(jù);代碼執(zhí)行后R0指向第1個匹配的元素,或者當沒有匹配元素時,R0為0。,SEARCHCMPR0,#0;R0指針是否為空LDRNEBR2,R0;讀取當前元素中的字節(jié)數(shù)據(jù)CMPNER1,R2;判斷數(shù)據(jù)是否為搜索的數(shù)據(jù)LDRNER0,R0,#4;如果不是,指針R0指向下一個元素BNESEARCH;跳轉到search執(zhí)行MOVPC,LR;搜索完成,程序返回,2.2.4Thumb指令集,一、Thumb指令集特點Thumb指令集是ARM指令集壓縮形式的子集,所有Thumb指令均有對應的ARM指令。采用16位二進制編碼,代碼密度小。執(zhí)行Thumb指令時,先動態(tài)解壓縮,然后作為標準的ARM指令執(zhí)行。如何區(qū)分指令流取決于CPSR的第5位(位T)。大多數(shù)Thumb數(shù)據(jù)處理指令采用2個操作數(shù)格式。由于16位的限制,移位操作變成單獨指令。,Thumb指令集沒有協(xié)處理器指令、單寄存器交換指令、乘加指令、64位乘法指令以及程序狀態(tài)寄存器處理指令,而且指令的第2操作數(shù)受到限制。除了分支指令B有條件執(zhí)行功能外,其他指令均為無條件執(zhí)行。Thumb是一個不完整的體系結構,不能指望處理器只執(zhí)行Thumb代碼而不支持ARM指令集。,二、狀態(tài)切換1、ARM狀態(tài)進入Thumb狀態(tài)的方法執(zhí)行帶狀態(tài)切換的轉移指令BX。若BX指令指定的寄存器的最低位為1,則將T置位,并將程序計數(shù)器切換為寄存器其他位給出的地址。BXR0;若R0最低位為1,則轉入Thumb狀態(tài),異常返回也可以將微處理器從ARM狀態(tài)轉換為Thumb狀態(tài)。通常這種指令用于返回到進入異常前所執(zhí)行的指令流,而不是特地用于轉換到Thumb模式。MOVPC,LR;當返回地址保存在LR時STMFDSP!,LR;當返回地址保存在堆棧時,;進入異常后將R14入棧,;假設異常前執(zhí)行的是Thumb指令,PC保存于LR中LDMFDSP!,PC;返回指令,2、Thumb狀態(tài)進入ARM狀態(tài)的方法執(zhí)行Thumb指令中的交換轉移BX指令可以顯式地返回到ARM指令流。利用異常進入ARM指令流。,三、Thumb指令寄存器的使用,Lo寄存器,Hi寄存器,CPSR,有陰影的寄存器訪問時受到限制,對低(Lo)8個通用寄存器R0R7具有全部訪問權限,可以被任意指令訪問。寄存器R8R12的訪問受到限制,這些寄存器只能通過MOV、ADD和CMP訪問。對寄存器R13R15進行擴展以作特殊應用。CPSR間接訪問(CMP和數(shù)據(jù)處理指令影響)。SPSR不能訪問。CPSR的條件標志位由算術和邏輯操作設置并控制條件轉移。,四、Thumb-ARM異同點1、Thumb-ARM相似處:Load/Store結構。支持8位字節(jié)、16位半字和32位字數(shù)據(jù)類型,半字以兩字節(jié)邊界對準,字以4字節(jié)邊界對準。2、Thumb-ARM差異處:大多數(shù)Thumb指令是無條件執(zhí)行的,所有ARM指令都是條件執(zhí)行的。許多Thumb數(shù)據(jù)處理指令采用2個操作數(shù)格式(目的寄存器與一個源寄存器相同),ARM數(shù)據(jù)處理指令大多采用3個操作數(shù)格式。如:ADDR0,R1由于采用高密度編碼,Thumb指令格式?jīng)]有ARM指令格式規(guī)則。,五、Thumb轉移指令1、Thumb轉移指令用于:向后轉移形成循環(huán);條件結構向前轉移;轉向子程序;處理器從Thumb狀態(tài)切換到ARM狀態(tài)。2、程序相對轉移,特別是條件轉移與在ARM狀態(tài)下相比,在范圍上有更多的限制,轉向子程序只能是無條件轉移。3、Thumb轉移指令包括:B;BL;BX;BLX,六、堆棧指令功能:低寄存器和可選的LR進棧。低寄存器和可選的PC出棧。格式:POP,PCPUSH,LR其中:Reglist低寄存器范圍的、用逗號隔開的列表。注釋:1Thumb堆棧是滿遞減堆棧,向下增長,且SP指向堆棧的最后入口。2寄存器以數(shù)字順序存儲在堆棧中。最低數(shù)字的寄存器其地址最低。3POPreglist,PC這條指令引起處理器轉移到從堆棧彈出給PC的地址。這通常是從子程序返回,其中LR在子程序開頭壓進堆棧。4指令采用基址回寫,因此基址寄存器不應出現(xiàn)在寄存器列表中。,5.這些指令不影響條件碼標志例:PUSHR0,R4-R7;R0、R4R7進棧PUSHR0,LRPOPR2,R5POPR0-R7,PC;出棧并從子程序返回,七、寄存器讀取和存儲指令1、單寄存器讀取和存儲Thumb

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論