如何在拆卸过程中对二元臂指令进行分类

时间:2014-11-25 06:40:12

标签: assembly arm

我正在写一个简单的手臂模拟器。 arm具有不同的格式/教学等级link 读取二进制格式的指令后如何确定哪个类/格式指令属于。

1 个答案:

答案 0 :(得分:1)

我最近自己编写了一个ARM模拟器。

这是我用过的策略:

在应用蒙版后使用蒙版和值进行测试。

这是ARM的GNU反汇编程序的片段:

  (* 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解释了条件代码等......
  6. 您需要确保以正确的顺序应用蒙版 应始终首先检查在较新版本中引入的说明。

    无论您是处于ARM还是Thumb模式,都无需担心 只需拆卸两个并将两个拆卸装置并排存放即可。如果发生模式更改,请切换正在读取反汇编指令的表格。