循环右移

[复制链接]
 楼主| wrainp 发表于 2008-4-24 18:10 | 显示全部楼层 |阅读模式
在《ARM体系结构》一书中,<br /><br />讲到了立即数方式----每个立即数由一个8位的常熟循环右移偶数位得到。<br /><br />这样并不是每一个32位的常数都是合法的立即数,只有通过上面的方法构造得<br /><br />到的才是合法的立即数。<br /><br />下面是合法的立即数:<br /><br />0xff,0x144,0xff0,0xff00<br /><br />而下面的不是合法的:<br /><br />0x101,0x102,0xff1<br /><br />请问立即数是否合法怎么判断的啊?<br /><br />另外:<br /><br />0x3f循环右移(2*0xE)后怎么得到了ox3f0??<br /><br />8位立即数循环右移又到底是怎么回事呢?<br /><br />8位二进制循环右移后是不是仍然是8位二进制呢?
 楼主| wrainp 发表于 2008-4-25 01:11 | 显示全部楼层

立即数

&nbsp;&nbsp;baidu,google了无数下,终于在下的一个ppt里豁然开朗~汗颜一下...<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;这里小总结一下,理解错了请高手指出...<br /><br />&nbsp;&nbsp;首先,这个立即数必须以8位作为基准(8位位图),如果这个数中‘1’的个<br /><br />&nbsp;&nbsp;数&gt=2,那么如果第一(高位)和最后一个‘1’(低位)之间的距离超过前后<br /><br />&nbsp;&nbsp;8位的范围内(包括它们两个本身),那么意味着,这个立即数的位图超过了<br /><br />&nbsp;&nbsp;8位,即不是合法的。如果等于8位,那这个立即数也未必一定是合法的。因<br /><br />&nbsp;&nbsp;为如果最后一个‘1’(低位)后面还跟着奇数个‘0’的话,这个立即数依<br /><br />&nbsp;&nbsp;然是不合法的。只有当跟的‘0’的个数为偶数时,才是合法的。
computer00 发表于 2008-4-25 09:27 | 显示全部楼层

就是你拿着最后的数,移来移去的,

最终能把所有的1都放到一个字节中去,那就合法了~~~~如果移不到一个字节里面去,拿就不合法拉~~~~
 楼主| wrainp 发表于 2008-4-25 09:38 | 显示全部楼层

那这个数呢?

&nbsp;&nbsp;0x102<br /><br />--000100000010<br />这两个1是在一个字节中啊~<br />
computer00 发表于 2008-4-25 11:33 | 显示全部楼层

倒塌……忘记说只能移动偶数次了...

  
 楼主| wrainp 发表于 2008-4-26 10:25 | 显示全部楼层

呵呵

&nbsp;&nbsp;了解了<br /><br />&nbsp;&nbsp;谢谢
l0p0c 发表于 2008-4-26 11:29 | 显示全部楼层

  
wishcom 发表于 2008-4-26 17:21 | 显示全部楼层

有一个规避立即数的办法

使用间接寻址可以规避这个问题的。<br /><br />如:ldr&nbsp;r0,&nbsp;=0x12345678<br /><br />你看它的汇编实际上是3句话:<br /><br />ldr&nbsp;r1,&nbsp;addr1<br />ldr&nbsp;r0,&nbsp;[r1]<br /><br />addr1&nbsp;dcd&nbsp;0x12345678<br /><br />这样就不存在你在用数的时候还要看看合不合法。。。
richardvip 发表于 2008-5-3 20:44 | 显示全部楼层

以上大家说得都是在汇编下的

那在c下我如何注意避免这种情况出现呀
richardvip 发表于 2008-5-7 15:31 | 显示全部楼层

ding

  
wishcom 发表于 2008-5-10 18:53 | 显示全部楼层

C编译器不会关心你的数是不是合法立即数的

编译器会按照最佳的访问方式来访问的,即:<br />如果立即数是合法的,就可以采用立即数寻址<br />如果立即束是不合法的,则采用间接寻址<br />
 楼主| wrainp 发表于 2008-5-11 00:26 | 显示全部楼层

间接寻址

<br />&nbsp;&nbsp;那这个间接寻址的地址是多少阿,是通过立即数来确定的?还是在程序里有?
computer00 发表于 2008-5-11 01:44 | 显示全部楼层

程序里面有。编译器自动分配空间。

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

79

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

31

主题

79

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部