[ZLG-ARM] 请教各位

[复制链接]
2302|5
 楼主| battery06 发表于 2007-5-9 22:09 | 显示全部楼层 |阅读模式
<br /><br />&nbsp;&nbsp;&nbsp;小弟刚接触&nbsp;&nbsp;ARM&nbsp;&nbsp;,下面两条指令不知为什么一个行得通,一个不对<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;R0,#0X12345678&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这句指令不能编译<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;R0,#0X5FFFFFFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这句指令可以编译<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;哦,我知道MOV&nbsp;只能将8位数送到目标寄存器,请各位指点啊
computer00 发表于 2007-5-9 23:02 | 显示全部楼层

下面那条指令编译后会生成MVN指令,

MVN&nbsp;R0,#0xA0000000,&nbsp;由于0xA0是8bit位图,所以可以编译通过.而前面一条指令则无法表达。
zlgARM 发表于 2007-5-10 07:51 | 显示全部楼层

battery06

您google一下&nbsp;ARM+8位位图。答案跃入眼帘。<br /><br /><br />简单来说,ARM指令长度只有32位,指令则包括操作码和操作数。在指令长度已经达到32位的情况下,操作数长度也就不可能没有限制,于是:<br /><br />mov指令机器码的bit[7:0]存放立即数,bit[11:8]存放立即数的循环右移位数。&nbsp;<br />所以,所谓8位位图,就是要求您的立即数要能够用机器码的bit[11:0]表示。
zlgARM 发表于 2007-5-10 08:37 | 显示全部楼层

battery06

如果想要不受限制地操作立即数,可以将用伪指令把立即数赋值给某一内存单元。<br />例如:<br />Imdata&nbsp;dcd&nbsp;0x12345678<br />ldr&nbsp;&nbsp;&nbsp;R0,Imdata&nbsp;<br />
 楼主| battery06 发表于 2007-5-10 12:36 | 显示全部楼层

谢谢大家!

&nbsp;&nbsp;&nbsp;&nbsp;谢谢各位了,以后还请多多指教啊!
computer00 发表于 2007-5-10 13:53 | 显示全部楼层

4楼所说的,R0中的应该是那个地址吧?而不是所要的立即数

要加载立即数,直接用LDR伪指令&nbsp;LDR&nbsp;R0,=#0x12345678&nbsp;&nbsp;就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

24

帖子

0

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