打印
[ARM入门]

LDR伪指令和MOV有啥区别

[复制链接]
1554|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
阿南| | 2015-12-22 08:52 | 只看该作者
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
比如想把数据从内存中某处读取到寄存器中,只能使用ldr
比如:
ldr r0, 0x12345678
就是把0x12345678这个地址中的值存放到r0中。
而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。

使用特权

评论回复
板凳
Mark_Zuckerberg|  楼主 | 2015-12-22 20:35 | 只看该作者
本帖最后由 Mark_Zuckerberg 于 2015-12-22 20:37 编辑
阿南 发表于 2015-12-22 08:52
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
比如想把数据从内 ...

嗯,正常情况是从存储器加载到寄存器,
可是当伪指令时貌似跟MOV差别不大,但是超过0xff的数有的能编译通过有的又不能

使用特权

评论回复
地板
xinzha| | 2015-12-23 11:13 | 只看该作者
32位ARM中,指令长度是32位的,这32位中包含了条件码,目标寄存器,源寄存器以及立即数等等信息,所以一条指令中想给某个寄存器赋值会有限制,ARM中加入了桶形移位器这个概念,可以让你赋值的时候拥有更多选择,但是也无法保证能表达所有整数。有的能编译过有的不能,就是因为桶形移位器能表达一部分数就过了,不能表达的就过不了。
不过一个好的编译器会在这个时候介入,当你一条mov无法表达所赋的值的时候,有些编译器会把指令变成多条,以完成你的意图。

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝