这可能是一个愚蠢的问题,但是是否有网页/文档/书籍可以为您提供英特尔 x86 和 ARM 汇编指令的映射?
我知道这不是一对一的映射,但我会假设许多指令确实可以无缝地映射(例如 MOV)。
指令集架构具有并使用类似的声音和功能指令,例如添加、异或、加载、存储和移动。
无论两个指令集是什么,您都可以在同一个地方找到您要查找的映射。获取一个指令集的文档,获取另一个指令集的文档,然后查找说明。x86 喜欢重载 mov 指令以进行加载和存储以及移动立即数和寄存器以注册移动,对于 arm,您使用加载和存储进行加载和存储和移动以进行寄存器到寄存器和立即到寄存器。
intel 是 cisc,arm 是 risc,所以不会有一对一的映射。很少有指令会无缝映射,添加 rd=rd+rn 和其他寄存器来注册 alu 函数(对于全尺寸寄存器而不是小数 x86 寄存器)。
由于不是无缝的,也不是一对一的地图,因此有多种有效的解决方案可以从一张地图转到另一张地图,因此找到一张地图没有意义。
您正在寻找的是静态二进制翻译或动态二进制翻译,如果您从未做过静态翻译,则更容易。并且不要从一个机器代码转换为另一个程序集或机器代码。从机器代码转换为 C,然后让编译器将其编译为目标,同时优化并让您选择使用不同的目标。另一种选择是指令集模拟器。
如果您只想手动重写一些代码,请使用两个指令集手册源和目标。即使有地图,您仍然需要对两个指令集有很好的了解才能使用该地图。
为什么?您是否正在尝试将代码从一个移植到另一个?你知道一个并且想要一个“备忘单”来学习另一个吗?我能想到的最好的是ARM/Thumb 快速参考卡(x86 可能有很多)。
我似乎找不到一个,这也许是映射远非“无缝”的主要原因。ARM 指令通常是 3-op ( abc dst,src1,src2
),更糟糕的是,src2
可以对其应用移位/循环。x86 指令通常是 2-op,除了你有一些奇怪的东西,比如lea
通常用作 3-op add。
我能想到的最接近的东西是组合的 ARM/x86 备忘单,将常用指令分为几类(算术、位操作、控制流、浮点、内存访问)。
然后是拇指...