5620|12

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于sources.cmn文件的问题和两个汇编指令。 [复制链接]

bsp包下的sources.cmn文件是怎样产生的。他的生成是要手动编写吗?它和catalog中的bsp.pbcxml文件是什么关系?我修改了bsp.pbcxml,用set命令查看环境变量是可以看到的。但是sources.cmn文件中没有那个环境变量,所以我在编译的时候仍然不能有效修改环境变量。


另外两个汇编指令

1、ldr r0,=0X10000000
2、mov r0,#10000000
第一条指令是什么意思,到底是把0X10000000这个立即数给r0还是把地址0X10000000中的数传给r0,
第二条质量是传立即数,但是立即数的大小有限制吗?
多谢指点。

最新回复

ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。 比如想把数据从内存中某处读取到寄存器中,只能使用ldr 比如: ldr r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0中。 而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。 x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。 另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如: ldr r0, =0x12345678 这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512(个人认为是256)。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。 ldr伪指令和ldr指令不是一个同东西。 ldr伪指令可能就是在第二个参数前加了一个等号。  详情 回复 发表于 2010-2-6 15:37
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶下。

MARK.
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
最好自己在调试环境下,看一下就知道了
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
都是立即数
只是mov r0,#10000000  指令送的数据大小有限制。

sources.cmn是手动编辑的。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
在pbcxml中添加的环境变量并不能直接影响到代码的编译,需要在source.cmn中根据这个环境量添加宏定义。参考如下,在bsp的.bat文件中添加了

set OLD_BOARD=1

然后在source.cmn中添加

!IF "$(OLD_BOARD)" == "1"
CDEFINES=$(CDEFINES) -DOLD_BOARD
!ENDIF

这样你在代码中就可以用OLD_BOARD来实现条件编译了。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
mov r0,#10000000 这句话编译的时候应该就会报错的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
mark下。。。。
mov r0,#10000000
这个。。mov r0,0x10000000?mov貌似要带一个立即数,源操作数是立即数,前面应加'0'记得看哪里这样说过。。忘记了。。汗
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 3 楼 gooogleman 的回复:
都是立即数
只是mov r0,#10000000? 指令送的数据大小有限制。

sources.cmn是手动编辑的。
学习,学习…
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 3 楼 gooogleman 的回复:
都是立即数
只是mov r0,#10000000? 指令送的数据大小有限制。

sources.cmn是手动编辑的。


多谢这位大侠,具体限制多少呢?是不是mov指令一行只能占用一个字?也就是后面的立即数一般最多两个字节?

最近有点忙忘记结贴了,两天内结贴。谢谢大家关注。
 
 
 

回复

59

帖子

0

TA的资源

禁止访问

10
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
1、LDR伪指令的形式是“LDR Rn,=expr”。作用是装在一个32bit常数和一个地址到寄存器。
下面举一个例子来说明它的用法。

COUNT EQU       0x56000054
LDR       R1,=COUNT
MOV       R0,#0
STR       R0,[R1]

COUNT是我们定义的一个变量,地址为0x56000054。

LDR       R1,=COUNT                是将COUNT这个变量的地址,也就是0x56000054放到R1中。
MOV      R0,#0是将立即数0放到R0中。


2、另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:
ldr r0, =0x12345678
这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为 mov指令的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
学习
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

13
 
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
比如想把数据从内存中某处读取到寄存器中,只能使用ldr
比如:
ldr r0, 0x12345678
就是把0x12345678这个地址中的值存放到r0中。
而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。
x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。

另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:
ldr r0, =0x12345678
这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512(个人认为是256)。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。

ldr伪指令和ldr指令不是一个同东西。
ldr伪指令可能就是在第二个参数前加了一个等号。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表