PowerPC處理器的暫存器大端小端影響寫入感想

2021-08-04 09:46:17 字數 950 閱讀 3538

先放結論:沒啥影響。

這兩天又要重新撿起來mpc8377的板子開始做專案,因為sylixos的核心有所變動,網絡卡協議棧多做了一層封裝,所以網絡卡驅動也有相應變化,需要重新修改一下。然後考慮到上次我寫的中斷驅動實在太醜,看到人家工程師寫的中斷驅動**比我好看很多,所以決心在重寫網絡卡驅動前先把中斷控制器驅動模仿著重寫一下。但是寫的時候發現了乙個問題:

中斷控制器暫存器是記憶體對映暫存器,以中斷遮蔽暫存器simsr_h為例子,在晶元手冊上面,是這麼畫的和描述的:

我們知道,ppc是大端模式,也就是說,資料高位存在記憶體低位址,0x12345678這個值存在記憶體中時,位址由低到高存的就是12 34 56 78,而arm或者x86的位址由低到高應該存的是78 56 34 12,那麼問題來了:

比如我要把這個暫存器的bit 0置1允許tsec1的傳送中斷,問題來了,因為ppc是大端模式,那麼我寫入這個暫存器的值,應該是:0x80000000還是0x00000001呢?

之前非常糾結,可以說糾結了一下午,改了又改(因為一些原因板子沒在身邊),還跑到sylixos的群裡面問了一些比較蠢的問題,裡面的乙個大神給我說的是:

「大小端只在零存整取或整存零取時才需要考慮。」,我這種整存整取的情況,應該是不需要考慮大端小端問題的,也就是說,我要把最低位置1的話(因為我問的就是最低位置1),無論大端小端都應該寫入0x00000001。

不過!重點來了,其實按照手冊上這麼畫的,這個最高位和最低位其實是反的,也就是說,其實手冊上面的bit 0是實際上的最高位……也就是說……我實際上想把bit 0置1的話,應該是無論大端小端都寫入0x80000000。

實際上,按照手冊上的暫存器的bit寫法對應著寫值就可以了,根本不用糾結大端小端的問題(實際上我上次寫的時候也是這麼幹的,不過那是因為根本沒想起來ppc是大端模式,直接忽略了…)。真是又學到了。

Intel處理器基本暫存器

ia 32架構提供16個基本程式執行暫存器,用於一般系統和應用程式程式設計 這些暫存器可分為如下四類 通用暫存器主要儲存指令運算過程中的各類資料,包括 ia 32架構下共包含了8個通用暫存器,依次命名為eax ebx ecx edx esi edi ebp esp。儘管這些暫存器都可用於通用資料的儲...

ARM微處理器的暫存器結構

arm處理器共有37個暫存器,被分為若干個組 bank 這些暫存器包括 31個通用暫存器,包括程式計數器 pc指標 均為32位的暫存器。6個狀態暫存器,用以標識cpu的工作狀態及程式的執行狀態,均為32位,目前只使用了其中的一部分。同時,arm處理器又有7種不同的處理器模式,在每一種處理器模式下均有...

微處理器內部結構 暫存器

mov指令定址方式 對埠的讀寫 in out 指令 並且指令間接定址是不用中括號 微處理器的內部結構 1.alu 2.暫存器 資料暫存器 位址暫存器 也可暫存資料 3.控制器 取指令 指令暫存器 解碼 4.io控制邏輯 控制器邏輯圖 堆疊 由先進先出形式組織的一段記憶體區域 8086必須按字操作 p...