ARM 處理器對存儲器空間的訪問分辨率以字節為最小單位;ARM 處理器還支持 16bit 數據(2 字節)的存儲器訪問和 32bit數據(4 子節)的存儲器訪問。在ARM 中將32 位的數據稱之為‘字’,將 16 位的數據稱之為‘半字’。
ARM 處理器在對于“字”/ “半字”數據進行訪問時,對數據的存儲格式是有要求的【書中講到若不按照如此要求:可能存儲器系統的實現更加困難;可能給ARM系統的移植帶來麻煩(缺少統一標準);標準軟件(編譯器和軟件工具)在不遵守規則的系統中可能不工作。】在存儲器緊鄰的兩個字節單元,并且首字節地址必須能被2整除,這樣存儲的 16bit 數據稱為 ‘半字對齊’存儲數據,16bit 數據這樣的存儲方式稱為 ‘半字對齊’存儲。類似的,ARM 處理器在進“字”數據訪問時,要求被訪問的“字”必須 存放在存儲器緊鄰的4 個字節單元,并且首字節地址必須能被4 整除,【按照二進制從低位數起的1248換算法,能被2整除最低位的1不能有,能被4整除,低位的1和2都不能有】這樣存儲的32bit 數 據稱為‘字對齊’存儲數據,32bit 數據這樣的存儲方式稱為‘字對齊’存儲。
能被2 整除數據的二進制表示,其最低位一定是‘0’;能被4 整除數據的二進制表示,其最低兩位一定是‘00’。ARM 體系要求32 位長的ARM 指令在存儲器中必須字對齊存儲,16 位長的 Thumb 指令必須半字對齊存儲。因此,在ARM 狀態下,R15 的值總是能被4 除,也就是R15 寄存器的最低2 位總是 00;Thumb 狀態下,R15 的值總是能被2 整除,也就是R15 寄存器的最低位總是0。【借此就能夠檢測處理器工作于何種狀態之下】
*【】中是我自己的注解,要思辨地看待……
評論