我真的很费劲,可能听起来很愚蠢但我真的不确定当我们说指令大小为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拇指指令集是怎么回事?
答案 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