我正在写一个简单的手臂模拟器。 arm具有不同的格式/教学等级link 读取二进制格式的指令后如何确定哪个类/格式指令属于。
答案 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'),
以下是你如何应用它:
if (InstructionBytes and Mask) = value
然后我们有一场比赛您需要确保以正确的顺序应用蒙版 应始终首先检查在较新版本中引入的说明。
无论您是处于ARM还是Thumb模式,都无需担心 只需拆卸两个并将两个拆卸装置并排存放即可。如果发生模式更改,请切换正在读取反汇编指令的表格。