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