请问ARM指令LDR和ARM伪指令LDR有什么区别
这几天看uClinux引导部分代码的时候,到到这么一段汇编代码:
.text
/* 设置系统配置器SYSCFG */
ldr r0, =SYSCFG
ldr r1, =rSYSCFG
str r1, [r0]
查了一下资料,发现ldr如果作为ARM的load/store指令用于将存储骑数据传递到寄存器,但是ARM的伪指令中也有一个ldr指令,用于大范围地址读取。那么:
.以上的汇编代码中ldr到底属于哪种情况?
.汇编器编译的时候如何理解ldr,理解为ARM指令还是ARM伪指令?
.两者具体有什么区别?如何使用?
谢谢!
问题点数:20、回复次数:2Top
1 楼lihao1111111111(Blue sea)回复于 2006-09-07 10:11:20 得分 0
没见过啊!Top
2 楼moonfkypm(传说)回复于 2006-09-08 11:36:11 得分 0
还没注意这个问题,刚刚查了书,确实有指令和伪指令。
引自arm体系结构
...............................
伪指令LDR{cond} register, ={expr|label-expr}
expr为32为常量。编译器根据expr的取值情况来处理这条伪指令:
1、当expr表示的地址没有超过mov或mvn指令中地址的取值范围时,编译器用合适的mov指令或mvn指令代替该LDR伪指令。
2、当expr表示的地址超过了mov或mvn指令中地址的取值范围时,编译器将该常数放在缓冲区中,同时用一条基于PC的LDR指令读取该常数。
...............................
通过上面两种可以得出伪指令LDR和ARM指令LDR的区别,具体使用时,可以不用考虑二者的区别,由编译器决定的,看源码时,你只要搞清楚它的功能就行。Top




