打印
[ZLG-ARM]

请教各位

[复制链接]
1538|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
battery06|  楼主 | 2007-5-9 22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
computer00| | 2007-5-9 23:02 | 只看该作者

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

MVN R0,#0xA0000000, 由于0xA0是8bit位图,所以可以编译通过.而前面一条指令则无法表达。

使用特权

评论回复
板凳
zlgARM| | 2007-5-10 07:51 | 只看该作者

battery06

您google一下 ARM+8位位图。答案跃入眼帘。


简单来说,ARM指令长度只有32位,指令则包括操作码和操作数。在指令长度已经达到32位的情况下,操作数长度也就不可能没有限制,于是:

mov指令机器码的bit[7:0]存放立即数,bit[11:8]存放立即数的循环右移位数。 
所以,所谓8位位图,就是要求您的立即数要能够用机器码的bit[11:0]表示。

使用特权

评论回复
地板
zlgARM| | 2007-5-10 08:37 | 只看该作者

battery06

如果想要不受限制地操作立即数,可以将用伪指令把立即数赋值给某一内存单元。
例如:
Imdata dcd 0x12345678
ldr   R0,Imdata 

使用特权

评论回复
5
battery06|  楼主 | 2007-5-10 12:36 | 只看该作者

谢谢大家!

    谢谢各位了,以后还请多多指教啊!

使用特权

评论回复
6
computer00| | 2007-5-10 13:53 | 只看该作者

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

要加载立即数,直接用LDR伪指令 LDR R0,=#0x12345678  就可以了。

使用特权

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

本版积分规则

10

主题

24

帖子

0

粉丝