【X86】---X86處理器大小端的數據存儲驗證

以前也關注過大小端的存儲,可能時間久了,加之又以前的電腦抽象換成了當前的處理器寄存器的值判斷,致使本身老是有點蒙圈。看Spec手冊的時候,有時會沒法與手冊中某個Bit的值與RU/RW工具讀出來的對應上。這就很尷尬了。專門花時間整理下該部分的內容:工具

1. 什麼是大小端blog

先解釋下什麼是大小端(自行百度)內存

2. X86處理器用RU工具讀取的值如何與Spec的描述進行Bit對應it

2.1 如:下面是一個Spec中GP_LVL寄存器,另外一個是RU工具讀出來的。我想判斷該寄存器的Bit3的值是多少,這下犯難了,大小端的不理解,讓我有點混淆。百度

 

 2.2 爲了理清楚這個問題,專門作了下述實驗im

咱們看Spec時1個4字節32Byte的的寄存器,一般是bit31~bit0這樣來看,由高到底,那麼對應到寄存器中,如何將RU讀出來的四個字節的數據與這個bit31~bit0對應起來呢。d3

這個寄存器是一個控制GPIO電平的寄存器,32個bit控制了31個GPIO的電平,基本能夠理解爲,bit0對那個GPIO0,biit1對應GPIO1。數據

1)輸出GPIO8爲1爲0,看哪一位置在變化db

這個步驟,我經過CPU實際操做了一把。先後的數據變化爲下圖所示img

 僅有這一次的數據變化,還不夠,所以我又加了GPIO3的變化,數據變化是:3F->37

所以綜上兩個變化,能夠獲得下面的對應圖:即bit3對應0c的字節,bit8對應0d的字節。進而咱們能夠推出來

  • bit7~bit0在內存中的存儲對應關係爲:bit7~bit0對應低字節的位置,且字節內的bit對應關係爲一一對應
  • bit15-bit8在內存中的存儲對應關係爲:bit15~bit8對應第二小字節的位置,且字節內的bit對應關係爲一一
  • ……(以此類推)

由此就獲得瞭如何在RU中的數據與Spec的bit對應起來的結論。

相關文章
相關標籤/搜索