一 先让我们看一段汇编代码
LDR R0,=0x56000010 #R0 is set to be register GPBCON and is used to select pin function for Port B
#in,out special function and others
MOV R1,#0x00004000
STR R1,[R0] #pin GPB7 is set to be output port
以上三条汇编语句的功能是将数值0x00004000存储到以0x56000010为地址的存储单元中。
其反汇编代码如下
0: e59f0044 ldr r0, [pc, #68] ; 0x4c
4: e3a01901 mov r1, #16384 ; 0x4000
8: e5801000 str r1, [r0]
......
4c: 56000010 undefined
可见LDR R0,=0x56000010 被转换成ldr指令来执行
二 再看
LDR R0,=0x56000000
MOV R1,#0x00004000
STR R1,[R0]
其反汇编代码如下
0: e3a00456 mov r0, #1442840576 ; 0x56000000
4: e3a01901 mov r1, #16384 ; 0x4000
8: e5801000 str r1, [r0]
这里LDR R0,=0x56000000 被转换成mov r0, #1442840576
也就是说LDR伪指令是根据后面的数据值来决定转换为ldr指令或MOV指令执行。
那么同样是给R0赋值,LDR R0,=0x56000010 能否用mov r0, #0x56000010来代替呢,
三 由此可见MOV和LDR的区别
mov指令后面的立即数是有限制的,这个立即数必须由一个8位的二进制数经过偶数次右移后得到才合法数据
LDR R0,=0x56000000 被转换成mov r0, #0x56000000,其中立即数0x56000000是可以由0x56经过循环右移得到的,而0x56000010无法通过一个8位的二进制数经过偶数次右移后得到,所以无法转换成mov指令来实现。
四 再举例如下:
mov R0,#0x101
mov R0,#0xFF1
以上两条指令都不正确,因为立即数不合法。
这样的话用MOV指令是比较麻烦的,因为有些简单的数据比较容易看出来,有些数据即不容易看出来是否是合法数据。
五 使用ldr伪指令解决这个问题
为了解决这个问题,我们可以用LDR伪指令来实现,根据后面的立即数来决定转换为ldr指令或MOV指令执行,符合MOV指令的立即数合法性要求就转换为MOV指令,不符合的话就转换为LDR加载指令来实现。
在Uboot源码中看到这样一条指令 MOV r1,#0xFFFFFFFF
有点费解,查看反汇编代码如下
mvn r1,#0
原来如此。
上一篇:uboot-2011.12移植到S3C2440(序三)—— Makefile之参考文献
下一篇:《2440裸机》时钟体系
推荐阅读最新更新时间:2024-11-25 11:19
推荐帖子
- 电源技术
- 电源作为所有用电设备及电气控制器的能量提供单元,它的种类和规格较多,不同的用电设备及电气控制器所使用的电源种类和规格一般不同……电源技术下了看看,谢谢分享哦回复楼主lk972105的帖子谢谢分享哦回复楼主lk972105的帖子不客气,好好研究研究啊。回复板凳meng7722154的帖子补充电源设计资料,希望大家支持!下不了啊,谁能给我几个芯币啊costmemuch:L你得好好“挣钱”!回复7楼jianglgang的帖子原帖由meng772
- lk972105 电源技术
- 请问msp432launchpad活动的e金币发放了吗
- 请问msp432launchpad活动的e金币发放了吗,好像并没有收到请问msp432launchpad活动的e金币发放了吗反正手环收到了~!这个在等等吧,我的手环昨天也到了,这个不需要担心,你和管理员核实下应该就行看到大家已经在秀手环了就问一下,毕竟第一次有e金币flashtt发表于2015-6-2718:48看到大家已经在秀手环了就问一下,毕竟第一次有e金币 别急因为是一个管理员在负责这个事情,而且一般要凑够一定人数统一发放,发放时会有站内短信通知。
- flashtt 微控制器 MCU
- 把kernel从vivi向u-boot移植的时候遇到问题了!
- 三星提供的kernel是forvivi的,但俺想用u-boot来引导,结果移植上去之后,u-boot是跑起来了,但是引导kernel却出问题了看了kernel的头部的二进制数据,发现kernel的格式竟然还和bootloader的类型有关,forvivi的kernel的头就是适合vivi,不适合u-boot的,这下郁闷了,不知道我发现的对不对,也不知道怎么改,各位同学有感兴趣的么?或者有经验的,指导一下地说~~把kernel从vivi向u-boot移植的时候遇到问题了!
- zqf5 嵌入式系统
- 求解:双向可控硅触发方式有几种?
- 那位大师能给解释一下双向可控硅触发方式有几种?及每种方式的优缺点?求解:双向可控硅触发方式有几种?双向可控硅是相当于两个单向可控硅反并在一起,然后把G(控制极)接在一起.用的不多,具体它有几种方式我不是很清楚,但它的触发信号也是交流的~~~~回复:求解:双向可控硅触发方式有几种?双向可控硅有四种触发方式。哪种好,要看你是用来控制什么?对感性负载选择过零触发较好。回复:求解:双向可控硅触发方式有几种?主要的还是通过门级来控制用的多,可靠!!!楼主提出的问题,下面的资料可供参考
- 到处看看 模拟电子
- 求ZJY-LBS147TC-IG01 RGB屏资料
- 求I2C接口ZJY-LBS147TC-IG01RGB屏资料,网上找了下没找到。部分原理图如下:用在复旦微FM33FT0xxA开发板上,贴片图如下有这ZJY-LBS147TC-IG01模块驱动(芯片)的资料/驱动demo代码的可在此贴下分享,急求,TKS求ZJY-LBS147TC-IG01RGB屏资料看看这个资
- dirty 汽车电子
- 小米的四电机系统的圆规掉头、原地掉头,算法实现上难吗?
- 四电机的圆规掉头、原地掉头,只是成本上的提升了,还是有算法上的突破?难点是在控制电机上,还在机械结构方面?现在小米智能底盘预研车展现的这些特色,很多人在哇塞,不太懂这些,蹲坛友解惑~小米的四电机系统的圆规掉头、原地掉头,算法实现上难吗?我感觉只是成本上的提升了,玩过diy小车的应该都会控制电机转向吧~分享一个网友的看法:四差速太基本的东西了运动模型,正逆运动学,现成的算法了,电机只要四轮独立可以控制原地调头的车小米不是第一辆吧,之前就有了有现成的运动模
- 蓝猫淘气 汽车电子
设计资源 培训 开发板 精华推荐
- EVAL-ADM3052EBZ,具有集成高压总线侧线性稳压器的 ADM3052 隔离式 CAN 收发器的评估板
- AM30EW-4812SZ 12V双输出DC/DC转换器典型应用
- 具有跟踪功能的 LTM4647EY 6V 至 15V 输入、1.0V 和 1.2V 输出的典型应用电路
- NSI50350AST3G 恒流 LED 灯串驱动器的典型应用
- 使用 ROHM Semiconductor 的 BD49E54G-TR 的参考设计
- 用于便携式的 ±5V 模拟放大
- MIC94345-GYCS 1.8V 输出电压、500mA LDO 与纹波阻断技术的典型应用
- LTC2945HMS-1 宽范围 -4V 至 -500V 负功率监视器的典型应用
- DC1783A-G,用于 LTC2377CMS-18、18 位、500 ksps、31MHz 低功率、低噪声模数转换器的演示板
- 使用 NXP Semiconductors 的 MCF51QM128VLH 的参考设计