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

正文內(nèi)容

arm體系結構與編程---第一章備份-資料下載頁

2025-04-30 07:50本頁面
  

【正文】 RM一條指令 的長度剛好是 1個字(占用 4個字節(jié)),Thumb一條指令 的長度剛好是 半字(占用 2個字節(jié))。 體系結構直接支持的數(shù)據(jù)類型 94 ?ARM體系結構的存儲器格式( 1) ARM體系結構所支持的最大尋址空間為 4GB( 232字節(jié)) ?大端格式( Big Endian) 字數(shù)據(jù)的高字節(jié)存儲在低地址中,而字數(shù)據(jù)的低字節(jié)則存放在高地址中。 ?小端格式 (Little Endian) 低地址中存放的是字數(shù)據(jù)的低位,高位存放的是字數(shù)據(jù)的高字節(jié)。 ARM缺省設置是小端格式 體系結構直接支持的數(shù)據(jù)類型 95 ARM體系結構的存儲器格式( 2) (8H)=0B0A0908H (4H)=07060504H (0H)=03020220H Big Endian Little Endian 0H 1H 2H 3H 0H 1H 2H 3H 字數(shù)據(jù)的高字節(jié)存儲在低地址中,字數(shù)據(jù)的低字節(jié)存儲在高地址中。 字數(shù)據(jù)的高字節(jié)存儲在高地址中,字數(shù)據(jù)的低字節(jié)存儲在低地址中。 0 31 0 31 低地址 高地址 低地址 高地址 (8H)=0B0A0908H (4H)=07060504H (0H)=03020220H 96 ARM體系結構的存儲器格式( 3) r0 = 0x11223344 STR r0, [r1] LDRB r2, [r1] r1 = 0x100 Memory 3 2 1 0 0 1 2 3 Byte Lane 31 24 23 16 15 8 7 0 11 22 33 44 31 24 23 16 15 8 7 0 44 33 22 11 31 24 23 16 15 8 7 0 11 22 33 44 31 24 23 16 15 8 7 0 00 00 00 44 31 24 23 16 15 8 7 0 00 00 00 11 Little endian Big endian r2 = 0x44 r2 = 0x11 存儲字數(shù)據(jù) 加載字節(jié)數(shù)據(jù) r1=0x100 r1=0x100 97 第 1章 目錄 ? ? ? ? ? ?6. 程序狀態(tài)寄存器 ?數(shù)據(jù)類型 ? ? ?I/O ? ? ? ? 異常 ? 簡介 只要正常的程序流被暫時中止 , 處理器就進入異常模式 。 例如響應一個來自外設的中斷 。 在處理異常之前 , ARM內(nèi)核保存當前的處理器狀態(tài) CPSR( 這樣當處理程序結束時 , 可以恢復執(zhí)行原來的程序 ) , 然后轉去處理異常 。 如果同時發(fā)生兩個或更多異常,那么將按中斷優(yōu)先級的順序來處理異常。 異常 ? 簡介 異常類型 運行模式 復位 管理( svc) 未定義指令 未定義( und) 軟件中斷 管理( svc) 指令預取中止 中止( abt) 數(shù)據(jù)中止 中止( abt) IRQ(外部中斷請求) 中斷( irq) FIQ(快速中斷請求) 快中斷( fiq) 異常 當處理器的快速中斷請求引腳有效,且 CPSR中的 F位為 0 (允許fiq)時,產(chǎn)生 FIQ異常。 FIQ(快速中斷請求) 當處理器的外部中斷請求引腳有效,且 CPSR中的 I位為 0(允許irq)時,產(chǎn)生 IRQ異常。系統(tǒng)的外設可通過該異常請求中斷服務。 IRQ(外部中斷請求) 若處理器數(shù)據(jù)訪問指令的地址不存在,或該地址不允許當前指令訪問時,產(chǎn)生數(shù)據(jù)中止異常。 數(shù)據(jù)中止 若處理器預取指令的地址不存在,或該地址不允許當前指令訪問,存儲器會向處理器發(fā)出中止信號,當預取的指令被執(zhí)行時,才會產(chǎn)生指令預取中止異常。 指令預取中止 該異常由執(zhí)行 SWI指令產(chǎn)生,可用于用戶模式下的程序調(diào)用特權操作指令??墒褂迷摦惓C制實現(xiàn)系統(tǒng)功能調(diào)用。 軟件中斷 當 ARM處理器或協(xié)處理器遇到不能處理的指令時,產(chǎn)生未定義指令異常。可使用該異常機制進行軟件仿真。 未定義指令 當處理器的復位電平有效時,產(chǎn)生復位異常,程序跳轉到復位異常處理程序處執(zhí)行。 復位 具體含義 異常類型 異常 ? ARM處理器對異常中斷的響應過程 保存處理器當前狀態(tài) ( ARM態(tài)還是 Thumb態(tài) ) 、 中斷屏蔽位以及各條件標志位 。 這是通過將當前程序狀態(tài)寄存器CPSR的內(nèi)容保存到將要執(zhí)行的異常中斷對應的 SPSR_mode寄存器中實現(xiàn)的 。 設置 CPSR中相應的位 , 使程序進入相應的執(zhí)行模式;設置 CPSR中的位 , 禁止 IRQ中斷 , 當進入 FIQ模式時 , 禁止FIQ中斷 。 將寄存器 LR_mode設置成返回地址 。 將程序計數(shù)器 PC設置成該中斷的中斷向量地址 , 在該地址處安排一些跳轉指令 , 從而跳轉到相應的異常中斷處理程序處執(zhí)行 mode根據(jù)情況為 fiq , svc , abt , irq , und 異常 ? 從異常中斷處理程序中返回 恢復被中斷的程序的處理器狀態(tài) , 即將SPSR_mode寄存器內(nèi)容復制到 CPSR。 返回到發(fā)生異常中斷的指令的下一條或中斷處 ( 此處教材 19頁第 1段不全面 , 參考 269頁倒數(shù)第 3段 ) 指令處執(zhí)行 ,即將 LR_mode寄存器的內(nèi)容復制到程序計數(shù)器 PC。 mode根據(jù)情況為 fiq , svc , abt , irq , und 第 1章 目錄 ? ? ?I/O ? ? ? ? ? ? ? ? ? ?6. 程序狀態(tài)寄存器 ?數(shù)據(jù)類型 復位 ? 復位 當 nRESET信號被拉低時 ( 一般外部復位引腳電平的變化和芯片的其它復位源會改變這個內(nèi)核信號 ) , ARM處理器放棄正在執(zhí)行的指令 。 在復位后 , 除 PC和 CPSR之外的所有寄存器的值都不確定 。 復位 ? 復位 當 nRESET信號再次變?yōu)楦唠娖綍r , ARM處理器執(zhí)行下列操作: M[4:0]變?yōu)?b10011( 管理模式 ) ; CPSR中的 I和 F位 ( 禁止 IRQ/FIQ) 中斷; CPSR中的 T位 , 返回到 ARM狀態(tài)并恢復執(zhí)行; PC從地址 0x00開始對下一條指令進行取指 。 第 1章 目錄 ? ? ? ? ? ? ? ? ? ? ? ?6. 程序狀態(tài)寄存器 ?數(shù)據(jù)類型 存儲器及存儲器映射 I/O ? 存儲器格式 地址空間的規(guī)則: ?位于地址 A的字包含的字節(jié)位于地址 A,A+1,A+2和 A+3; ?位于地址 A的半字包含的字節(jié)位于地址 A和 A+1; ?位于地址 A+2的半字包含的字節(jié)位于地址 A+2和 A+3; ?位于地址 A的字包含的半字位于地址 A和 A+2; 字節(jié) 字節(jié) 字節(jié) 字節(jié) 地址 A A+1 A+2 A+3 半字 半字 字 ARM結構通常希望所有的存儲器訪問都合理的對齊 。 具體來說就是字訪問的地址通常是字對齊的 , 而半字訪問使用的地址是半字對齊的 。 不按這種方式對齊的存儲器訪問稱為 非對齊的存儲器訪問 。 存儲器及存儲器映射 I/O ? 未對齊的存儲器訪問 存儲器及存儲器映射 I/O ? 未對齊的 指令預取 操作 當處理器處于 ARM狀態(tài)期間,如果寫入到寄存器 PC中的值是非字對齊的(地址的低兩位不為0b00,即不能被 4整除),要么指令執(zhí)行結果不可預知,要么將地址值中的最低兩位被忽略 當處理器處于 Thumb狀態(tài)期間,如果寫入寄存器 PC中的值是非半字對齊的(地址的最低位不為0b0,即不能被 2整除),要么指令執(zhí)行結果不可預知,要么將地址值中的最低位被忽略 存儲器及存儲器映射 I/O ? 未對齊的 數(shù)據(jù)訪問 操作 對于 load/store操作,如果是非對齊的數(shù)據(jù)訪問操作,系統(tǒng)定義了下面 3種可能結果。 ?執(zhí)行的結果不可預知 ?忽略字單元地址的低兩位的值,即訪問地址為( address and 0xfffffffc)的字單元;忽略半字單元地址的最低位的值,即訪問地址為( address and 0xfffffffe)的半字單元 ?由存儲系統(tǒng)實現(xiàn) 忽略字單元地址的低兩位的值;忽略半字單元地址的最低位的值 ,這時該地址值原封不動地送到存儲系統(tǒng)。 許多 ARM實現(xiàn)在前一條指令的執(zhí)行尚未完成時將指令從存儲器中取出 。 這個動作稱為 指令的預取 。指令的預取并不是實際執(zhí)行指令 。 被預取的指令可能得不到運行 , 可能的原因是: ?發(fā)生異常中斷 , 程序將會跳轉到異常中斷處理程序處執(zhí)行 , 當前預取的指令將被拋棄; ?前面執(zhí)行時發(fā)生跳轉 , 當前預取的指令也將被拋棄; 存儲器及存儲器映射 I/O ? 指令的預取和自修改代碼 當讀取 PC時 , 得到的指令地址比正在執(zhí)行指令的地址落后兩條指令: ?對于 ARM指令 , 得到的地址是它自身地址 +8; ?對于 Thumb指令 , 得到的地址是它自身地址 +4; 存儲器及存儲器映射 I/O ? 指令的預取和自修改代碼 ??? ??? ??? 內(nèi)核流水性 執(zhí)行 譯碼 預取 LDR R0,AddInstr STR R0,NextInstr NextInstr SUB R1,R1,1 . . . AddInstr ADD R1,R1,1 (1) (2) (4) (3) 自修改代碼指的是代碼在執(zhí)行過程中可能修改自身 。 在存儲器中的指令可能在它被預取之后 , 被執(zhí)行之前 , 如果有數(shù)據(jù)訪問指令修改了位于主存中的該指令 , 這是被預取的指令和主存中對應的指令不同 。 存儲器及存儲器映射 I/O 對于支持指令預取的 ARM系統(tǒng),自修改代碼可能帶來潛在的問題: LDR R0,AddInstr ST ,NextInstr LDR R0,AddInstr ST ,NextInstr LDR R0,AddInstr SUB 1,R1,1 ( 1) 預取指; ( 2) 預取指 , “ LDR”指令進入譯碼階段; 3 從地址 ( 3) 預取指 , “ STR 指令進入譯碼階段 , 同時 “ LDR”指令進入執(zhí)行階段 , 結果是將地址 ( 4) 的指令裝入 R0; 4 繼續(xù)預取指 , 同時 “ STR”指令進入執(zhí)行階段 , 結果是將 “ ADD”指令存入地址( 3) , “ SUB”指令被覆蓋; 5 雖然 “ SUB”指令在存儲器中被覆蓋 ,但是它仍存在于流水線上 , 并進入執(zhí)行階段; ADD (3) SUB 1,R1,1 ST ,NextInstr ??? ??? SUB 1,R1,1 LDR R0,AddInstr STR R0,NextInstr NextInstr SUB R1,R1,1 . . . AddInstr ADD R1,R1,1 (1) (2) (4) (3) ?但有可能不按照上面所說的執(zhí)行:因為如果在 “ SUB”指令預取之后 , 執(zhí)行之前 , 發(fā)生中斷 , 那么預取的 “ SUB”指令將被丟棄 , 而重新預取 ,此次預取的是 ADD指令 。 ?如果 ARM處理器或存儲器系統(tǒng)允許對預取指令進行備份 , 并使用這些備份而不是重新預取 , 那么以后執(zhí)行這段代碼 , 仍將執(zhí)行 “ SUB”指令 。 存儲器及存儲器映射 I/O ? 預取可能存在的問題 提示 :因為自修改代碼有許多問題需要考慮 , 建議盡量避免使用 。 每個 ARM芯片都定義了一系列的操作 , 使自修改代碼序列可以可靠地執(zhí)行 。 這一串代碼稱為指令存儲器屏障 ( IMB) , 它通常同時取決于具體的 ARM芯片的和具體存儲器芯片 。 存儲器及存儲器映射 I/O ? 指令存儲器屏障( IMB) 基于 ARM內(nèi)核的芯片具有許多的外設 , 這些外設訪問的標準方法是使用 存儲器映射的 I/O, 為外設的每個寄存器都分配一個地址 。 通常 , 從這些地址裝載數(shù)據(jù)用于讀入 , 向這些地址保存數(shù)據(jù)用于輸出 。有些地址的裝載和保存用于外設的控制功能 , 而不是輸入或輸出功能 。 存儲器及存儲器映射
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1