2013-06-20 58 views
1

我知道ARM有很多寄存器,我想知道是什麼映射之間的映射(r0 - r15,cpsr等),以他們的二進制表示在最終的二進制文件中使用(基本上,指令中的Rn和Rd字段的值是什麼)。例如它是r00b0000r1只是0b0001?如果是這樣的話,在特定的CPU模式下是什麼。或者CPU模式不會影響寄存器的標識符(我覺得它應該是不同的代碼)。如何在二進制引用ARM寄存器

謝謝。

+1

如果你有機會獲得ARM指令設置細節,你應該參考它。它應該很簡單。 – Ash

+0

@你爲什麼覺得它應該有所不同? –

+0

我有2個獨立的ARM手冊,它們涉及指令結構的所有內容(哪些是什麼以及它們的含義),但它沒有從寄存器到二進制關係的映射。 – sparticvs

回答

1

從infocenter.arm.com獲取ARM體系結構參考手冊。你想知道的一切都在那裏。

指令對r0 = 4'b0000和r1 4'b0001等編碼,直到r15 = 4'b1111。有些寄存器是基於模式,管理模式,用戶模式中斷模式等進行分組的,指令中的編碼不會改變r13在編碼中是13,但處理器中的某處是if-then-else得到真正的登記冊。對我們來說這是埋沒在他們的邏輯中的。

對於大多數指令,拇指指令一般限於r0-r7,有幾個專門用於移入/移出較高編號的寄存器r8-r15,但編碼相同r0 = 0 r1 = 1,r2 = 2等等。

對於許多指令集,你可以算出來你自己,你可以試試

add r0,r0,r1 
add r0,r0,r2 
add r0,r0,r3 
add r0,r0,r4 
... 
add r0,r1,r0 
add r0,r2,r0 
add r0,r3,r0 
... 

,看看你位後組裝拆卸,然後改變...

+0

謝謝,我將不得不在ARM網站上註冊。我一直在使用不需要註冊的東西。 – sparticvs

+1

如果你想做手臂的東西,你正在使用的核心的建築參考手冊和技術參考手冊是必須的。請注意,如果您沒有記住特定的一個,請爲armv5啓動arm arm,然後根據需要獲取更多的信息,以查看隨着時間的推移已經更改或添加的內容。 –

0

Here是一個鏈接,將帶您到ARM網頁,並允許您下載ARM ARM。簡單的答案是它根據體系結構(V4-7),指令和指令類型(THUMB,ARM,THUMB2,64位等)而不同。

+0

位域內使用的實際值是否指向給定的寄存器 - 比如R5 - 實際上是否改變了?用於在整個指令字內指定寄存器的位域的位置將明顯改變(因爲指令字長度改變),並且可用寄存器和可能的使用可能性將在變體之間改變。但是,看到寄存器突然編號不同,這會很奇怪。也許有一些擴展寄存器。 –

+0

在指令集之間是,甚至當指令需要一個可變數量的寄存器來執行操作時(MUL vs MOV),對於架構變化,Thumb僅支持8個寄存器,因此它的位置與支持16個的ARM不同。它們傾向於保持指令相當一致,但不完美。 –

+0

啊,但你說的正確,位字段的位置一旦在指令中開始,就保持一致,除非它是一個非常專業的指令。 –