freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

arm體系結(jié)構(gòu)清華第一章(參考版)

2025-05-16 03:18本頁面
  

【正文】 當指令被預(yù)取后,在該指令被執(zhí)行前,如果有數(shù)據(jù)訪問指令修改了位于主存中的該指令,這時被預(yù)取的指令和主存中對應(yīng)的指令不同,從而可能使執(zhí)行的結(jié)果發(fā)生錯誤。 自修改代碼指的是代碼在執(zhí)行過程中可能修改自身。在 CPU執(zhí)行當前指令的同時,可以從存儲器中預(yù)取其后若干條指令,具體預(yù)取多少條指令,不同的 ARM實現(xiàn)中有不同的數(shù)值。也就是說,這時該地址值原封不動地送到存儲系統(tǒng)。 忽略字單元地址的低兩位的值 ,即訪問地址為 (address AND 0XFFFFFFC)的字單元;忽略半字單元地址的最低位的值,即訪問地址為 (address AND 0XFFFFFFE)的半字單元。 2. 非對齊的數(shù)據(jù)訪問操作 對于 Load/Store操作,如果是非對齊的數(shù)據(jù)訪問操作,系統(tǒng)定義了下面 3種可能的結(jié)果。在存儲訪問操作中,如果存儲單元的地址沒有遵守上述的對齊規(guī)則,則稱為非對齊 (unaligned)的存儲訪問操作。 ?大端存儲器系統(tǒng): 在大端格式中 , 低字節(jié)存放在高地址中 , 高字節(jié)存放在低地址中 。 31 24 2 3 16 1 5 8 7 0 字單元 A 半字單元 A 半字單元 A + 2 字節(jié)單元 A 字節(jié)單元 A + 1 字節(jié)單元 A + 2 字節(jié)單元 A + 3 80 ARM存儲器格式 在 littleendian格式中,存儲器格式如圖 示。但是在字單元中, 4個字節(jié)哪一個是高位字節(jié),哪一個是低位字節(jié)則有兩種不同的格式: bigendian格式和 littleendian格式。地址為 A的半字數(shù)據(jù)包括地址為 A、 A+1兩個字節(jié)單元的內(nèi)容。 在 ARM版本 4及以上的版本中, ARM的地址空間也可以看作是 231個 16位的半字單元。這些字單元的地址可以被 4整除,也就是說該地址的低兩位為 0b00。這些字節(jié)單元的地址是一個無符號的 32位數(shù)值,其取值范圍為 0到 2321。 體系結(jié)構(gòu)直接支持的數(shù)據(jù)類型 體系結(jié)構(gòu)直接支持的數(shù)據(jù)類型 ARM處理器支持下列數(shù)據(jù)類型: ?字節(jié) 8位 ?半字 16位(必須分配為占用兩個字節(jié)) ?字 32位(必須分配為占用 4各字節(jié)) 1 1 1 2 3 4 2 78 ARM體系中的存儲空間 ARM體系使用單一的平板地址空間。 IRQ01BackAddr JumpAddr return SYS 1 ? 0 . . . ? ? ? ? BackAddr4 “ ?”表示對該位不關(guān)心 76 ARM體系中存儲系統(tǒng) 關(guān)于 ARM體系的存儲系統(tǒng)在第 5章有詳細的介紹。當處理器處于Thumb狀態(tài)時發(fā)生了異常,在異常向量地址裝入PC時,會自動切換到 ARM狀態(tài)。 注意 : ARM內(nèi)核在中斷異常時置位中斷禁止標志,這樣可以防止不受控制的異常嵌套。 復(fù)位異常中斷處理程序不需要返回。 72 從異常中斷處理程序中返回 從異常中斷處理程序中返回包括以下兩個基本操作: 恢復(fù)被中斷的程序的處理器狀態(tài),即將SPSR_mode寄存器內(nèi)容復(fù)制到 CPSR中。 將寄存器 lr_mode設(shè)置成返回地址。 保存處理器狀態(tài)、中斷屏蔽位以及各條件標志位到相應(yīng)異常對應(yīng)的 SPSR_mode中。在實時操作系統(tǒng) (RTOS)中可以通過該機制實現(xiàn)系統(tǒng)功能調(diào)用 指令預(yù)取中止 (Prefech Abort) 如果處理器預(yù)取的指令的地址不存在,或者該地址不允許當前指令訪問,當該被預(yù)取的指令執(zhí)行時,處理器產(chǎn)生指令預(yù)取中止異常中斷 數(shù)據(jù)訪問中止 (Data Abort) 如果數(shù)據(jù)訪問指令的目標地址不存在,或者該地址不允許當前指令訪問,處理器產(chǎn)生數(shù)據(jù)訪問中止異常中斷 外部中斷請求 (IRQ) 當處理器的外部中斷請求引腳有效,而且 CPSR寄存器的 I控制位被清除時,處理器產(chǎn)生外部中斷請求 (IRQ)異常中斷。 軟件中斷 (software interrupt SWI) 這是一個由用戶定義的中斷指令。 異常中斷名稱 含 義 復(fù)位 (Reset) 當處理器的復(fù)位引腳有效時,系統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處理程序處執(zhí)行。 當異常中斷發(fā)生時,系統(tǒng)執(zhí)行完當前指令后,將跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。整個過程是按順序執(zhí)行。 如果同時發(fā)生兩個或更多異常,那么將按照固定的順序來處理異常,如:“異常優(yōu)先級”。 例如響應(yīng)一個來自外設(shè)的中斷。應(yīng)用軟件不要操作這些位,以免與 ARM將來版本的擴展沖突。 M控制位 控制位 M[4∶ 0]控制處理器模式 不是所有模式位的組合都定義了有效的處理器模式,如果使用了錯誤的設(shè)置,將引起一個無法恢復(fù)的錯誤。 對于 ARM v4以及更高的版本的 T系列的 ARM處理器, T控制位含義如下: T=0表示執(zhí)行 ARM指令。 當 F=1時禁止 FIQ中斷。在特權(quán)級的處理器模式下,軟件可以修改這些控制位。 3. CPSR中的控制位 CPSR的低 8位 I、 F、 T及 M[4∶ 0]統(tǒng)稱為控制位。 在 ARM v5以前的版本及 ARM v5的非 E系列的處理器中, Q標志位沒有被定義。對于結(jié)合移位操作的非加法 /減法指令, C為從最高位最后移出的值,其它指令C通常不變; V 當進行加法 /減法運算,并且發(fā)生有符號溢出時V=1,否則 V=0,其它指令 V通常不變。對于有符號二進制補碼,結(jié)果為負數(shù)時 N=1,結(jié)果為正數(shù)或零時 N=0; Z 指令結(jié)果為 0時 Z=1,否則 Z=0;對于 CMP指令, Z=1表示進行比較的兩個數(shù)大小相等 C 當進行加法運算,并且最高位產(chǎn)生進位時 C=1,否則 C=0。 通常如果指令帶 S后綴,則該指令的執(zhí)行會影響條件代碼標志;但有一些指令的執(zhí)行總是會影響條件代碼標志。 1. 條件標志位 2. Q標志位 3. CPSR中的控制位 4. CPSR中的其他位 1. 條件標志位 N (Negative)、 Z (Zero)、 C (Carry) 及 V (oVerflow)統(tǒng)稱為條件標志位。 CPSR的格式如下所示。當特定的異常中斷發(fā)生時,這個寄存器用于存放當前程序狀態(tài)寄存器的內(nèi)容。它包含了條件標志位、中斷禁止位、當前處理器模式標志以及其他的一些控制和狀態(tài)位。 類似的指令還有 ADD PC, PC, 0。 R15 指令 MOV PC, PC 將程序跳轉(zhuǎn)到當前指令下面第 2條指令處執(zhí)行。也就是說,對于 ARM指令集來說, PC指向當前指令的下兩條指令的地址。當成功地向 R15中寫入一個地址數(shù)值時,程序?qū)⑻D(zhuǎn)到該地址執(zhí)行。 R14寄存器也可以作為通用寄存器使用。可以通過下面兩種方式實現(xiàn)這種子程序的返回操作。當通過 BL或 BLX指令調(diào)用子程序時, R14被設(shè)置成該子程序的返回地址。這樣就使異常處理程序不會破壞被其中斷程序的運行現(xiàn)場。應(yīng)用程序初始化該 R13,使其指向該異常模式專用的棧地址。在 ARM指令集中,這只是一種習慣的用法,并沒有任何指令強制性的使用 R13作為棧指針,用戶也可以使用其他的寄存器作為棧指針;而在 Thumb指令集中,有一些指令強制性地使用 R13作為棧指針。 對于備份寄存器 R13和 R14來說,每個寄存器對應(yīng) 6個不同的物理寄存器, 采用下面的記號來區(qū)分各個物理寄存器: Rn_mode (其中, mode可以是下面幾種模式之一: usr、sys、 svc、 abt、 und、 irq及 fiq。 程序計數(shù)器 PC,即 R15。 52 通用寄存器 通用寄存器可以分為下面 3類: 未備份寄存器 (The unbanked registers),包括 R0~ R7。 51 寄存器類別 寄存器在匯編中的名稱 各模式下實際訪問的寄存器 用戶 系統(tǒng) 管理 中止 未定義 中斷 快中斷 通用寄存器和程序計數(shù)器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 狀態(tài)寄存器 CPSR CPSR SPSR 無 SPSR_abt SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器 CPSR為 程序狀態(tài)寄存器 ,在異常模式中,另外一個寄存器 “ 程序狀態(tài)保存寄存器( SPSR) ” 可以被訪問。可以認為它是一個通用寄存器,但是對于它的使用有許多與指令相關(guān)的限制或特殊情況。 48 R14寄存器注意要點 R14 R14_irq 用戶模式下的程序 IRQ模式下的程序 A a return B ... X A 地址 A 下的程序; IRQ中斷,硬件將某個地址存入 IRQ模式下的 R14_irq寄存器, 用戶模式下的 R14沒有被破壞 ; 3. IRQ服務(wù)程序 A執(zhí)行完畢,將 R14_irq寄存器的內(nèi)容存入PC,返回之前被中斷的程序; 未被破壞 R14_irq 地址 A 49 R14寄存器注意要點 R14 R14_irq 用戶模式下的程序 IRQ模式下的程序 A a B ... X A 地址 A 地址 A 下的程序; IRQ中斷,硬件將某個地址存入 IRQ模式下的 R14_irq寄存器, 用戶模式下的 R14沒有被破壞 ; 3. IRQ服務(wù)程序 A執(zhí)行完畢,將 R14_irq寄存器的內(nèi)容減去某個常量后存入 PC,返回之前被中斷的程序; 未被破壞 IRQ模式下的程序 B a return B ... X A 地址 B 地址 B4. 如果在 IRQ處理程序中打開 IRQ中斷,并且再次發(fā)生 IRQ中斷; 5. 硬件將返回地址保存在R14_irq寄存器中, 原來保存的返回地址將被覆蓋,造成錯誤 ; R14_irq 被破壞 6. 在程序 B返回到程序 A,然后在返回到用戶模式下被中斷的程序時,發(fā)生錯誤,將不能正確返回; return 解決辦法是確保 R14的對應(yīng)版本在發(fā)生中斷嵌套時不再保存任何有意義的值(將 R14入棧),或者切換到其它處理器模式下。 例如:如果用戶在用戶模式下執(zhí)行程序時發(fā)生了IRQ中斷,用戶模式寄存器不會被破壞。同時硬件將 “ BL Lable”指令的下一條指令所在地址存入 R14( LR); B執(zhí)行最后,將 R14寄存器的內(nèi)容放入 PC,返回程序 A; 46 R14寄存器與異常發(fā)生 異常發(fā)生時,程序要跳轉(zhuǎn)
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1