这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » ARM7的 MOV指令第二操作数只能是4的倍数吗?

共3条 1/1 1 跳转至

ARM7的 MOV指令第二操作数只能是4的倍数吗?

菜鸟
2007-12-06 16:07:31     打赏
kk EQU   0x100
AREA   Init,CODE,READONLY
ENTRY
start
MOV   R0,#kk
MOV   R0,#0x5001
B   .
END
--------------------------------------------
报错。说立即数0x00005001超出范围
如果改成MOV   R0   #0x5004就不报错
ads1.2下面MOV指令只能送4的倍数值?
怎么回事啊?

另外:  
MOV   R0,#0x101   也会报错
MOV   R0,#0x104   就不会报错




关键词: 指令     第二     作数     只能     倍数    

菜鸟
2007-12-06 23:50:01     打赏
2楼
你去了解一下ARM的指令结构和MOV指令的具体定义就会明白了。这里大概说一下为什么,具体的麻烦你参考
ARM ARCHITECTURE REFERENCE MANUAL.

一条ARM指令是32-bit的,每条指令都有固定的定义。32-bit指令包括了指令定义,条件码,目的寄存器,及
其操作数。其中操作数有MOV指令的B[11:0]比特定义,总共是12-bit. 这12-BIT会按照一定的要求来解析。
很显然,这12比特并不能表示所有的数。这就是为什么会报错了。

如果LZ要装载一个数到一个寄存器,而MOV指令满足不了要求,可以用LDR指令,例如: LDR R0, =0X5001

助工
2007-12-11 19:22:08     打赏
3楼
MOV   R0   #0x5004恐怕也不行吧,
我也刚试过了该语句,错误为:out of range for this operation!

MOV和MVN指令的中,当第二个操作数为立即数时,必须是八位数循环移动偶数位获得的,如:0x101无论怎么移动都无法获得原八位数,0x104可以认为是0x41左移两位获得的!
不知道对你有没有帮助

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]