我对LDR指令的理解
2016-04-28 18:30
316 查看
LDR PC, =MyIRQHander
LDR PC,MyIRQHander
LDR PC, =MyIRQHander
MyIRQHander:
MOV R1,R2
MyIRQHander 是内存的地址,MOV R1,R2是内容,也就是1个32bit的数(机器码)。
指令执行后,PC的内容是机器码所在内存处的地址,也就是MyIRQHander
如果写成:
LDR PC, MyIRQHander
MyIRQHander:
MOV R1,R2
那么PC的内容就是MyIRQHander地址处的内容,即MOV R1,R2指令的机器码,不是我们想要的。
如果写成:
LDR PC, MyIRQHander
MyIRQHander:
.word IRQHanderFunc
IRQHanderFunc:
MOV R1,R2
意思是PC取得的是MyIRQHander地址处的内容,也就是IRQHanderFunc的值,即MOV R1,R2指令所在的地址。
在C语言中:
void (*MyIRQHander)(void); MyIRQHander是一个函数指针,其实也就是一个指针型的变量。
void IRQHanderFunc(void)
{
R1 = R2;/*伪代码*/
}
MyIRQHander:
.word IRQHanderFunc
相当于:MyIRQHander = IRQHanderFunc;
//////////////////////////////////////////////////////////////////////////////////////////////
LDR R1,VAR
VAR:
.word 0x12345678
类似于
int VAR = 0x12345678;
R1 = VAR;
////////////////////////////////////////////////////////////////////////////////////////////////
LDR R1,VAR
VAR:
.word VAR2
VAR2:
.word 0x12345678;
int *VAR;
int VAR2;
VAR = &VAR2;
R1 = VAR;/*R1最后存储的是0x12345678内容所在的地址*/
LDR PC,MyIRQHander
LDR PC, =MyIRQHander
MyIRQHander:
MOV R1,R2
MyIRQHander 是内存的地址,MOV R1,R2是内容,也就是1个32bit的数(机器码)。
指令执行后,PC的内容是机器码所在内存处的地址,也就是MyIRQHander
如果写成:
LDR PC, MyIRQHander
MyIRQHander:
MOV R1,R2
那么PC的内容就是MyIRQHander地址处的内容,即MOV R1,R2指令的机器码,不是我们想要的。
如果写成:
LDR PC, MyIRQHander
MyIRQHander:
.word IRQHanderFunc
IRQHanderFunc:
MOV R1,R2
意思是PC取得的是MyIRQHander地址处的内容,也就是IRQHanderFunc的值,即MOV R1,R2指令所在的地址。
在C语言中:
void (*MyIRQHander)(void); MyIRQHander是一个函数指针,其实也就是一个指针型的变量。
void IRQHanderFunc(void)
{
R1 = R2;/*伪代码*/
}
MyIRQHander:
.word IRQHanderFunc
相当于:MyIRQHander = IRQHanderFunc;
//////////////////////////////////////////////////////////////////////////////////////////////
LDR R1,VAR
VAR:
.word 0x12345678
类似于
int VAR = 0x12345678;
R1 = VAR;
////////////////////////////////////////////////////////////////////////////////////////////////
LDR R1,VAR
VAR:
.word VAR2
VAR2:
.word 0x12345678;
int *VAR;
int VAR2;
VAR = &VAR2;
R1 = VAR;/*R1最后存储的是0x12345678内容所在的地址*/
相关文章推荐
- Android Glide 分析
- 最长递增子序列(LIS)问题
- csu1646 HearthStone
- 一、Centos6.7编译安装Nginx1.81
- 32.透明状态栏
- ubuntu中通过U盘制作启动盘
- iOS 通知与消息机制
- RotateAnimation 设置旋转中心点、不停顿
- PHP中的魔术方法总结
- Log4J实战
- PHP中try{}catch{}的具体用法详解
- Android中Toolbar的使用
- pch文件用到的地方详解
- Junit使用教程--整合spring测试套件
- spring mvc获取header
- 三.注解
- [BS] 小知识点总结-05
- sql Server存储过程
- R语言基本知识梳理(2)-因子与序列
- JavaScript中数组小结