2014-11-25 21 views
3

我在寫一個簡單的arm仿真器。手臂具有不同的格式/指令類別link 以二進制格式讀取指令後如何確定哪些類別/格式指令屬於哪種類型。如何在拆卸期間對二進制指令進行分類

+0

通過根據鏈接到的頁面上的表格(來自ARM的指令集引用)查看位模式。 – Michael 2014-11-25 08:17:24

+0

http://emucode.blogspot.se/2010/09/decoding-arm-instruction-set.html – auselen 2014-11-25 08:49:25

+0

謝謝@auselen如果您知道任何其他鏈接,請發帖 – 2014-11-25 09:13:24

回答

1

我最近自己寫了一個ARM模擬器。

下面是我所使用的策略:

使用口罩,以測試對已應用該面具後的值。

下面是從GNU的反彙編代碼段用於ARM:

(* V7 instructions. *) 
    (arch:ARM_EXT_V7; value:$f910f000; mask:$ff70f000; i:_und; assembly:'pli'#9'%a'), 
    (arch:ARM_EXT_V7; value:$f3af80f0; mask:$fffffff0; i:_und; assembly:'dbg'#9'#%0-3d'), 
    (arch:ARM_EXT_V7; value:$f3bf8f50; mask:$fffffff0; i:_und; assembly:'dmb'#9'%U'), 
    (arch:ARM_EXT_V7; value:$f3bf8f40; mask:$fffffff0; i:_und; assembly:'dsb'#9'%U'), 
    (arch:ARM_EXT_V7; value:$f3bf8f60; mask:$fffffff0; i:_und; assembly:'isb'#9'%U'), 

這裏是你如何運用它:

  1. 閱讀下一個指令字節。
  2. 如果需要,更正大/小端模式。
  3. if (InstructionBytes and Mask) = value然後我們有一個匹配
  4. 根據彙編字符串中的指令解釋剩餘的位。
  5. 如果ARM解釋的條件碼等...

你需要確保你按照正確的順序應用口罩。
應該首先檢查在新版本中引入的指令。

無需擔心是否處於ARM或Thumb模式。
只需拆卸兩個並且兩個並排存放拆卸。如果發生模式更改,請切換您正在讀取反彙編指令的表格。

相關問題