免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2256 | 回复: 2
打印 上一主题 下一主题

mov 立即数产生 求解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-03 23:18 |只看该作者 |倒序浏览
再来分析一下立即数的产生,其寻址方式是这样的:


11         8 7                              0
+----------+-------------------------------+
| Rotate   |          Imm                  |
+----------+-------------------------------+
[7:0] Unsigned 8 bit immediate value
[11:8] Shift applied to Imm

The immediate operand rotate field is a 4 bit unsigned integer which specifies a shift operation on the 8 bit immediate value. This value is zero extended to 32 bits, and then subject to a rotate right by twice the value in the rotate field. This enables many common constants to be generated, for example all powers of 2


1. 取低8位,先用0扩展为32位数
2. 将所得32位数循环右移 2*Rotate位,Rotate为[11:8]
来分析一句:mov r2, #300。反汇编如下:

8004: e3a02f4b mov r2, #300 ; 0x12c

立即数是直接放在指令内部的。

1. 取其低8位:0x4b

2. 扩展为32位:0x0000 004b

3.   2*Rotate = 2*15 = 30

4.   循环右移30位(相当于左移2位)。即0100 1011 左移2位,得到0001 0010 1100 ,即0x12c,十进制等于300

对于0x53000000的计算方法也是相同的。 mov r1, #0x53000000 这样写确实是可行的。

以上是从http://blog.chinaunix.net/space. ... og&cuid=2055392这个博客中摘取的


按照上面的说明可以推算出0x12c怎么算的


现在小弟的疑问是低8为为0x4b和Rotate[11:8]为0xf,这个从何而知的

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
2 [报告]
发表于 2011-12-05 03:41 |只看该作者
哪一种CPU家族?

论坛徽章:
0
3 [报告]
发表于 2011-12-05 16:56 |只看该作者
回复 2# linuxfellow


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP