所有ARM操作码都是1个字节吗?

时间:2012-11-17 20:41:07

标签: arm cpu-architecture opcode

在x86架构中,有一个,两个和三个字节的操作码。 ARM怎么样?例如,当我反汇编二进制文件时,我是否可以将第一个字节作为操作码?

2 个答案:

答案 0 :(得分:4)

没有。现在有一些手臂指令集。主臂指令集,所有指令都是32位,并且指令的解码不被隔离到指令内的一个字段。拇指指令集基于16位指令,但是相同的答案,取决于解码在不同位置的指令。然后有拇指指令集的thumb2扩展,相同的答案。 thumb2指令是拇指未定义的指令之一,然后添加更多位以区分哪条指令。

从infocenter.arm.com获取一个ARM体系结构参考手册以查看所有这些内容。有几个漂亮的图表显示了这一切是如何工作的,msbits用于将指令分成不同的类型,然后根据其余位被解码的类型。

x86来自8位世界,其中设计倾向于使用一个存储器位置(/访问)(在一个字节的时间)用于更常用的指令,然后将一些操作码复用到第二个字节。还完全添加了immediates。那时候没关系,但今天效率低下。 x86应该是你学到的最后一个指令集,不代表一个好的指令集,你需要忘记一些事情才能继续前进。

维基百科在维基页面上有许多指令集,其他通常有直接链接。像arm和mips这样的IP供应商,以及许多芯片供应商,你可以直接访问他们的网站并获取文档。

答案 1 :(得分:2)

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

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

相关问题