字對齊、半字對齊、字節對齊的理解


一般情況下字為32位(4字節)、半字為16位(2字節)、字節為8位(1字節)。

大多數計算機使用字節(8位的數據塊)作為最小可尋址的存儲器單位,而不是訪問存儲器中單獨的位。存儲器的每一個字節都由唯一的數字標識,稱為該字節的地址,所有可能地址的集合稱為存儲器空間。

舉例來說,ARM處理器工作狀態有如下兩種:

ARM狀態:執行字對齊的32位ARM指令。

Thumb狀態:執行半字對齊的16位Thumb指令。

字對齊、半字對齊、字節對齊只要明白其中一個,另外兩個自然也就理解了。所以這里只對字對齊做一個解釋:

假如,第一次取ARM指令1的地址為 0x0000 0000,由於ARM指令占32位(4個字節),因此地址0x0000 0001、0x0000 0002、0x0000 0003都是指令1的地盤。那么第二次取ARM指令2的地址為 0x0000 0004,同樣的道理,0x0000 0005、0x0000 0006、0x0000 0007也都是指令2的地盤,以此類推:

指令1:0x0000 0000——0x0000 0003

指令2:0x0000 0004——0x0000 0007

指令3:0x0000 0008——0x0000 000f

指令4:0x0000 0010——0x0000 0013

觀察各個指令的起始地址

若按十進制來看分別是:0、4、8、16、…都可以被4整除

若按二進制來看bit1和bit0都是0:也就是說它們的起始地址都是0bxxxxxxxx xxxxxxxx xxxxxxxx xxxxxx00(32位地址)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM