時間:2018-08-22 00:00:00 來源:信盈達 作者:信盈達
在ARM處理器中,如果數據或指令是2字節的那么其在存儲器中的存儲要是半字對其的(存儲的起始地址的低一位是0b0),即存儲的首地址必須是2的整數倍。如果數據或指令是4字節的那么該數據或指令在存儲器中的存儲是字對其的(存儲的起始地址的低兩位都是0b00),即存儲的首地址必須是4的整數倍。我們在訪問存儲器的時候,如果存儲單元的地址沒有按照上述規則對其,則稱為非對齊的存儲訪問操作。
1. 非對齊的指令讀取操作
當處理器在執行ARM指令的時候,ARM指令每條指令是4字節的寬度,所以對于ARM指令在存儲器當中的存儲是按照字對齊的方式來存儲的。我們在讀取一條ARM指令時如果寫入到PC寄存器的值不是字對其的(PC的后兩位不是0b00),那么指令執行的結果可能是不可預知的,或者寄存器PC中不管低的兩位是什么值,寄存器PC中的地址值被送入到存儲系統后,存儲系統都會將其低兩位的值忽略,即認為低兩位是0b00。
2. 非對齊的數據訪問操作
當ARM處理器進行對內存的讀寫操作時,如果所要操作的數據在內存中是非對齊的,則有可能出現以下兩種運行結果:
(1) 執行的結果不可預知
(2) 當操作的數據是字類型的時,忽略地址中低兩位的值,即訪問地址為指定的地址與0xFFFFFFFC相與的結果(Address & 0xFFFFFFFC);當操作的數據是半字類型的時,忽略地址中低一位的值,即訪問地址為指定的地址與0xFFFFFFFE相與的結果(Address & 0xFFFFFFFE)。這種操作是由存儲系統來完成的,地址值并不會在CPU內發生變化。

信盈達2008年在深圳特區南山高新科技園成立。自成立至今近九年來專注為企業和個人提供高端方案設計、高端嵌入式/Android培訓等服務。公司下設信盈達實訓學院、信盈達研發中心、信盈達教學儀器三大業務板塊。九年來公司堅持"技術領先、服務領先",以雄厚的實力和專業的品質成為國內唯一有實力從產品最底層研發到系統層開發的嵌入式實訓、產品解決方案提供商。為中國IT行業提供最具價值的職業教育服務。專業培訓嵌入式、物聯網、人工智能、Java、單片機等課程,想了解更多信息點擊立馬咨詢
免費領取試聽卡
申請已經提交
老師會馬上給您安排試聽課程!
申請出錯了
您可以加老師QQ:914865590報名咨詢!