打印

arm数据处理指令的操作数寻址问题

[复制链接]
1735|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rr_tm_520|  楼主 | 2010-6-9 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学ARM,在看ARM数据处理指令的操作数的寻址方式的时候有点不明白:

<opcode> {<cond>} {s} <rd>, <rn>,<shifter_operand>

shifter_operand是第二个操作数,当shifter_operand为立即数方式的时候

每个立即数是由一个8位的常数循环右移偶数位得到。其中循环右移的位数由一个4位的二进制的两倍表示。如果立即数记作<immddiate>,8位常数记作immed_8,  4位右移值记作rotate_imm则有:
       <immediate>=immed_8循环右移(2*rotate)
有几个地方有点搞不懂,望各位高手解释以下,感激不尽,呵呵
  第一:这个8位的常数是什么啊?  是十进制的数,二进制的?  八进制还是十六进制?
  第二:为什么要这样表示这个立即数啊? 直接表示不就完了吗?还搞这么复杂?希望有人给我详细解释,谢谢..........

相关帖子

沙发
centimetre| | 2010-6-10 12:55 | 只看该作者
8位是8bit,二进制
立即数这样是为了扩大能编码的立即数的范围,arm指令总共才32bit,还要包含指令编码等信息,那留给立即数的位置就没有32bit宽了,所以不能直接放进去,而要改成幂指数的形式

www.cmtekchina.com

使用特权

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

本版积分规则

28

主题

56

帖子

1

粉丝