指令大小是什么意思?

时间:2013-10-29 11:09:32

标签: assembly arm instructions instruction-set

我真的很费劲,可能听起来很愚蠢但我真的不确定当我们说指令大小为32位或指令是16位时它是什么意思。

如果opreand大小为32位,那么我们说它是32位指令,如果操作数大小是16位指令。

或者每个指令都有操作码,如果操作码地址是32位,那么我们说指令是32位。

我也正在进行ARM架构,我读到的所有拇指指令都是16位,但ARM模式指令是32位。

指令大小是否完全取决于正在使用的架构,还是取决于CPU运行的模式?

编辑:

http://www.xgc-tek.com/manuals/m1750-ada/m1750/x524.html

鉴于Link指出16位指令由8位操作码和4 + 4位两个通用寄存器组成。

ARM拇指指令集是怎么回事?

1 个答案:

答案 0 :(得分:2)

ARM(不包括新发布的64位)有两个指令集,由固定大小的指令组成。经典的一个称为ARM,每个指令都是32位。后来有一个名为Thumb(实际上是Thumb2),它可以有32位或16位指令。 ARM内核仅支持ARM,ARM + Thumb和Thumb指令集。如果核心支持两种模式,则它具有更改有效指令集选择的指令,并且指令流可以在不同的集合之间跳转(互通)。

ARM指令可以包含固定的操作数,但它们永远不会像指令大小那样大。一些指令还支持对诸如移位,旋转之类的操作数的操作,这给你的印象是可以用一条指令加载32位值。

示例#1

a = 0x1;

拇指

2001        movs    r0, #1

ARM

e3a00001    mov r0, #1

示例#2

a = 0xC0000000;

拇指

f04f 4040   mov.w   r0, #0xC0000000

ARM

e3a00103    mov r0, #0xC0000000

示例#3

a = 0x12345678

拇指

f245 6078   movw    r0, #0x5678
f2c1 2034   movt    r0, #0x1234

ARM

e3050678    movw    r0, #0x5678
e3410234    movt    r0, #0x1234