|
标准的ARM指令啊。
add r3, r8, #1, 20
sub sp, sp, #0x9E, 30
mov r2, #0x1E, 20
这三条都是常规数据操作指令,立即数寻址。
分别是以下含义:
r3 = r8 + (1循环右移20位)
sp = sp - (0x9E循环右移30位)
r2 = 0x1E循环右移20位。
在ARM指令中,常规数据操作指令可以用这种立即数(杂项数据操作指令不能用立即数),
但由于ARM是精简指令集,所有指令长度一样,受指令长度的限制,
并不是所有的数都可以用作立即数寻址。
因为在立即数寻址方式中,ARM只提供了12bit来放数据。
其中8位是用来记录数值的,另外4位放移位的位数,以此来形成一个立即数。
立即数必须合以下要求,否则汇编时会报错:
可以由一个8位的数循环右移偶数位(只有4位来记录移位值)来形成这个值。
对于不合要求的数,只能用其它方式先加载到寄存器,再作运算了。
比如用伪指令。
LDR Rn,=#立即数。
ARM的手册上有这些信息啊。看好多书上也都讲了的。
|
|