0

在 x86 架构中,有 1、2 和 3 字节操作码。ARM呢?例如,当我反汇编一个二进制文件时,我可以总是将第一个字节作为操作码吗?

4

2 回答 2

4

不,现在有一些 arm 指令集。主要的 arm 指令集,所有指令都是 32 位的,并且指令的解码并不孤立于指令内的一个字段。thumb指令集基于16位指令,但答案相同,具体取决于解码在不同位置的指令。然后是拇指指令集的拇指2扩展,同样的答案。thumb2 指令是来自 thumb 的未定义指令之一,然后添加更多位来区分哪个指令。

从 infocenter.arm.com 获取一份 ARM 架构参考手册以查看所有内容。有几个很好的图表显示了这一切是如何工作的,msbits 用于将指令划分为不同的类型,然后根据类型对其余位进行解码。

x86 来自 8 位世界,其中设计倾向于将一个内存位置(/访问)(当时是一个字节)用于更常用的指令,然后将一些操作码复用到第二个字节中。立即数也全部添加。那时还可以,但今天效率低下。x86 应该是你学习的最后一个指令集,它不能代表一个好的指令集,你需要忘记很多东西才能继续前进。

wikipedia 在 wiki 页面本身上有许多指令集,其他的通常有直接链接。像 arm 和 mips 这样的 IP 供应商,以及许多芯片供应商,您可以直接访问他们的站点并获取文档。

于 2012-11-17T22:36:33.353 回答
2

ARM 指令实际上并没有“操作码”的概念。我不太了解 x86 指令集,但是您所描述的听起来像是 6502 机器代码,其中一些字节标识要执行的指令,而其他字节则指定指令使用的数据。

忽略Thumb,所有 ARM 指令都是四个字节长。指令使用的操作数包含在这四个字节中。

于 2012-11-17T22:31:08.937 回答