打印
[ZLG-ARM]

ARM指令第二操作数#immed_8r详解

[复制链接]
4161|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
armqt|  楼主 | 2009-7-9 13:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
wh_cxh曾经对这个问题的解释如下

ARM指令第二操作数#immed_8r详解
大多数ARM通用数据处理指令有一个灵活的第2操作数(flexible second operand),
这里这解释一下其中的一种格式,
#immed_8r
常量的表达式。常量必须对应于8位位图(pattern)。该位图在32位字中,被循环移位偶数位(0,2,4,...28,30)
合法常量0xff,0xff000,0xf000000f。非法常量:0x101,0xff04

ARM 在32位模式下,一条指令长度为32位,在上述数据处理指令中,操作数2为12位。

所以像0x7f02这样的数,要两条指令才能完成。
MOV     R3, #0x7F00    ;E3 A0 3C 7F 该指令自己完成0x7f移位
ORR     R1, R3, #2

所以直接是找不到0x7f02的
#immed_8r那个看明白了






但是请问图片里的那个8~11位的循环移位数, 

   0000是不移位; 0001是移动2位;0010是移动4位;0011是移动6位   这样子吗?

那么 0x7F00  是  7F 左移8位   指令中变成  4 7F  
请问为什么老大你给出的是   C 7F 呢?
ARM的指令格式对数据处理处理是按照上述图片的进行的,[8]~[11]位显示了循环移位的位数,
0000是不移位; 0001移动2位;0010移动4位;0011移动6位.......1100(十六进制为C,十进制为:12)移动24位,
为什么移动的仅仅是偶数位,这个可以看看ARM的汇编指令格式,指令规定这个操作数是移动偶数位的,因此使用四位就
可以实现移动32位。

问题出在下面的这句话:
那么 0x7F00  是  7F 左移8位   指令中变成  4 7F  

ARM的汇编指令规定,第二操作数#immed_8r是 循环右移 偶数位的,因此7F右移24位之后位00007F00
之后与0x02 进行ORR操作,可以得到0x7F02这个数值。


   

相关帖子

沙发
lpc2410| | 2009-7-9 14:08 | 只看该作者

怎么没有国产呢

使用特权

评论回复
板凳
tmake| | 2009-7-11 14:08 | 只看该作者

没有图,有些看不懂呢

使用特权

评论回复
地板
armqt|  楼主 | 2009-7-24 18:02 | 只看该作者

学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

150

帖子

0

粉丝